CakePHP:如何制作动态导航栏

时间:2014-09-04 05:03:45

标签: php cakephp hyperlink cakephp-1.3 navigationbar

我的网站中有导航栏,如:

enter image description here

这是我的代码:

        <ul class="breadcrumb">
            <li>
                <i class="icon-home"></i>
                <a href="index.html">Home</a> 
                <i class="icon-angle-right"></i>
            </li>
            <li>
            <?php echo $this->Html->link($title_for_layout,array('controller'=>'controllers','action'=>'index','full_base'=>true));?>
            </li>
        </ul>

在此图片中,我正在与员工控制器合作。所以我的链接是&#34; Home&gt;人员&#34; 即可。如果我使用产品控制器链接,则&#34;主页&gt;产品及#34; 即可。

  1. 但如果我使用Staffs Controller并且Action是 Add 。手段&#34;员工/添加&#34;。我想在导航栏上显示它,如&#34; Home&gt;员工&gt;添加&#34; 即可。那我该怎么做呢?

  2. 如果我做了#1。当前链接将是&#34; Home&gt;员工&gt;添加&#34; 即可。当我想回到员工指数时。我点击了#34;员工&#34; in&#34; Home&gt;员工&gt;添加&#34 ;.我必须像

    那样建立链接

    $这 - &GT; HTML-&GT;链路(还有$ title_for_layout,阵列(&#39;控制器&#39; =&GT;&#39;员工&#39;&#39;动作&#39; =&GT; &#39;指数&#39)

  3. 使用Staffs控制器时,此链接正常。当我更改为产品时,客户将被破坏。我该怎么做呢。

    我正在使用CakePHP 1.3 对不起,我问这样简单的事情。我是Cake PHP的新手。感谢您的帮助和阅读。

1 个答案:

答案 0 :(得分:1)

您需要以结构化的方式解决这个问题。您需要收集将要在面包屑中显示的所有链接的数组,然后通过并输出所有链接。尝试这样的事情:

$links = array();
// Add the home URL
$links[] = array(
    'icon' => 'icon-home',
    'title' => 'Home',
    'url' => 'index.html'
);

// Add the controller
$links[] = array(
    'title' => ucwords($this->params['controller']),
    'url' => $this->Html->url(array('controller' => $this->params['controller'], 'action' => 'index', 'full_base' => true))
);

// Now, conditionally add the next parts where necessary

$param1 = isset($this->params['pass'][0]) ? $this->params['pass'][0] : null;
if($param1) {
    $links[] = array(
        'title' => ucwords($param1),
        'url' => $this->Html->url(array('controller' => $this->params['controller'], 'action' => $this->action, $param1))
    );
}

现在你有了一个结构化数组,其中包含你要输出的三个链接,所以你可以像这样输出它们:

<ul class="breadcrumb">
    <?php
    $size = count($links);
    foreach($links as $i => $link) : ?>
        <li>
            <?php
            // Output icon if it's set
            if(isset($link['icon']))
                echo '<i class="' . $link['icon'] . '"></i>'; ?>

            // Output the link itself
            echo $this->Html->link($link['title'], $link['url']);

            // Output the caret if necessary (it's not the last)
            if($i < $size - 1)
                echo '<i class="icon-angle-right"></i>';
            ?>
        </li>
    <?php endforeach; ?>
</ul>

注意:

  1. 您可能希望找到一种更好的方法来获取方法的标题,目前我只是将参数/控制器名称大写。
  2. 我没有对此进行过测试,但它应该在理论上有用。
  3. 可能有一个用于生成面包屑的内置帮助器 - 看看。
  4. 员工* (单数)