Extrem viel PHP Einsatz und reichlich Mysql Abfragen für etwas was andere System mit minimalem Aufwand gelöst haben.
Wer sich das mal genauer anschaut muss erkennen . die verantwortlichen Dev's hatten zum Zeitpunkt der Erstimplementation keine große Ahnung von Mysql.
Ja selbst die Basis dieses Hierarchie - Systems stammt aus fremder Feder.
Der Knackpunkt heute ist der , das für das Menü viel zu viel Kosten entstehen und das Gesamtsystem extrem nach unten ziehen.
Hier nun mal ein paar Basis - Beispiele von SQL Abfragen - mit DB Demodaten Cmsms 2.0 wie man ansetzen kann.
Abfrageteile wie auf active oder show_in_menu fehlen der Übersicht wegen.
1-
SELECT * FROM `cms_content` WHERE LOCATE('00003.00007', hierarchy)=1 ORDER BY hierarchy
Holt Parent und alle Subeinträge zu 00003.00007
2.
SELECT * FROM `cms_content` WHERE LOCATE('00003.00007.', hierarchy)=1 ORDER BY hierarchy
Holt alle Subeinträge zu 00003.00007 jedoch nicht Parent Level 1
3.
SELECT * FROM `cms_content` WHERE LOCATE('.', hierarchy)=0 ORDER BY hierarchy
Holt alle Level 1 Einträge
4.
SELECT * FROM `cms_content` WHERE LOCATE('.', hierarchy)=0 OR LOCATE(hierarchy,'00003.00007.00003' )=1 ORDER BY hierarchy
Holt alle Level 1 wie den Parent der 00003.00007.00003
Wie gesagt das sind Basisabfragen die man leicht ändern kann um sich sein Menü zu bauen.
Es ist möglich das gesamte bisherige Menügedröhne von Cmsms in eine einzige wenn auch umfangreiche Mysqlabfrage zu packen.
Das habe ich mal der deutschen Fraktion angeboten - die haben aber abgelehnt weil die 300€ denen zu viel waren.
Vielleicht findet sich ja jemand der sich etwas auskennt und es mal selbst versucht.
Nachtrag:
Abfrage 4 kann man hervorragend z.B. für Breadcrumbs verwenden Beispiel:
SELECT * FROM `cms_content` WHERE LOCATE(hierarchy,'00004.00001.00003' )=1 ORDER BY hierarchy
Und diese Basis kann man für die Ermittlung von Prev und Next einsetzen:
SELECT * FROM `cms_content` WHERE
(
hierarchy = IFNULL((select min(hierarchy) from `cms_content` where hierarchy > '00004.00001.00003'),0)
or hierarchy = IFNULL((select max(hierarchy) from `cms_content` where hierarchy < '00004.00001.00003'),0)
)
Nachtrag:
Wer in den Breadcrumbs auch den Link zu Startseite haben möchte - der setzt das hier ein.
Man beachte FORCE INDEX - Mysql wird den vorhandenen Index nutzen . man erspart sich die Sortierung über ORDER BY.
SELECT * FROM `cms_content` FORCE INDEX (cms_idx_content_by_hier) WHERE LOCATE(hierarchy,'00004.00001.00003' )=1 OR default_content =1







Keine Kommentare:
Kommentar veröffentlichen