Где установить панель навигации в CakePHP 3.0 с Bootstrap?

Я только начинаю работать с CakePHP 3.0 и не могу решить некоторые проблемы с расположением кода. Я установил этот плагин для интеграции Twitter Bootstrap: https://github.com/elboletaire/twbs-cake-plugin Я скопировал Layout/default.ctp в свою основную папку Layout, и он прекрасно работает, за исключением того, что я не уверен, куда поместить код панели навигации.

Макет содержит этот раздел, в котором настраивается панель навигации 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, но я не могу понять, где это установить. Моя попытка установить его с помощью initialize() в AppView.php, используя:

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

ничего не делал, и я понятия не имею, куда еще имело бы смысл поставить универсальный навбар.

У меня нет проблем с тем, чтобы просто поместить его в шаблон, но код в макете по умолчанию для плагина Bootstrap, кажется, предполагает обратное.

Может ли кто-нибудь помочь мне понять, где я должен настроить код панели навигации Bootstrap, чтобы он был доступен для моего макета по умолчанию? Большое спасибо!


person Sarah    schedule 02.04.2015    source источник
comment
вы можете перейти к cakephp.org нажмите на меню => сообщество => Справка и поддержка, у них есть поддержка в реальном времени, и она очень полезна и очень мгновенна.   -  person valar morghulis    schedule 02.04.2015


Ответы (3)


Поместите панель навигации в папку элемента.

В элементе вызова макета

echo $this->element('navbar.top');
person Sudhir    schedule 02.04.2015


Добавьте свой элемент в 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; ?>
person monsur.hoq    schedule 15.10.2015
comment
Если вы собираетесь это сделать, вы можете просто заменить ‹?=$this-›fetch('navbar.top'); ?› с элементом ‹?=$this-›('navbar-top'));?›. Казалось бы, суть вопроса в том, как установить navbar.top вне файла макета. - person Richard Kersey; 17.03.2016