根据CakePHP所在页面突出显示标签的最佳方法是什么?

时间:2011-09-17 23:05:13

标签: php cakephp cakephp-1.3

所以在介绍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; ?>

有更好的方法可以做到这一点,还是应该用旧代码实现这个(新)方法?

2 个答案:

答案 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
                        }