Den neuen Menütyp "vm_modmainmenu" als mod_mainmenu-Clone in VM einbinden
Um das neue Menü einzubinden wurde zunächst untersucht über welche Wege das erfolgen kann. In Betracht gezogen wurden 3 Varianten. Die dritte wurde schließlich praktiziert.
Schaut man sich das Script mod_virtuemart.php ab ca. Zeile 70 in joomlapfad/modules/mod_virtuemart/ mal an, sieht man die unterschiedliche Einbindung von separaten/externen Zusatz-Menu-Typen ...
joomlapfad/modules/mod_virtuemart/mod_virtuemart.php | |
1 |
... |
... und der VM-eigenen Menü-Classe über die Funktion get_category_tree des Objektes ps_product_category in der Classenbibliothek joomlapfad/administrator/com_virtuemart/classes/ps_product_category.php
joomlapfad/administrator/com_virtuemart/classes/ps_product_category.php | |
1 |
... |
Variante 1: Category-Display-Type "Link List" modifizieren
Dieser Type ist als Standard-Basis-Menüversion in VM tief verwurzelt - also nicht als externer Category-Display-Type eingebunden - und damit schwer zu modifizieren und immer auch nur durch intensive Eingriffe ist die VM-Scripte. In Hinblick auf die Updatefähigkeit von VM ist das nicht zu empfehlen. "Link List" wird auch anders eingebunden als die anderen Menüvarianten. Davon sollte man die Finger weglassen.
Variante 2: Duplizierung und Modifikation von z.B. "dTree" o.a.
Eine weitere Möglichkeit könnte sein, eines der mitgelieferten Module zu einem eigenen umzumodeln. Leider ist aber das, was all diese anderen Display-Typen ausliefern noch weiter von mod_mainmenu und deren Style-Strukturen entfernt als "Link List" und wurde deshalb als Variante verworfen - auch wenn es eigentlich der zu favorisierende Weg wäre. Der Aufwand der Anpassung schien mir hier aber zu hoch.
Variante 3: Ein ausgelagertes Menü mit ähnlichem Aufruf als Funktion wie bei "Link List"
Gleich vorweg: Diese Variante wurde schließlich praktiziert. Es ist quasi ein Mischweg aus 1 und 2. Einbebunden über require_once wird eine speparate vm_modmainmenu.php. Die dort enthaltene Funktion zur Menüausgabe wir aufgerufen und deren Rückgabewert über echo ausgeben.
Der Aufruf dieses neuen Display-Types erfolgt also durch Einfügung in der mod_virtuemart.php ab ca. Zeile 93 wie folgt...
joomlapfad/modules/mod_virtuemart/mod_virtuemart.php | |
94 |
elseif( $menutype == "modmainmenu" ) { |
Kurz zur Erläuterung der 4 Scriptzeile: Wird als gewünschter Menutype "modmainmenu" erkannt, dann wird die externe neu zu erstellende Datei vm_modmainmenu.php eingebunden. Es wird eine neues Objekt $modmainmenutree instanziert und dann durch Übergabe der Kategrorie ID und das Haupt-Levels aufgerufen.
Damit VM mit dem Menutype "modmainmenu" etwas anzufangen weiss, muss diese 1. im der mod_virtuemart.xml bekannt geben werden. Das erfolgt durch Einfügen folgender Zeile im Block
joomlapfad/modules/mod_virtuemart/mod_virtuemart.xml | |
174 |
<param name="menutype" type="list" default="links" |
Wurde diese Zeile dort eingefügt, kann 2. im Joomla Adminbereich unter Erweiterungen > Module > mod_virtuemart unter den Paramatern rechts ganz unten der Category-Display-Type "Joomla Modul MainMenu" ausgewählt werden.
Nun wird noch das Script vm_modmainmenu.php im Verzeichnis joomlapfad/modules/mod_virtuemart/ erstellt und die Style-Sheet-Datei als Navigation eingebunden.