IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres composants PHP Discussion :

Utilisation de Zend_Navigation


Sujet :

Autres composants PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Par défaut Utilisation de Zend_Navigation
    Bonjour,

    je travaille actuellement sur un site dont le contenu est multilingue. Tout ce contenu est stocké en BDD. Pour choisir la langue, j'ai ceci dans mes layouts :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <div id="flags">
       <a href="<?= $this->url(array('lang' => 'fr'),null,false);  ?>" class="fr"></a>
       <a href="<?= $this->url(array('lang' => 'en'),null,false);  ?>" class="eng"></a>						
    </div>
    Les liens de mon menu sont écrit comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <li><a href="<?= $this->url(array('module' => 'contents', 'controller' => 'index', 'action' => 'index', 'id' => 12, 'lang' => $this->lang), null, true) ?>">Consulting</a></li>
    La langue par défaut est le français, pour le reste je récupère le paramètre de langue.

    Pour simplifier la gestion de la navigation, j'aimerais utiliser Zend_Navigation qui, me semble t-il, est fait pour. J'ai écrit le fichier XML nécessaire et dans mon bootstrap, j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $config = new Zend_Config_Xml(APPLICATION_DIRECTORY . '/navigation.xml', 'nav');
    $Zend_Layout = Zend_Layout::getMvcInstance()->getView();
    $Zend_Layout->navigation(new Zend_Navigation($config));
    Tout fonctionne pour très bien mais une chose m'échappe : comment gérer le multilingue? Tant que je navigue en français, tout est ok mais comment récupérer le paramètre de langue au cas ou je passe en anglais par exemple?

    Dans mon XML j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    ... some xml ...
     
    <label>Menu link</label>
    <class>myclass</class>
    <module>contents</module>
    <controller>index</controller>
    <action>index</action>
    <params>
    	<id>43</id>
    	<lang></lang>
    </params>
     
    ... some xml ...
    Ce qui correspond à :

    <a class="myclass" href="/contents/index/index/id/43/lang/">Menu link</a>
    Donc ça coince au niveau de l'élément "lang". Je ne sais pas ce qu'il faut lui mettre comme valeur par défaut car je dois avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <a class="myclass" href="/contents/index/index/id/43/lang/fr">Menu link</a>
     
    ou
     
    <a class="myclass" href="/contents/index/index/id/43/lang/en">Menu link</a>
    Voilà, j'espère avoir été clair et fourni les informations nécessaires. Je vous remercie d'avance pour l'aide que vous pourrez m'apporter.

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 505
    Par défaut
    Bonjour,

    Voici comment moi je ferais, ce n'est pas forcement une bonne solution pour toi, mais cela peut te donner des idées.

    Le choix de la langue se ferait via un lien (type petit drapeau), qui dans un controller mettrais fr,en en sessions.

    Ensuite je créerais un XML par langue.

    Et dans le bootstrap , je choisi le xml en fonction de la langue

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $session = new Zend_Session_Namespace('default');
    $config = new Zend_Config_Xml(APPLICATION_DIRECTORY . '/navigation'.$session->lang.'.xml', 'nav');
    $Zend_Layout = Zend_Layout::getMvcInstance()->getView();
    $Zend_Layout->navigation(new Zend_Navigation($config));
    Cela reste une piste.

  3. #3
    Futur Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Par défaut
    Merci de m'avoir répondu, cela reste une piste en effet.

    J'avais commencé les fichiers XML mais finalement, je suis parti là dessus : Rendering breadcrumbs using a partial view script

    J'ai donc travaillé sur le fil d'ariane en suivant cette méthode. Ce qui me donne ...

    Dans mes layouts :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <p id="breadcrumb">Vous êtes ici : <?= $this->navigation()->breadcrumbs()->setPartial(array('breadcrumbs.phtml', 'default')) ?></p>
    Dans breadcrumbs.php (dans /application/modules/default/views/scripts)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    <?php $l = count($this->pages); for($i = 0; $i < $l; $i++) : ?>
    <?php if($i > 0) : ?>  <?= $this->navigation()->breadcrumbs()->getSeparator() ?> <?php endif; ?>
    <?php if($i < $l-1) : ?>
    <a href="<?= CMS_UrlRewriter::getInstance()->rewrite(($this->pages[$i]->getHref() . '/')  . 'lang/' . $this->navigation()->breadcrumbs()->getTranslator()->getLocale()) ?>"><?= $this->pages[$i]->label ?></a>
    <?php else : ?>
    <?= $this->pages[$i]->label ?>
    <?php endif; ?>
    <?php endfor; ?>
    Maintenant, je ne sais pas ce que vaut cette solution. J'ai aussi un autre problème concernant le menu du site. Je ne me suis pas occupé de la partie découpe et intégration. Le menu souhaité est comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <ul id="menu">
       <li class="first"><a href="#">First level</a>
          <ul class="sub">
             <li><a href="#">Second level</a></li>
             <li><a href="#">Second level with child</a>
                <ul>
                   <li><a href="#">Third level</a></li>
                </ul>
             </li>
             <li><a href="#">Second level</a></li>
          </ul>
       </li>
    </ul>
    Zend_Navigation génère quelque chose comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <ul id="menu">
       <li><a class="first" href="#">First level</a>
          <ul>
             <li><a class="second" href="#">Second level</a></li>
             <li><a class="second" href="#">Second level with child</a>
                <ul>
                   <li><a class="third" href="#">Third level</a></li>
                </ul>
             </li>
             <li><a class="second" href="#">Second level</a></li>
          </ul>
       </li>
    </ul>
    Pour obtenir le rendu souhaité, je pourrais appliquer la même méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <?= $this->navigation()->menu()->setPartial(array('menu.phtml', 'default')) ?>
    Seulement là, je coince un peu. comment afficher mon menu de façon récursive? Au pire, on connait le nombre de niveaux (3). Je suis également preneur de tous les conseils que vous pourrez me donner.

    On peut peut-être se baser la dessus : Rendering a custom menu using a partial view script

  4. #4
    Futur Membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Par défaut
    Un premier jet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    <ul id="menu">
    <?php
     
    foreach ($this->container as $page) 
    {
       echo '<li class="' .$page->getClass() .'">' .$this->menu()->htmlify($page) .'</li>' .PHP_EOL;
     
       if (!empty($page->pages))
       {
          echo '<ul class="sub">' .PHP_EOL;
          foreach ($page->pages as $subpage) 
          {
             echo '<li>';
             if ($href = $subpage->getHref()) 
                echo '<a href="' .$href .'">';
             else 
                echo '<span>';
             echo $subpage->getLabel();
             if ($href) 
                echo '</a>';
             else 
                echo '</span>';            
             echo '</li>' .PHP_EOL;
          }
          echo '</ul>' .PHP_EOL;
       }
       echo '</li>' .PHP_EOL;
    }
    ?>
    </ul>
    Affiche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <ul id="menu">
       <li class="first">...
          <ul class="sub">
             <li>...</li>
          </ul>
       </li>
    </ul>

Discussions similaires

  1. utiliser les tag [MFC] [Win32] [.NET] [C++/CLI]
    Par hiko-seijuro dans le forum Visual C++
    Réponses: 8
    Dernier message: 08/06/2005, 15h57
  2. Réponses: 4
    Dernier message: 05/06/2002, 14h35
  3. utilisation du meta type ANY
    Par Anonymous dans le forum CORBA
    Réponses: 1
    Dernier message: 15/04/2002, 12h36
  4. [BCB5] Utilisation des Ressources (.res)
    Par Vince78 dans le forum C++Builder
    Réponses: 2
    Dernier message: 04/04/2002, 16h01
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo