Was in der menu.xml definiert ist
In der menu.xml ist das große Menü des Administrationsbereiches (Backend) definiert. Außerdem werden hier auch die Tabs definiert, über die man die einzelnen Seiten pflegt (siehe die Bilder).
Wo liegt die menu.xml?
Die Standard menu.xml liegt
… vor OXID 4.7 im Verzeichnis /admin
… ab OXID 4.7 im Verzeichnis /applications/views/admin
Wenn man ein Modul schreibt, so liegt die menu.xml des Moduls im Hauptverzeichnis des Moduls, also in /modules/MyModule/menu.xml.
Der Aufbau der menu.xml
<?xml version="1.0" encoding="ISO-8859-15"?> <OX> <OXMENU id="NAVIGATION_ESHOPADMIN"> <MAINMENU id="mxorders"> <SUBMENU id="mxdisplayorders" cl="admin_order" list="order_list"> <TAB id="tbclorder_overview" cl="order_overview" /> <TAB id="tbclorder_main" cl="order_main" /> <TAB id="tbclorder_address" cl="order_address" /> <TAB id="tbclorder_article" cl="order_article" /> <TAB id="tbclorder_remark" cl="order_remark" /> <TAB id="tbclorder_downloads" cl="order_downloads" /> <BTN id="order_newremark" /> </SUBMENU> <SUBMENU id="mxorderovw" cl="list_order" /> <SUBMENU id="mxpacklist" cl="order_package" /> </MAINMENU> </OXMENU> </OX>
- OXMENU steht für einen Menübereich. Im oberen Screenshot wäre das „eShop Admin“ und „Module“. Das Attribut „id“ definiert den Titel des Menüs. Anstelle den Titel direkt anzugeben, kann man hier auch den Namen einer Sprachkonstante eingeben. Mehr zum Thema Mehrsprachigkeit des Menüs weiter unten. In der hier gezeigten Codepassage wird die Sprachkonstante „NAVIGATION_ESHOPADMIN“ verwendet, welche in der Deutschen Sprache mit „eShop Admin“ übersetzt ist. Das Attribut „id“ sollte eindeutig sein. Jedes OXMENU kann aus beliebig vielen MAINMENUs bestehen.
- MAINMENU steht für ein Untermenü. Im Screenshot oben wären das für den Menübereich „eShop Admin“, die Einträge „Stammdaten“, „Shopeinstellungen“, „Erweiterungen“ usw. Das Attribut „id“ funktioniert hier wie bei OXMENU. Jedes MAINMENU kann aus beliebig vielen SUBMENUs bestehen.
- SUBMENU steht für einen Menüeintrag. Das Attribut „id“ funktioniert auch hier wie bei MAINMENU und OXMENU. Das Attribut „cl“ gibt die Klasse an, die geladen werden soll, wenn der Benutzer auf den Menüeintrag klickt. Also diejenige Klasse, die dann die Seite rendert. Optional kann zusätzlich das Attribut „list“ definiert werden. Als Wert empfängt das Attribut „list“ ebenfalls den Namen einer Klasse. Wird das Attribut „list“ definiert, so wird der zu rendernde Seitenbereich vertikal in zwei Teile aufgeteilt: Im oberen wird der Inhalt von der über „list“ angegebenen Klasse gerendert. Im unteren wird die über „cl“ angegbene Klasse verwendet. OXID verwendet hier Frames. Zwischen dem unteren und oberen Bereich werden Tabs angezeigt, sofern welche definiert wurden. Damit die Tabs auch erscheinen, müssen sie im Template des oberen Bereiches mit „[{include file=“pagetabsnippet.tpl“}]“ eingebunden werden. SUBMENU kann TAB-Tags und BTN-Tags enthalten.
- TAB steht für einen Tab. Tabs funktionieren wie SUBMENU, nur mit dem Unterschied, dass die Links nicht im Menü, sondern als Tabs außerhalb des Menüs (siehe Beschreibung bei SUBMENU) angezeigt werden. Außerdem gibt es das Attribut „list“ bei TAB nicht.
Die menu.xml erweitern
Man kann die menu.xml um eigene Menübereiche, Untermenüs, Menüeinträge und auch Tabs erweitern.
Dabei kann man sowohl komplett neue Menübereiche/Untermenüs anlegen, als auch bestehende Menübereiche/Untermenüs erweitern.
Nehmen wir an, wir wollen ein bestehendes Menü erweitern, nämlich um einen weiteren Tab namens „Mein Tab“, welcher auf die Klasse „mymodule_name“ verlinkt, unter „eShop Admin“ > „Bestellungen verwalten“ > „Bestellungen“. Dann müssen wir die „id“-Attribute von OXMENU, MAINMENU und SUBMENU mit den entsprechenden „id“-Attributen anpassen:
<?xml version="1.0" encoding="ISO-8859-15"?> <OX> <OXMENU id="NAVIGATION_ESHOPADMIN"> <MAINMENU id="mxorders"> <SUBMENU id="mxdisplayorders" cl="admin_order" list="order_list"> <TAB id="Mein Tab" cl="mymodule_name" /> </SUBMENU> </MAINMENU> </OXMENU> </OX>
Alles, was man nicht erweitern möchte, benötigt einen eigenen, eindeutigen id-Attribut-Wert. Hier ein Beispiel, bei dem gar nichts überschrieben wird, sondern ein kompletter Menübereich neu hinzugefügt wird:
<?xml version="1.0" encoding="ISO-8859-15"?> <OX> <OXMENU id="Menübereich"> <MAINMENU id="Mein neues Menü"> <SUBMENU id="Mein erster Menüeintrag" cl="mymodule_myfirstmenuentry" /> </MAINMENU> </OXMENU> </OX>
Sprachkonstanten als id-Attribut-Wert eignen sich besser als Titel hinsichtlich der Eindeutigkeit.
Mehrsprachigkeit umsetzen
Die geschieht über das Sprachkonstantensystem.
Wichtig hierbei ist zu verstehen, dass in neuen OXID Versionen die Sprachdateien eines Modules scheinbar nur auf Modulseiten geladen werden. So eignen sie sich nicht für das Menü. Deshalb müssen die Sprachkonstanten für das Menü
… vor OXID 4.7 im Verzeichnis /out/admin/(de|en)/cust_lang.php
… ab OXID 4.7 im Verzeichnis /applications/views/(de|en)/cust_lang.php
definiert sein.