Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Pages: 1
Bonjour à tous,
J'utilise Zend_Navigation, qui me génère parfaitement mon menu principal, me rajoutant bien la classe css "active" à l'élément de mon menu qui correspond à la page en cours; jusque-là, tout est impeccable.
Pour profiter encore plus de ce composant, je souhaiterais à présent récupérer le titre (ou le label ?) de la page en cours pour le mettre dans mon headTitle, ce qui me semble bien légitime ! Eh bien... je ne trouve pas comment faire, et ce n'est pas faute d'avoir cherché !
Dans mon controleur, j'ai tenté :
$activeNav = $this->view->navigation()->current(); $this->view->headTitle()->append($activeNav);
mais il m'affiche "Accueil" quelle que soit la page !
Voici mon fichier xml :
<?xml version="1.0" encoding="UTF-8"?> <configdata> <nav> <index> <label>Accueil</label> <title>Accueil</title> <module>frontend</module> <controller>index</controller> <action>index</action> <resource>index</resource> </index> <inscription> <label>Inscription</label> <title>Inscription</title> <module>frontend</module> <controller>index</controller> <action>inscription</action> <resource>inscription</resource> </inscription> </nav> </configdata>
Auriez-vous un tuyau qui puisse m'aider, svp ?
Dernière modification par zendzen (25-01-2010 21:14:13)
Hors ligne
La méthode current(); retourne l'élément courant (Interface RecursiveIterator de la SPL).
Je crois que la seule solution est d'itérer dans tes pages et vérifier si elle est active.
foreach($nav as $page) { if($page->isActive()) { //ton traitement } }
c'est vrai qu'il pourrait être pratique de pouvoir y accéder directement
Dernière modification par 3uclide (24-01-2010 18:33:40)
Hors ligne
via le controleur tu sais récupéré le module, l'action et le controleur ... tout comme via le front controller
$front = Zend_Controller_Front::getInstance(); $request = $front->getRequest(); $request->getControllerName(); $request->getActionName(); $request->getModuleName();
Hors ligne
C'est vrai que ce serait sympa de pouvoir retrouver la page courante facilement... Ce serait aussi bien que les pages non visibles ne soient pas affichées sur le sitemap mais que le breadcrumbs en prenne compte... il faut pas mal essayer avant d'y arriver...
Dans mon controller de base, j'ai fait comme ça :
// activate non-visible pages for breadcrumbs // $bc_labels list of pages to activate $bc_labels = array('menu_ads_view','menu_ads_edition'); foreach ($bc_labels as $label) { $search_page = $this->view->navigation()->findByLabel($label); if ($search_page->isActive()) { $search_page->setVisible(true); } } // retrieve current page to get CSS class $page = $this->view->navigation()->findActive($container); if ($page) { $this->page = $page['page']; $this->view->style = $this->page->getClass(); } else { $this->view->style = 'default'; }
Je ne sais pas si c'est la meilleure solution, mais ça fonctionne...
Dernière modification par ubini (25-01-2010 19:37:35)
Hors ligne
Un grand merci à tous pour votre aide !
C'est ahurissant, mais je n'ai effectivement pas trouvé mieux que de parcourir ses pages. Je vous donne la fonction que je me suis codé dans mon controleur :
private function _getCurrentPage() { $module = $this->getRequest()->getModuleName(); $controller = $this->getRequest()->getControllerName(); $action = $this->getRequest()->getActionName(); foreach($this->view->navigation()->getContainer() as $page) { if (($page->module == $module) && ($page->controller == $controller) && ($page->action == $action)) return $page; } return null; }
Hors ligne
Sinon c'est findActive() qui est intégré à Zend_View_Helper_Navigation_HelperAbstract
@+
Hors ligne
Sinon c'est findActive() qui est intégré à Zend_View_Helper_Navigation_HelperAbstract
J'ai essayé :
$this->view->navigation()->findActive($this->view->navigation()->getContainer());
mais cette ligne de code me renvoie un array de pages.
A moins de me tromper de container ?
Hors ligne
J'aurais dit :
$this->view->navigation()->findActive($this->view->navigation()->getContainer(), 1, 1);
Non testé
Hors ligne
Je me suis enfin trouvé une formule magique qui ne m'a pas l'air mal, vu mes premiers tests :
$this->view->navigation()->getContainer()->findOneBy('active','1')
Hors ligne
Pages: 1