Sie sind hier:  LinkpfeilPowerCMS LinkpfeilPlugins und Co LinkpfeilPlugins »Powermenu


Plugin Powermenu

Einführung

Menüs in PowerCMS basieren in PowerCMS grundsätzlich auf Smarty.
Dazu werden diese zweigeteilt:

  • Datenkomponente:
    Der Datenlieferant stellt nur die nötigen Menü-Informationen zur Verfgung
  • Anzeigekomponente:
    Die Anzeigekomponente kümmert sich um die gewünschte Darstellungsweise des Menüs

Vorteil dieser Zweiteilung ist, dass die Datenkomponente grundsätzlich immer die gleichen Daten (im Prinzip das komplette Menü) zur Verfügung stellt und der Designer die völlige Wahlfreiheit zur Gestaltung desselbigen hat.
Außerdem erhöht dies die Wiederverwendbarkeit der Datenkomponente: Die Daten müssen nur einmal geladen werden (und belasten somit auch nur einmal den Speicherbedarf) und können mehrmals durch die Anzeigekomponente genutzt werden. Dies ist sinnvoll, wenn der Designer mehrere unabhängige Menüs nutzen möchte (z.B. ein Hauptmenü horizontal, und ein Seitenmenü vertikal mit den spezifischen Unterpunkten, abhängig vom Hauptmenü).

Somit ist es notwendig bei jedem Einsatz eines Menüs zunächst die Datenkomponente zu laden, damit die Anzeigekomponente wiederum auf die zur Verfügung gestellten Daten zugreifen kann.
Es ist deshalb sinnvoll die Datenkomponente immer sofort nach dem Body-Tag aufzurufen.

Die so geschaffenen Möglichkeiten für ein Menü sind nahezu unbegrenzt.
Es sind normale einstufige Menüs (z.B. ein Hauptmenü), hierarchische Menüs (entsprechend der Hierarchie der Website), Sitemaps, aber auch breadcrumbs (also der Navigationspfad: Startseite > Hauptseite > Unterseite) möglich. Dies ist allein von der Anzeigekomponente und dessen Gestaltung abhängig.

Es ist empfehlenswert ein vorhandenes Beispiel für die eigene Bedürfnisse anzupassen.

Um ein komplett neues Menütemplate zu erstellen sind gute Smartykenntnisse erforderlich, um ein vorhandenes zu verändern sind normale Smartykenntnisse nötig.

Menüs in der gesendeten Seite sind im Normalfall normale HTML - Anweisungen - gestaltet werden sie wie immer über den Einsatz von CSS.
Deswegen sind Kenntnisse über CSS auf jeden Fall nötig.

Syntax

Datenkomponente

{powermenu}

Einfach nach dem <body>-Tag. Anzeigekomponente

{display template='Name_des_Menütemplates'}

Wird an der (für das Menü) gewünschten Stelle eingefügt.

Lesen Sie etwas über das Plugin display

Ausgabe

Datenkomponente

Die Datenkomponente gibt direkt keine Ausgaben.
Sie stellt vielmehr alle gewünschten Daten dem Template in Form von Smarty-Variablen zur Verfügung.
Es werden nicht nur Daten für das Menü selbst geliefert, sondern auch für Breadcrumbs und der Anzeige für die vorherige und der nächsten Seite.

Auf diese Daten kann der Designer wiederum in gewohnter Smarty-Weise zugreifen:

$menu.elementIndexvariable

menu stellt dabei ein Array mit Elementen elementIndex (ein Element wird über einen Index angesprochen und entspricht genau einen Menüeintrag) dar und variable den Bezeichner eines Array-Elemente. So lassen sich beispielsweise über Schleifen alle Elemente durchlaufen.

Wichtig dabei ist auch, dass das Array nicht nur aus Menüeintragen besteht, sondern auch von Sektionsbeschreibung. So leitet ein SECTION eine neue Hierarchieebene ein und ENDSECTION schliesst eine Hierarchieebene - also "springt" einen Level tiefer.

Ein entsprechendes Menü könnte folgende Daten enthalten:

  
[0] ->  SECTION
[1] ->  Array
(
[hierarchy] => 00001
[content_id] => 1
[owner_id] => 1
[content_name] => Hauptmenue1
[type] => content
[parent_id] => -1
[menu_text] => Hauptmenue1
[content_alias] => Hauptmenue1
[show_in_menu] => 1
[tabindex] => 
[accesskey] => 
[titleattribute] => Title fuer Hauptmenue1
[parent] => 
[current] => 1
[level] => 1
[firsthierarchy] => 00001
)
[2] ->  Array
(
[hierarchy] => 00002
[content_id] => 5
[owner_id] => 1
[content_name] => Hauptmenue2
[type] => content
[parent_id] => -1
[menu_text] => Hauptmenue2
[content_alias] => Hauptmenue2
[show_in_menu] => 1
[tabindex] => 
[accesskey] => 
[titleattribute] => 
[parent] => 1
[current] => 
[level] => 1
[firsthierarchy] => 00002
)
[3] ->  SECTION
[4] ->  Array
(
[hierarchy] => 00002.00001
[content_id] => 6
[owner_id] => 1
[content_name] => Untermenue1 des Hauptmenue1
[type] => content
[parent_id] => 5
[menu_text] => Untermenue1 des Hauptmenue1
[content_alias] => Untermenue1 des Hauptmenue1
[show_in_menu] => 1
[tabindex] => 
[accesskey] => 
[titleattribute] => 
[parent] => 
[current] => 
[level] => 2
[firsthierarchy] => 00002
)
[5] ->  SECTION
[6] ->  Array
(
[hierarchy] => 00002.00001.00001
[content_id] => 19
[owner_id] => 1
[content_name] => Unteruntermenue1 des Untermenue1
[type] => content
[parent_id] => 18
[menu_text] => Unteruntermenue1 des Untermenue1
[content_alias] => Unteruntermenue1 des Untermenue1
[show_in_menu] => 1
[tabindex] => 
[accesskey] => 
[titleattribute] => 
[parent] => 
[current] => 
[level] => 3
[firsthierarchy] => 00002
)
[7] ->  ENDSECTION
[8] ->  ENDSECTION
[9] ->  ENDSECTION

