Markup Simple Navigation (ProcessWire): Unterschied zwischen den Versionen
Aus Wikizone
| Zeile 107: | Zeile 107: | ||
== Hook um den Link String zu manipulieren == | == Hook um den Link String zu manipulieren == | ||
| − | < | + | <syntaxhighlight lang="php"> |
$nav = $modules->get("MarkupSimpleNavigation"); | $nav = $modules->get("MarkupSimpleNavigation"); | ||
Version vom 16. Februar 2018, 12:08 Uhr
Modul das die Erstellung von Navigationen erleichtert. Gibt eine verschachtelte Liste zurück die sich über diverse Optionen anpassen läßt.
MarkupSimpleNavigation
Standardmenü
// DEFAULT liefert einen kompletten Baum
$treeMenu = $modules->get("MarkupSimpleNavigation");
echo $treeMenu->render(); // Ausgabe über render(), kann vorher noch manipuliert werden
// OPTIONS
$options = array(
'parent_class' => 'parent',
'current_class' => 'current',
'has_children_class' => 'has_children',
'levels' => true,
'levels_prefix' => 'level-',
'max_levels' => null,
'firstlast' => false,
'collapsed' => false,
'show_root' => false,
'selector' => '',
'selector_field' => 'nav_selector',
'outer_tpl' => '<ul>||</ul>',
'inner_tpl' => '<ul>||</ul>',
'list_tpl' => '<li%s>||</li>',
'list_field_class' => '',
'item_tpl' => '<a href="{url}">{title}</a>',
'item_current_tpl' => '<a href="{url}">{title}</a>',
'xtemplates' => '',
'xitem_tpl' => '<a href="{url}">{title}</a>',
'xitem_current_tpl' => '<span>{title}</span>',
'date_format' => 'Y/m/d',
'code_formatting' => false,
'debug' => false
);
echo $treeMenu->render($options);
// Weitere Parameter
// $page ist die aktuelle Seite (für current etc.)
// $rootpage ist der Startpunkt des Menüs
render($options, $page, $rootPage)
// anderer Startpunkt
$rootPage = $pages->get("/en/"); // or any other page that has subpages
echo $treeMenu->render(null, null, $rootPage);
// Mehrere Pages als Startpunkt mit Array of Pages (hier im Feld navigation_entries)
$entries = $pages->get("/")->navigation_entries;
echo $treeMenu->render(null, null, $entries);
Feld Platzhalter in Optionen
'inner_tpl' => "
- ||
",
Selectors / Auswahl Filter auf Levelbasis
Man kann für jeden Treelevel festlegen auf welcher Basis die Seiten gefiltert werden Im Code:
$pages->get(1001)->my_selector = "template=projects";
Oder man definiert ein Feld. Wenn dies auf der Seite vorhanden ist wird der Filter dort verwendet.
$options = array( "selector_field" => "my_selector" );
Man kann für jeden Level einen Filter festlegen:
$options = array( "selector_level1" => "template=ressort", "selector_level2" => "start=0, limit=10", "selector_level3" => "template=news|events, sort=-created", "selector_field" => "my_selector" ); selector_field behält auf alle Fälle Priorität.
Platzhalter: Feldwerte als Variablen
- %s definiert wo die Klassen platziert werden (current, parent...)
- Feldplatzhalter können in den item tpl Ausgaben platziert werden.
{anyfield}
{headline|title}
//To output url you just use
{url}.
'list_field_class' => '{template} p{id}'
// will add ' basic-page p1001' to each list_tpl class string.
Hooks
Hook um Klassen in li zu setzen
$nav = $modules->get("MarkupSimpleNavigation");
function hookGetListClass(HookEvent $event){
$child = $event->arguments('page'); // current rendered child page
$class = $event->arguments('class'); // the class string already present
// any check on that child to set your custom class
if($child->id == 1001){
$event->return .= " yourclass"; // add your custom class to the existing
}
}
// setup the hook after on ___getListClass($class, $page) method
$nav->addHookAfter('getListClass', null, 'hookGetListClass');
echo $nav->render();
Hook um den Link String zu manipulieren
$nav = $modules->get("MarkupSimpleNavigation");
function myItemString(HookEvent $event){
$child = $event->arguments('page'); // current rendered child page
// any logic with $child possible here
if($child->id == 1001){
// set the return value of this hook to a custom string
$event->return .= "<a href='$child->url'><span>Some Text</span>$child->title</a>";
}
}
// setup the hook after on ___getItemString($class, $page) method
$nav->addHookAfter('getItemString', null, 'myItemString');
echo $nav->render();