zrnik/menu

S1mple 菜单模型。

v0.0.1 2020-12-26 20:29 UTC

This package is auto-updated.

Last update: 2024-09-27 18:11:54 UTC


README

使用此工具可以定义您的菜单,然后将其绘制到某个位置。

它使用 nette/component-model 包。

它包含 2 个类

  • Zrnik\Menu\Url - 这是一个 Nettte\Http\Url,但实现了 Nette\ComponentModel\IComponent
  • Zrnik\Menu\Menu - 这是一个容器(扩展 Nette\ComponentModel\Container),但进行了修改,使其只能接受 UrlMenu 作为子项。

这两个类都有一个额外的参数和公共属性 $label

就这样。

需求

PHP >= 8.0

示例用法

include __DIR__.'/vendor/autoload.php';

/*
 * Example definition
 */

$menu = new \Zrnik\Menu\Menu();
$menu->addLink("Home", "/home/");
$menu->addLink("Blog", "/blog/");
$support = $menu->addMenu("Support");
$support->addLink("Contact us!", "/support/contact");
$support->addLink("FAQ", "/support/faq");


/*
 * Example usage
 */

function menuItem(\Zrnik\Menu\Menu $menu, int $level = 0)
{
    foreach($menu->getComponents() as $item)
    {
        if($item instanceof \Zrnik\Menu\Menu)
        {
            echo str_repeat(" ",$level).$item->label.":".PHP_EOL;
            menuItem($item, $level+1);
        }

        if($item instanceof \Zrnik\Menu\Url)
        {
            echo str_repeat(" ",$level).
                sprintf('<a href="%s">%s</a>', $item->getAbsoluteUrl(), $item->label);

            echo PHP_EOL;
        }
    }
}

menuItem($menu);

结果

<a href="/home/">Home</a>
<a href="/blog/">Blog</a>
Support:
 <a href="/support/contact">Contact us!</a>
 <a href="/support/faq">FAQ</a>