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

Where do I set the navbar in CakePHP 3.0 with Bootstrap?

我刚开始使用 CakePHP 3.0,但遇到了一些代码位置问题。 我安装了这个插件来集成 Twitter Bootstrap:https://github.com/elboletaire/twbs-cake-plugin 我已将 Layout/default.ctp 复制到我的主布局文件夹中,它运行良好,但我不确定将导航栏代码放在哪里。

布局包含设置 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 导航栏代码,以便我的默认布局可以访问它? 非常感谢!

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

布局中调用元素

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

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

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

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

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

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

在您的第一个 $this->fetch('navbar.top') 调用之前将您的元素添加到 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; ?>