Hi,
ich habe ein kleines MVC-Framework entwickelt (Nein, ich möchte KEIN fertiges Framework verwenden, sondern mein eigenes. hat seine Gründe
).
Es gibt verschiedene Controller mit Aktionen.
Ich möchte jetzt ein Menü erstellen, da so aufgebaut sein soll:
Hauptmenü
Es gibt ein Hauptmenü, über das ich auf andere Seiten wechseln kann (Ein Controller stellt dabei eine Seite dar, Standartaktion ist Index_Action())
Nennen wir das mal Ebene 1.
Untermenü
Auf manchen Seiten gibt es ein Untermenü (Wichtig ist, dass das optional bleibt). In diesem Untermenü gibt es Einträge, die bei jeder Aktion des Controllers im Menü angezeigt werden (Ebene 2 sozusagen).
Dann gibt es Einträge, die nur bei bestimmten Aktionen angezeigt werden, z.B. bei Controller_Index::Linkpartner_Action().
Das ist dann Ebene 3
Das Problem ist jetzt: Wie speichere ich das in der Datenbank ab, so dass ich anhand der URL (Die URL erhält den Namen des Controllers und den Namen der Action) rausfinden kann, welche Einträge ich anzeigen lassen muss?
Bisher habe ich das ohne Datenbank gelöst, über eine Registry.
Man kann hier in allen Controllern Einträge zur Registry hinzufügen und sie auch überall wieder auslesen.
In meinem Controller habe ich dann z.B. sowas:
Ich habe mir jetzt überlegt, dass ich ein DB-Design anlege, das so aussieht
menu (id, name, parent_id, url, external, title)
action (id, controller_id, name)
controller (id, name)
Aber es ist mir auch nach reichlichen Überlegungen nicht gelungen, wie ich das jetzt richtig auslesen soll. Hat jemand eine Idee?
MfG fat32
ich habe ein kleines MVC-Framework entwickelt (Nein, ich möchte KEIN fertiges Framework verwenden, sondern mein eigenes. hat seine Gründe
Es gibt verschiedene Controller mit Aktionen.
Ich möchte jetzt ein Menü erstellen, da so aufgebaut sein soll:
Hauptmenü
Es gibt ein Hauptmenü, über das ich auf andere Seiten wechseln kann (Ein Controller stellt dabei eine Seite dar, Standartaktion ist Index_Action())
Nennen wir das mal Ebene 1.
Untermenü
Auf manchen Seiten gibt es ein Untermenü (Wichtig ist, dass das optional bleibt). In diesem Untermenü gibt es Einträge, die bei jeder Aktion des Controllers im Menü angezeigt werden (Ebene 2 sozusagen).
Dann gibt es Einträge, die nur bei bestimmten Aktionen angezeigt werden, z.B. bei Controller_Index::Linkpartner_Action().
Das ist dann Ebene 3
Das Problem ist jetzt: Wie speichere ich das in der Datenbank ab, so dass ich anhand der URL (Die URL erhält den Namen des Controllers und den Namen der Action) rausfinden kann, welche Einträge ich anzeigen lassen muss?
Bisher habe ich das ohne Datenbank gelöst, über eine Registry.
PHP-Code:
class ViewHelper_Menu implements FW_View_Helper_Interface
{
private $registry;
const REGISTRY_KEY = "__SUBMENU_REGISTRY_KEY__ENTRIES_MEN";
public function run(array $params = array())
{
$this->registry = FW_Registry::getInstance(self::REGISTRY_KEY);
return $this;
}
public function add($name, $url, $title = "", $external = false)
{
$entries = $this->registry->entries;
$entries[] = array(
"name" => $name,
"link" => $url,
"title" => ($title == "") ? $name : $title,
"external" => $external
);
$this->registry->entries = $entries;
return $this;
}
public function getEntries()
{
return $this->registry->entries;
}
}
In meinem Controller habe ich dann z.B. sowas:
PHP-Code:
class Controller_Index extends FW_Controller_Abstract
{
public function init()
{
$this->FW_View_Helper_Path()->add("Startseite", $this->ViewHelper_URL("index", "index"));
//Diese EInträge sind auf allen Unterseiten des Controllers zu sehen
$this->ViewHelper_Menu()->add("Überall zu sehen", "google.de", "titel");
$this->ViewHelper_Menu()->add("auch Überall zu sehen", "google.de", "titel");
}
public function index_Action()
{
$this->FW_View_Helper_Title()->set("Startseite");
$this->view->addTemplateContent("content", null, "index.tpl.php");
$this->ViewHelper_Menu()->add("nur in index_Action zu sehen", "google.de", "titel");
}
public function unterseite_Action()
{
$this->FW_View_Helper_Title()->set("Unterseite");
$this->view->addTemplateContent("content", null, "index.tpl.php");
$this->ViewHelper_Menu()->add("nur auf Unterseite zu sehen", "google.de", "titel");
}
}
menu (id, name, parent_id, url, external, title)
action (id, controller_id, name)
controller (id, name)
Aber es ist mir auch nach reichlichen Überlegungen nicht gelungen, wie ich das jetzt richtig auslesen soll. Hat jemand eine Idee?
MfG fat32

Entweder versteh ich dein Problem nicht, oder hä? Du willst einfach einen Art Kategorie/Navigationsbaum in der Datenbank speichern und wissen in welchen Zweig du bist damit du die Kindknoten auslesen kannst, oder?
Kommentar