atk14 / menu14
Menu14是一款为ATK14应用程序指定的菜单生成器
v2.0.2
2024-01-24 17:08 UTC
Requires
- php: >=7.1
Requires (Dev)
- atk14/tester: *
- mockery/mockery: ^0.9.11|1.0.*|1.1.*
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