Das oben gezeigte Beispiel stellt ein einfaches Menü mit drei Hierarchieebenen dar - erkennbar an den drei SECTION-Elementen.

Die entsprechenden Daten für jeden Menüeintrag lauten:

Variable Datentyp
hierarchy string
content_id integer
content_name (genauer!) string
type string
content_alias (genauer!) string
show_in_menu (sollte nicht geliefert werden - irrelevant, unnütz, verwirrend - da immer 1) integer
tabindex string
accesskey string
titleattribute string
current integer
firsthierarchy string
level integer

Neben diesen Attributen für jeden Menüeintrag stellt die Datenkomponente des Powermenu-Plugins auch noch weitere, für eine Menüdarstellung nützliche, Variablen bereit. Diese lassen sich ganz normal als Variablen in Smarty-Weise ansprechen: {$variable}. Diese Variablen umfassen:

Variable Datentyp
nextpage array/boolean Enthält das oben beschriebene Array mit allen Attributen des nächsten Menüeintrags, wenn kein nächster Menüeintrag vorhanden: false
prevpage string Enthält das oben beschriebene Array mit allen Attributen des vorherigen Menüeintrags, wenn kein vorheriger Menüeintrag vorhanden: false
breadcrumbs array Stellt ein Array mit dem vollständigen Navigationspfad (Breadcrumb) dar. Jedes Element enthält die Attribute: content_id, hierarchy, menu_text, content_alias, current (Beschreibung siehe oben)
count integer Anzahl der Menüeinträge
root_path string Absoluter Pfad aus der config.php
root_url string URL aus der config.php
query_var string Bezeichnung der Query-Variable aus der config.php
page_id integer Enthält die page_id der aktuellen Seite

Anzeigekomponente

Die Anzeigekomponente gibt ein zuvor erstelltes Template aus - dieses muss mit den gewünschten Informationen aus der Datenkomponente bestückt werden um so ein funktionerendes Menü zu erhalten. Beispiele dafür unter Anwendungsbeispiele.

Parameter

Datenkomponente

bc - Default ist 1, bei 0 werden keine Daten für die Breadcrumbs erzeugt.

Anzeigekomponente

Parameter Default-Wert Notwendig
template ja Gibt den Dateinamen des zu verwendenden Menü-Templates an (wird als Datei gespeichert)

Anwendungsbeispiele

Simples Standard-Menü

Reine Ausgabe der Menü-Titel und der entsprechenden Links

 <html>
<body>
{powermenu}                             <!-- Datenkomponente -->
{display template="simple_menu.tpl"}    <!-- Anzeigekomponente -->
</body>
</html>

Das Template, welches im CMS gespeichert wird.

{foreach from=$menu item=section_item}
{if $section_item=='SECTION'}
<ul>{capture name=closing} {/capture}
{elseif $section_item=='ENDSECTION'}
</li></ul>
{else}
{$smarty.capture.closing}
{if $section_item.type == 'content'}
<li><a href="{$root_url}/index.php?{$query_var}={$section_item.content_alias}">
{
$section_item.menu_text}</a> {/if} {capture name=closing}</li>{/capture} {/if} {/foreach}

Das Menü-Template wird im templates-Ordner als simple_menu.tpl gespeichert.

Das Menü würde nun als einfache Liste aufgeführt.

Beim Versuch der Gestaltung völlig neuer Menüs scheitern die meisten Anwender daran, das sie der beinharten Logik der Datenstruktur in Zusammenarbeit mit Smarty, CSS und HTML nicht folgen können.

Das Entwicklungsziel war es eine Menükomponente bereit zu stellen, die mehr kann als die bei CMS - Systemen bekannten "08/15 Menüs".
Dazu sollte es extrem schnell sein, RAM sparen und auch noch mehrere Dinge gleichzeitig erledigen.
Das Ziel wurde erreicht - erfordert aber , wenn es um mehr als 08/15 Menüs geht, auch mehr Kenntnisse !!

SECTION und ENDSECTION als Steuerelemente sind eigentlich nur für ganz einfache Menüs gedacht.

Richtig komplizierte Menüs z.B. mit einer Aufteilung in horizontale und vertikalen Menüanteilen werden über über die direkte Auswertung der Hierarchieebenen bzw. der Levels gestaltet.

Wer sich es einfach machen will um horizontale , vertikale oder auch Treemenüs einzusetzen und das ohne viel Aufwand, der ist mit dem Menüsystem PHPLayers hervorragend bedient.

Dafür gibt es ein Mustertemplate für alle drei Varianten und auch Muster für die Haupttemplates mit der kompletten Steuerung von PHPLayers.

PHPLayers ist dazu kompatibel mit uralten Browser ab IE 5.01 bis hin zu den aktuellen Versionen aller maßgebenden Anbieter.

 

Letzte Änderung auf dieser Seite am: 28.01.2008 14:57:38


Vorherige Seite: LinkpfeilPisearch2  | Nächste Seite: LinkpfeilPwhtml_select_date