Zend Framework 2 Navigation Menu Щебетать Интеграция Bootstrap
В настоящее время я создаю меню из базы данных, и код отлично работает. Однако теперь я хочу создать меню с помощью twitter bootstrap, и именно там у меня возникают проблемы. Кто-нибудь знает способ интегрировать меню zend framework 2 nav с твитер-бутстрапом? Если кому-то интересно, созданное меню выглядит следующим образом.
<ul class="nav">
<li>
<a href="/view-page/home">Home</a>
<ul>
<li>
<a href="/view-page/coupons">Coupons</a>
<ul>
<li>
<a href="/view-page/printable-coupons">Printable Coupons</a>
<ul>
<li>
<a href="/view-page/cut-these-coupons">Cut these here coupons</a>
</li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li class="active">
<a href="/view-page/about-us">About Us</a>
</li>
</ul>
Ответы
Ответ 1
Вы можете использовать частичные для генерации навигации по своему усмотрению.
Чтобы отобразить навигацию внутри вашего шаблона:
<?php $partial = array('application/navigation/topnav.phtml', 'default') ?>
<?php $this->navigation('navigation')->menu()->setPartial($partial) ?>
<?php echo $this->navigation('navigation')->menu()->render() ?>
Ваша частичная часть навигации должна быть примерно такой:
Приложение/навигация/topnav.phtml
<ul class="nav">
<?php $count = 0 ?>
<?php foreach ($this->container as $page): ?>
<?php /* @var $page Zend\Navigation\Page\Mvc */ ?>
<?php // when using partials we need to manually check for ACL conditions ?>
<?php if( ! $page->isVisible() || !$this->navigation()->accept($page)) continue; ?>
<?php $hasChildren = $page->hasPages() ?>
<?php if( ! $hasChildren): ?>
<li <?php if($page->isActive()) echo 'class="active"'?>>
<a class="nav-header" href="<?php echo $page->getHref() ?>">
<?php echo $this->translate($page->getLabel()) ?>
</a>
</li>
<?php else: ?>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<span><?php echo $this->translate($page->getLabel()) ?></span>
</a>
<ul class="dropdown-menu" id="page_<?php echo $count ?>">
<?php foreach($page->getPages() as $child): ?>
<?php // when using partials we need to manually check for ACL conditions ?>
<?php if( ! $child->isVisible() || !$this->navigation()->accept($child)) continue; ?>
<li>
<a href="<?php echo $child->getHref() ?>">
<?php echo $this->translate($child->getLabel()) ?>
</a>
</li>
<?php endforeach ?>
</ul>
</li>
<?php endif ?>
<?php $count++ ?>
<?php endforeach ?>
</ul>
Очевидно, что простой пример и не будет заботиться о произвольном количестве уровней навигации, и вам нужно будет добавить некоторые дополнительные имена классов и т.д., чтобы он отлично работал с Bootstrap, но вы получите эту идею.
Ответ 2
Для нового Bootstrap 3 используйте это как частичный вид;
<nav class="navbar navbar-inverse navbar-fixed-top" role="navigation">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="<?php echo $this->url('home') ?>"><img src="<?php echo $this->basePath('img/logo.png') ?>" alt="Title App"/> TitleText</a>
</div>
<div class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<?php foreach ($this->container as $page) { ?>
<?php /* @var $page Zend\Navigation\Page\Mvc */ ?>
<?php // when using partials we need to manually check for ACL conditions ?>
<?php if (!$page->isVisible() || !$this->navigation()->accept($page)) { continue; } ?>
<?php $hasChildren = $page->hasPages(); ?>
<?php if (!$hasChildren) { ?>
<li>
<a href="<?php echo $page->getHref() ?>">
<?php echo $this->translate($page->getLabel()) ?>
</a>
</li>
<?php } else { ?>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><?php echo $this->translate($page->getLabel()) ?> <b class="caret"></b></a>
<ul class="dropdown-menu">
<?php foreach ($page->getPages() as $child) { ?>
<?php // when using partials we need to manually check for ACL conditions ?>
<?php if(!$child->isVisible() || !$this->navigation()->accept($child)) { continue; } ?>
<li>
<a href="<?php echo $child->getHref() ?>">
<?php echo $this->translate($child->getLabel()) ?>
</a>
</li>
<?php } ?>
</ul>
</li>
<?php } ?>
<?php } ?>
</ul>
</div>
</div>
</nav>
Ответ 3
Попробуйте ввести код;
Ваша часть навигации должна быть примерно такой:
Приложение/частичный/topnav.phtml
<div class="navbar navbar-inverse navbar-fixed-bottom">
<div class="navbar-inner">
<div class="container">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<ul class="nav" id="menu">
<?php $count = 0; ?>
<?php foreach ($this->container as $page): ?>
<?php //var_dump($page); exit;?>
<?php /* @var $page Zend\Navigation\Page\Mvc */ ?>
<?php // when using partials we need to manually check for ACL conditions ?>
<?php if( ! $page->isVisible() || !$this->navigation()->accept($page)) continue; ?>
<?php $hasChildren = $page->hasPages() ?>
<?php if( ! $hasChildren): ?>
<li>
<a class="nav-header" href="<?php echo $page->getHref() ?>">
<?php echo $this->translate($page->getLabel()) ?>
</a>
</li>
<?php else: ?>
<a class="dropdown-toggle" data-toggle="dropdown" href="#page_<?php echo $count; ?>">
<span><?php echo $this->translate($page->getLabel()) ?></span>
</a>
<ul class="dropdown-menu" id="page_<?php echo $count; ?>">
<?php foreach($page->getPages() as $child): ?>
<?php // when using partials we need to manually check for ACL conditions ?>
<?php if( ! $child->isVisible() || !$this->navigation()->accept($child)) continue; ?>
<li>
<a href="<?php echo $child->getHref() ?>">
<?php echo $this->translate($child->getLabel()) ?>
</a>
</li>
<?php endforeach ?>
</ul>
<?php endif ?>
<?php $count++; ?>
<?php endforeach ?>
</ul>
<form class="navbar-search pull-right" action="">
<input type="text" class="search-query span2" placeholder="Search">
</form>
</div><!-- /.nav-collapse -->
</div><!-- /.container -->
</div><!-- /.navbar-inner -->
</div><!-- /.navbar -->
Чтобы отобразить навигацию внутри вашего шаблона:
<div class="nav-collapse">
<?php
echo $this->navigation('navigation')
->menu()
->setMinDepth(0)
->setMaxDepth(0)
->setUlClass('nav')
->setPartial(array('partial/topnav.phtml', 'Application'));
?>
</div>
Ответ 4
Чтобы интегрировать внешний вид с помощью zend nav-bar, измените это:
<ul class="nav">
для этого:
<ul class="nav navbar-nav">