我在哪里使用Bootstrap在CakePHP 3.0中设置导航栏?

时间:2015-04-02 03:52:16

标签: twitter-bootstrap cakephp cakephp-3.0

我开始使用CakePHP 3.0,而且我遇到了一些代码位置问题。 我安装了这个插件来集成Twitter Bootstrap:https://github.com/elboletaire/twbs-cake-plugin 我已将Layout / default.ctp复制到我的主布局文件夹中,并且它工作得非常好,除了我不知道在哪里放置我的Navbar代码。

布局包含设置Bootstrap导航栏的部分:

<div class="navbar-header">
  <?php if ($this->fetch('navbar.top')): ?>
  <button data-target="#navbar-top" data-toggle="collapse" type="button" class="navbar-toggle">
    <span class="sr-only">Toggle navigation</span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
  </button>
  <?php endif; ?>
  <?=$ this->Html->link(Configure::read('App.name'), '/', ['class' => 'navbar-brand']); ?>
</div>
<?php if ($this->fetch('navbar.top')): ?>
<nav role="navigation" class="collapse navbar-collapse" id="navbar-top">
  <ul class="nav navbar-nav">
    <?=$ this->fetch('navbar.top'); ?>
  </ul>
</nav>
<?php endif; ?>

我知道我需要设置navbar.top,但我无法弄清楚在哪里设置它。我尝试使用以下方法从AppView.php中的initialize()设置它:

$this->set('navbar.top', '<li>Hello</li>');

没有做任何事情,我不知道放置通用导航栏还有什么意义。

将它放入模板中没有问题,但是Bootstrap插件的默认布局中的代码似乎没有提示。

有人可以帮我弄清楚我应该在哪里设置Bootstrap导航栏代码,以便我可以使用我的默认布局吗? 非常感谢!

3 个答案:

答案 0 :(得分:2)

嗯,最初的想法是使用view blocks添加它们,这很简单:

$this->append('navbar.top', $this->Html->tag('li', $this->Html->link('Home', '/')));

如果您已将导航栏菜单项添加到元素中,则可以执行以下操作:

$this->append('navbar.top', $this->element('navbar.top'));

下次你可以直接在github上问我:)

答案 1 :(得分:0)

将导航栏放在元素文件夹中。

在布局调用元素

echo $this->element('navbar.top');

答案 2 :(得分:0)

在首次navbar.top来电之前,将您的元素添加到$this->fetch('navbar.top')。例如,我在/src/Template/Element/navbar-top.ctp有一个元素,然后我使用以下代码来navbar.top

<?php $this->prepend('navbar.top', $this->element('navbar-top'));?>
<div class="navbar-header">
  <?php if ($this->fetch('navbar.top')): ?>
  <button data-target="#navbar-top" data-toggle="collapse" type="button" class="navbar-toggle">
    <span class="sr-only">Toggle navigation</span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
    <span class="icon-bar"></span>
  </button>
  <?php endif; ?>
  <?=$ this->Html->link(Configure::read('App.name'), '/', ['class' => 'navbar-brand']); ?>
</div>
<?php if ($this->fetch('navbar.top')): ?>
<nav role="navigation" class="collapse navbar-collapse" id="navbar-top">
  <ul class="nav navbar-nav">
    <?=$ this->fetch('navbar.top'); ?>
  </ul>
</nav>
<?php endif; ?>