Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 22-01-2010 22:45:03

zendzen
Nouveau membre
Date d'inscription: 22-01-2010
Messages: 5

[Résolu][Zend_Navigation][1.9] Comment obtenir la page en cours ?

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é :

Code:

  $activeNav = $this->view->navigation()->current();
  $this->view->headTitle()->append($activeNav);

mais il m'affiche "Accueil" quelle que soit la page !
Voici mon fichier xml :

Code:

<?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

 

#2 24-01-2010 07:27:25

3uclide
Membre
Date d'inscription: 09-08-2008
Messages: 194

Re: [Résolu][Zend_Navigation][1.9] Comment obtenir la page en cours ?

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.

Code:

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

 

#3 24-01-2010 18:20:22

Grummfy
Membre
Lieu: Belgique
Date d'inscription: 01-08-2007
Messages: 232
Site web

Re: [Résolu][Zend_Navigation][1.9] Comment obtenir la page en cours ?

via le controleur tu sais récupéré le module, l'action et le controleur ... tout comme via le front controller

Code:

$front = Zend_Controller_Front::getInstance();
$request = $front->getRequest();
$request->getControllerName();
$request->getActionName();
$request->getModuleName();

Engagez-moi! : Cherche job en Belgique autour de Namur (1 heure de route autour)
blog - ZF Planet

Hors ligne

 

#4 25-01-2010 19:34:54

ubini
Membre
Lieu: gillarens/Suisse
Date d'inscription: 23-01-2008
Messages: 110
Site web

Re: [Résolu][Zend_Navigation][1.9] Comment obtenir la page en cours ?

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 :

Code:

    // 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)


http://www.easyswap.org - site d'échange de biens et de services conçu avec jQuery et Zend Framework
http://www.lambelet.net - mon blog perso et inutile

Hors ligne

 

#5 25-01-2010 21:13:50

zendzen
Nouveau membre
Date d'inscription: 22-01-2010
Messages: 5

Re: [Résolu][Zend_Navigation][1.9] Comment obtenir la page en cours ?

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 :

Code:

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

 

#6 25-01-2010 23:02:50

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Résolu][Zend_Navigation][1.9] Comment obtenir la page en cours ?

Sinon c'est findActive() qui est intégré à Zend_View_Helper_Navigation_HelperAbstract

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#7 26-01-2010 16:25:45

zendzen
Nouveau membre
Date d'inscription: 22-01-2010
Messages: 5

Re: [Résolu][Zend_Navigation][1.9] Comment obtenir la page en cours ?

Sinon c'est findActive() qui est intégré à Zend_View_Helper_Navigation_HelperAbstract

J'ai essayé :

Code:

$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

 

#8 26-01-2010 21:26:33

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [Résolu][Zend_Navigation][1.9] Comment obtenir la page en cours ?

J'aurais dit :

Code:

$this->view->navigation()->findActive($this->view->navigation()->getContainer(), 1, 1);

Non testé wink


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#9 28-01-2010 19:02:51

zendzen
Nouveau membre
Date d'inscription: 22-01-2010
Messages: 5

Re: [Résolu][Zend_Navigation][1.9] Comment obtenir la page en cours ?

Je me suis enfin trouvé une formule magique qui ne m'a pas l'air mal, vu mes premiers tests :

Code:

$this->view->navigation()->getContainer()->findOneBy('active','1')

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages