所以在介绍CakePHP之前,我会根据url突出显示相应的导航选项卡,其中包含我编写的以下(相当邋)的代码(fyi absolute_url
是我写的一个函数,用于获取绝对路径):
$page = $_SERVER['PHP_SELF'];
// add all possible states for the navigation to an array
$checkNav = array(
"index" => "index",
"new" => "new",
"random" => "random",
"submit" => "submit"
);
$compareAgainst = strpos($page, $checkNav['index']);
if ($compareAgainst == 0) {
echo "<li><a href=\"" . absolute_url("index") . "\"><span class=\"navBorder\">Popular</span></a></li>\n";
} else {
echo "<li><a href=\"" . absolute_url("index") . "\" id=\"current\">Popular</a></li>\n";
}
$compareAgainst = strpos($page, $checkNav['new']);
if ($compareAgainst == 0) {
echo "<li><a href=\"" . absolute_url("new") . "\"><span class=\"navBorder\">New</span></a></li>\n";
} else {
echo "<li><a href=\"" . absolute_url("new") . "\" id=\"current\">New</a></li>\n";
}
$compareAgainst = strpos($page, $checkNav['random']);
if ($compareAgainst == 0) {
echo "<li><a href=\"" . absolute_url("random") . "\"><span class=\"navBorder\">Random</span></a></li>\n";
} else {
echo "<li><a href=\"" . absolute_url("random") . "\" id=\"current\">Random</a></li>\n";
}
$compareAgainst = strpos($page, $checkNav['submit']);
if ($compareAgainst == 0) {
echo "<li><a href=\"" . absolute_url("submit") . "\"><span class=\"navBorder\">+ Submit a Link</span></a></li>\n";
} else {
echo "<li><a href=\"" . absolute_url("submit") . "\" id=\"current\">+ Submit a Link</a></li>\n";
}
现在,我注意到在Cake中,为了确定相对路径,我可以去:
<?= $this->here; ?>
有更好的方法可以做到这一点,还是应该用旧代码实现这个(新)方法?
答案 0 :(得分:3)
您可以执行以下操作
如果您需要多个页面,请将其添加到app_helper.php。您可以使用控制器和要检查的要比较的操作来提供此功能。该函数将其与当前页面进行比较,如果匹配则返回true。
function isActive($controller, $actions = array())
{
foreach ($actions as $action)
{
if ($controller == $this->params['controller'] && $action == $this->params['action'])
{
return true;
}
}
return false;
}
然后像这样生成你的链接:
<ul class="left">
<li <?php if($html->isActive('controller_name', array('index'))) { echo 'class="active"'; } ?>><?php echo $html->link('Index', '/index'); ?></li>
<li <?php if($html->isActive('controller_name', array('new'))) { echo 'class="active"'; } ?>><?php echo $html->link('New', '/new'); ?></li>
<li <?php if($html->isActive('controller_name', array('random'))) { echo 'class="active"'; } ?>><?php echo $html->link('Random', '/random'); ?></li>
<li <?php if($html->isActive('controller_name', array('submit'))) { echo 'class="active"'; } ?>><?php echo $html->link('Submit', '/submit'); ?></li>
</ul>
如果函数返回true,则链接将具有class =“active”。根据您的需求进行调整。
答案 1 :(得分:2)
我一直这样做的方法是给你的身体标签一个id,然后使用css来定位它。如果您的视图都是独立的,那么您可以硬编码正文ID。如果你正在使用某种模板添加标题,内容,页脚等,那么只需将id作为变量传递给标题视图或身体标记所在的位置(实际上任何外部容器/ div都将在每个查看并包含导航标签)。此外,您还需要提供导航标签ID来定位每个标识符。
然后就是这样的一些css:
#homepage a#hometab,
#aboutpage a#abouttab,
#productpage a#productstab,
#contactpage a#contacttab
{
special active styling here
}