Markup Simple Navigation (ProcessWire): Unterschied zwischen den Versionen

Aus Wikizone
Wechseln zu: Navigation, Suche
Zeile 107: Zeile 107:
  
 
== Hook um den Link String zu manipulieren ==
 
== Hook um den Link String zu manipulieren ==
<syntaxhiglight lang="php">
+
<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();