我使用Laravel作为CMS应用程序,我已将导航菜单存储在Cache中,因为它是从数据库动态生成的,每次在数据库中更新导航菜单时,缓存也会更新。
我唯一的问题是,虽然我可以轻松访问导航菜单,但我想在被访问页面的链接上设置活动类,这真的让我很生气。
这就是我将导航存储在缓存中的方式
<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
语法。
请指出正确的方向。非常感谢任何帮助。
答案 0 :(得分:0)
您可以在add
类中macro
新HTML
,只需将其添加到文件(macros.php
)中并将其存储在app/start
目录中,然后包括来自使用app/startglobal.php
的{{1}}文件:
require/include
在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
这是一种可能的解决方案,可能还有其他方法。