atk14/menu14

Menu14是一款为ATK14应用程序指定的菜单生成器

v2.0.2 2024-01-24 17:08 UTC

This package is auto-updated.

Last update: 2024-09-24 18:35:57 UTC


README

Menu14是一款为ATK14应用程序指定的菜单生成器。

Menu14具有简单的配置,考虑到了ATK14中控制器和动作的概念。

Menu14可以构建分支导航结构,没有子菜单级别的限制。

Menu14也可以用于面包屑导航。

Menu14实现了ArrayAccess、Iterator和Countable接口,便于使用。

基本用法

在控制器中

$menu = new Menu14();

$submenu = $menu->add("Archive");
$submenu->add("Whole archive",["articles/index"]);
$top_articles = $submenu->add("Top articles","top_articles");
  $top_articles->add("Last Month","top_articles/last_month");
  $top_articles->add("Last Year","top_articles/last_year");

// another submenu
$submenu = $menu->add("Information");
$submenu->add("About us","main/about");
$submenu->add("Contact","main/contact");

// disabled items should be displayed non clickable
$user_menu = $menu->add("User");
$user_menu->add("Login","logins/create_new",["disabled" => $is_user_logged]);
$user_menu->add("Logout","logins/destroy",["disabled" => !$is_user_logged]);
$user_menu->add("Profile","users/detail",["disabled" => !$is_user_logged]);

$this->tpl_data["menu"] = $menu;

在模板中

{* file: shared/_menu.tpl *}
{if !$menu->isEmpty()}
<ul>
  {foreach $menu->getItems() as $item}
    <li{if $item->isActive()} class="active"{/if}{if $item->isDisabled()} class="disabled"{/if}>

      {if $item->getUrl() && !$item->isDisabled()}
        <a href="{$item->getUrl()}">{$item->getTitle()}</a>
      {else}
        {$item->getTitle()}  
      {/if}

      {* recursion *}
      {render partial="shared/menu" menu=$item->getSubmenu()}
                                                                        
    </li>
  {/foreach}
</ul>
{/if}

在菜单中创建节点有两种方法。

$menu->add("Label",$targets_or_url,$options); // creates new menu item and return its submenu (which is at the moment empty)
$menu->addItem("Label",$targets_or_url,$options); // creates new menu item - this new menu item is returned

面包屑导航

在控制器中

$breadcrumbs = new Menu14();

$breadcrumbs[] = ["Home","main/index"];
$breadcrumbs[] = ["Articles","articles/index"];
if($tag = $article->getPrimaryTag()){
  $breadcrumbs[] = ["$tag",$this->_link_to(["action" => "articles/index", "tag_id" => $tag])];
}
$breadcrumbs[] = $article->getTitle();

$this->tpl_data["breadcrumbs"] = $breadcrumbs;

在模板中

<ol class="breadcrumb">
  {foreach $breadcrumbs as $breadcrumb}
    <li>
      {if $breadcrumb->getUrl()}
        <a href="{$breadcrumb->getUrl()}">{$breadcrumb->getTitle()}</a>
      {else}
        {$breadcrumb->getTitle()}
      {/if}
    </li>
  {/foreach}
</ol>

查看http://skelet.atk14.net/en/articles/以查看此示例的实时效果。

元数据

可以在菜单或菜单项上设置元数据。这可能有助于存储颜色、图像、淡入效果等信息。

$menu = new Menu14();

$websites = $menu->add("Frameworks");
$websites->setMeta("image_url","/public/icons/sprockets.png");

$item_atk14 = $website->addItem("Atk14","https://www.atk14.net/",[
  "meta" => [
    "image_url" => "/public/icons/atk14_birdie.png",
    "color" => "black"
  ]
]);

$item_laravel = $website->addItem("Laravel","https://laravel.net.cn/");
$item_laravel->setMeta("image_url","/public/icons/laravel.png");
$item_laravel->setMeta("color","red");

// getting metadata

$websites->getMeta("image_url"); // "/public/icons/sprockets.png"
$websites->getMeta("color"); // null
$item_atk14->getMeta("image_url"); // "/public/icons/atk14_birdie.png"
$item_atk14->getMeta("color"); // "black"
$item_laravel->getMeta("image_url"); // "/public/icons/laravel.png"
$item_laravel->getMeta("color"); // "red"

安装

使用Composer安装Menu14

cd path/to/your/project/
composer require atk14/menu14

许可证

Menu14是免费软件,根据MIT许可证分发https://open-source.org.cn/licenses/mit-license