我正在使用Laravel的CMS应用程序,我已经存储在缓存中的导航菜单,因为它是从数据库动态生成的,每次导航菜单在数据库中更新,缓存也将更新。
我唯一的问题是,虽然我可以很容易地访问导航菜单,但我想在被访问的页面的链接上设置活动类,这真的让我发疯。
这是我如何在缓存中存储导航
<a href="www.dev.com/home" class="<?php Request::is('home*') ? 'active' : ''; ?>">Home</a>
<a href="www.dev.com/about-us" class="<?php Request::is('about-us*') ? 'active' : ''; ?>">About Us</a>
<a href="www.dev.com/services" class="<?php Request::is('services*') ? 'active' : ''; ?>">Services</a>
这就是我在page.blade.php
文件中访问导航的方式{{ Navigation::display_main_menu() }}
,该函数检查缓存是否存在,如果不存在则创建缓存并返回值。
但是导航显示完全像这个with php tags
,而不是与类(我想看到),我甚至尝试改变我如何存储导航到<a href="www.dev.com/home" class="{{ Request::is('home*') ? 'active' : '' }}">Home</a>
,但即使这得到完全显示。
在呈现导航时,我能做些什么来执行php
代码或blade
语法。
您可以在HTML
类中add
新的macro
,只需将其添加到文件(macros.php
)中并将其存储在app/start
目录中,然后使用require/include
从app/startglobal.php
文件中包含它:
HTML::macro('menuItem', function($name, $title = null, $parameters = array(), $attributes = array()){
$currentUrl = URL::current() == url() ? url('home') : URL::current();
$active = ( $currentUrl == URL::route($name, $parameters) ) ? ' class="active"':'';
return '<li'.$active.'>' . HTML::linkRoute($name, $title, $parameters, $attributes) . '</li>';
});
在您的view
中,您可以使用如下方式生成菜单项:
<ul>
{{ HTML::menuItem('page.home', 'Home', array('home')) }}
</ul>
这里page.home
是在声明route
时分配给/
的路由名称,是的,在这种情况下路由应该有name
,例如:
Route::get('/', array('uses' => 'PageController@home', 'as' => 'page.home'));
在menuItem
宏中,第二个参数(Home
)是要显示的菜单标题,第三个参数是可选参数(如果有的话)。例如,你的About Us
页面的参数是about-us
要创建菜单项你可以这样写:
{{ HTML::menuItem('page.about', 'About Us', array('about-us')) }}
这是一个可能的解决方案,也许还有其他方法。