Laravel:在缓存中存储导航但希望根据当前URL设置活动类

时间:2014-06-20 12:54:21

标签: php laravel laravel-4 blade

我使用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语法。

请指出正确的方向。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您可以在add类中macroHTML,只需将其添加到文件(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

这是一种可能的解决方案,可能还有其他方法。