幾乎每個網站都有導覽功能表,產生這些HTML導覽功能表看似簡單,但隨著菜單數目的增加也會變得越來越麻煩:不僅僅是要渲染一些基本的HTML,更多時候往往還需要管理哪些菜單當前是啟用的,如果某個菜單還有子功能表你還想要讓被啟用的子功能表的父級也是被啟用的,更有甚者,有時候你還需要在一些功能表項目之間插入HTML。
為此,我編寫了一個擴充包(GitHub地址: https://github.com/spatie/laravel-menu),該擴充包提供的API簡單優雅,並且有完整豐富的 文檔,這裡我簡單帶著大家過一遍其使用方法。
儘管這個擴充包是獨立於架構的,但這裡我們設定在Laravel應用中使用它。
首先我們使用Composer安裝這個擴充:
composer require spatie/laravel-menu
然後在 config/app.php的 providers和 aliases中註冊服務提供者和門面:
// config/app.php'providers' => [ // ... Spatie\Menu\Laravel\MenuServiceProvider::class,],'aliases' => [ // ... 'Menu' => Spatie\Menu\Laravel\MenuFacade::class,],
接下來我們在使用它產生HTML導覽功能表。
假設我們要產生這樣的菜單:
這裡是其實現代碼:
$menu = Menu::new() ->add(Link::to('/', 'Home')) ->add(Link::to('/about', 'About'));
然後我們可以在視圖中使用 render方法顯示菜單:
// in a blade viewHere is the menu: {!! $menu !!}
下面我們嘗試產生更複雜的菜單:
-
- Introduction
- Requirements
- Installation and Setup
-
Basic Usage
- Your First Menu
- Working With Items
- Adding Sub Menus
沒錯,這就是 文檔介面的導覽功能表,注意到在每個二級子功能表前都有一個標題。對應的產生代碼如下:
Menu::new() ->add(Menu::new() ->link('/introduction', 'Introduction') ->link('/requirements', 'Requirements') ->link('/installation-setup', 'Installation and Setup') ) ->add(Menu::new() ->prepend('Basic Usage
') ->prefixLinks('/basic-usage') ->link('/your-first-menu', 'Your First Menu') ->link('/working-with-items', 'Working With Items') ->link('/adding-sub-menus', 'Adding Sub Menus') );
如果你想要讓某個功能表項目被啟用,可以調用 setActive方法:
$menu = Menu::new() ->add(Link::to('/', 'Home')) ->add(Link::to('/about', 'About')->setActive());
手動設定功能表項目啟用是非常煩人的,在大多數案例中更合適的方式是讓代碼自己判斷哪些功能表項目被啟用:
$menu = Menu::new() ->add(Link::to('/', 'Home')) ->add(Link::to('/about', 'About')->setActive()); ->setActiveFromRequest();
除了指定連結之外你還可以靈活使用其它方法指向功能表項目:
Menu::new() ->url('/', 'Home') ->route('contact', 'Contact') ->action('AcmeController@detail', 'Acme');
在這個擴充包中還有很多其它有用的方法,比如屬性操作、追加內容、支援Macro等,完整文檔請參考: https://docs.spatie.be/menu/v1/。
聲明:本文為譯文,原文請看 這裡。