Deutschland United States United Kingdom
ContentLion - Open Source CMS

Einfacherer Zugriff auf Menüs
Menu

Diese API bietet einen leichteren Zugriff auf die Menüs, als es aktuell im Core der Fall ist. Dazu gehören eigene Klassen für unterschiedliche Eintragstypen.

oder: CMS herunterladen

Menü anlegen

Die Klasse Plugin_Menu_Menu stellt ein einzelnes Menü da. Dieses bietet die Eigenschaften dictionary (Verzeichnis in dem das Menü liegt) und Name (Anzeige zur Verwaltung):

$menu = new Plugin_Menu_Menu();
$menu->dictionary("");
$menu->name("Testmenü12");

Dem Menü wollen wir nun einen neuen Eintrag hinzufügen. Wie wäre es mit einen Link zu ContentLion?

$entry1 = new Plugin_Menu_ExternalEntry();
$entry1->href("http://www.contentlion.de");
$entry1->title("ContentLion");
$menu->add_entry($entry1);

Die Klasse Plugin_Menu_ExternalEntry ist für Urls, die außerhalb von ContentLion gehen. Beim href kann man in dem Fall einfach die Url hinzufügen. Title ist wieder der angezeigte Text. Zum Schluss kann man das mit add_entry dem Menü hinzufügen.

Neben den Link nach außen kann man auch einen internen Link direkt zu einer Seite setzen, oder ein Untermenü einfügen. Das sieht dann so aus:

$entry2 = new Plugin_Menu_PageEntry();
$entry2->page($page);
$entry2->title("Startseite");
$menu->add_entry($entry2);
		
$menu_filter = new Plugin_Menu_Filter();
$menu_filter->ids(array(6));

$entry3 = new Plugin_Menu_SubmenuEntry();
$entry3->submenu($menu_filter->first());
$entry3->title("Submenü");
$menu->add_entry($entry3);

Um das Ganze zu speichern, muss man dann einfach nur noch die save-Funktion aufrufen:

$menu->save();

Menüs suchen

Natürlich muss man die angelegten Menüs auch wieterfinden. Dass geht über die Klasse Plugin_Menu_Filter. Diese ist ein Iterator und kann so auch mit einer foreach-Schleife durchlaufen werden. Mit den Funktionen titles und ids kann man Werte übergeben, nach die gesucht werden soll:

$menus = new Plugin_Menu_Filter();
$menus->ids(array(30,31));
foreach($menus as $menu)
{
	foreach($menu->entries() as $entry)
	{
		echo "- ".$entry->url()."<br />";
		if($entry->url() == null)
		{
			print_r($entry->submenu());
		}
	}
}

Hier wird nach den Menüs mit den IDs 30 und 31 gesucht. Man könnte jetzt auch titles hinzufügen, wo dann der Titel mindestens in einen der Werte auftauchen muss. Gibt man keinen Filter an, werden alle Menüs ausgegeben.

Das Menü selbst hat die Funktion entries mit dem die einzelnen Einträge ausgegeben werden können. Hier kann mit der url-Funktion das Linkziel ausgelesen werden. Bei Untermenüs ist diese jedoch null. Dafür gibt es dann die submenu-Funktion, die das Menü-Objekt vom Untermenü zurückliefert.

Menü löschen

Das Menü mitsamt seinen Einträgen kann man über die delete-Funktion löschen:

$menu->delete();