Witam wszystkich !
Jestem w trakcie tworzenia aplikacji w Zendzie i napotkałem się na wkurzający problem (ZF 1.11.1). Otóż chcę zrobić aktywny link, czyli gdy podświetlenie jakimś tam stylem danej (aktualnie wybranej) opcji w menu. Problem może być o tyle trudny, że w aplikacji używam Routera i pojawia się po wybraniu opcji start (domyślny router default), to wszystkie linki oznacza jako aktywne.
Plik bootstrap:
<?php
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
protected function _initViewHelper() {
$this->bootstrap('layout');
$layout = $this->getResource('layout');
$view = $layout->getView();
$view->doctype('XHTML1_STRICT');
$configRoute = new Zend_Config_Xml(APPLICATION_PATH . '/configs/route.xml','main');
$router = Zend_Controller_Front::getInstance()->getRouter();
$router->addConfig($configRoute);
$configNav = new Zend_Config_Xml(APPLICATION_PATH . '/configs/navigation.xml','main');
$view->navigation(new Zend_Navigation($configNav));
}
}
plik route.xml:
<?xml version="1.0" encoding="UTF-8"?>
<root>
<main>
<oneNews type="Zend_Controller_Router_Route_Regex">
<route>news/(\d+),[a-zA-Z_]+</route>
<defaults controller="news" action="show" />
<map id="1"/>
</oneNews>
<news type="Zend_Controller_Router_Route">
<route>news/:page</route>
<defaults controller="news" action="index" page=""/>
<reqs page="(\d)+" />
</news>
<imprezy type="Zend_Controller_Router_Route">
<route>imprezy/:page</route>
<defaults controller="imprezy" action="index" page=""/>
<reqs page="(\d)+" />
</imprezy>
<kontakt type="Zend_Controller_Router_Route_Static">
<route>kontakt</route>
<defaults controller="index" action="kontakt" />
</kontakt>
<reklama type="Zend_Controller_Router_Route_Static">
<route>reklama</route>
<defaults controller="index" action="reklama" />
</reklama>
<oneGaleria type="Zend_Controller_Router_Route_Regex">
<route>[a-zA-Z_]+/(\d+),(\d){2}.(\d){2}.(\d){4}</route>
<defaults controller="galeria" action="show" />
<map id="1" />
</oneGaleria>
<galeria type="Zend_Controller_Router_Route">
<route>galeria/:page</route>
<defaults controller="galeria" action="index" page=""/>
</galeria>
</main>
</root>
oraz plik navigation.xml :
<?xml version="1.0" encoding="UTF-8"?>
<root>
<main>
<start>
<label>START</label>
<route>default</route>
</start>
<news>
<label>NEWS</label>
<route>news</route>
</news>
<imprezy>
<label>IMPREZY</label>
<route>imprezy</route>
</imprezy>
<galeria>
<label>GALERIA</label>
<route>galeria</route>
</galeria>
<reklama>
<label>REKLAMA</label>
<route>reklama</route>
</reklama>
<kontakt>
<label>KONTAKT</label>
<route>kontakt</route>
</kontakt>
</main>
</root>
dodatkowo do wyświetlania menu używam Partiala:
<?php foreach($this->container as $page):?>
<li><a href="<?=$page->href;?>" title="
<?=$page->label;?>"
<?=$page->isActive() ? 'class="active"':'';?> >
<?=$page->label;?>
</a></li> <?php endforeach; ?>
I teraz cała zabawa odpalam linka START i otrzymuje taki kod:
<li><a href="/" title="START" class="active">START
</a></li>
<li><a href="/news" title="NEWS" class="active">NEWS
</a></li> <li><a href="/imprezy" title="IMPREZY" class="active">IMPREZY
</a></li> <li><a href="/galeria" title="GALERIA" class="active">GALERIA
</a></li> <li><a href="/reklama" title="REKLAMA" class="active">REKLAMA
</a></li> <li><a href="/kontakt" title="KONTAKT" class="active">KONTAKT
</a></li>
Dobra klikam powiedzmy galeria i otrzymuje:
<li><a href="/" title="START" >START
</a></li>
<li><a href="/news" title="NEWS" >NEWS
</a></li> <li><a href="/imprezy" title="IMPREZY" >IMPREZY
</a></li> <li><a href="/galeria" title="GALERIA" >GALERIA
</a></li> <li><a href="/reklama" title="REKLAMA" >REKLAMA
</a></li> <li><a href="/kontakt" title="KONTAKT" >KONTAKT
</a></li>
Czyli całkiem kosmos ! I mam pytanie czy ktoś pomorze mi wytłumaczyć takie dziwne zachowanie ? Dodam, że link są prawidłowo generowane. Metoda isActive() sorawdza czy wybrana opcja menu jest aktywna, więc co jest nie tak ?