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

 PHP Discussion :

Système de menu [1.x]


Sujet :

PHP

  1. #1
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut Système de menu
    Bonjour,

    Afin de poursuivre mon auto-formation à symfony, j'ai tenté de créer un composant menu, l'objectif étant de bien comprendre le fonctionnement (l'utilisation d'un plugin pourrait facilité la chose mais ne m'aidera pas dans mon apprentissage )

    Voici ce que j'ai donc fait :

    Code schema.yml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Menu:
      connection: doctrine
      tableName: sfMenu
      columns:
        label:
          type: string(20)
        url:
          type: string(255)
        priority:
          type: integer
     
    # label : libellé du menu. ex: "accueil"
    # url : cible de l'item menu. ex: "http://localhost/frontend_dev.php/accueil"
    # priority : indice permettant d'ordonner les menus. ex: 1

    Code layout.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    [...]
    <?php include_component("menu","index"); ?>
    [...]

    Le composant Menu et son template :
    Code components.class.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    class menuComponents extends sfComponents
    {
      public function executeIndex(sfWebRequest $request)
      {
        // getMenus renvoit la liste des menus ordonnés selon Priority (orderBy)
        $this->menus = Doctrine_Core::getTable('Menu')->getMenus();
     
        // affecte à currentMenu l'url demandé
        $this->currentMenu = $request->getUri();
      }
    }

    Code _index.php : 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
    <div id="menu" class="float-right">
        <ul>
          <?php
          $last = count($menus)-1;
     
          foreach ($menus as $key=>$menu) {
            echo "<li>";
            if ($menu->getUrl()==$currentMenu) {
                echo "<span class=\"menuonpage\">".$menu->getLabel()."</span>";
            } else {
                echo link_to($menu->getLabel(),$menu->getUrl());
            }
            if ($key < $last) { echo " | " ;}
            echo "</li>";
          }  
          ?>
        </ul>
    </div>

    Mon menu fonctionne bien pour un contexte donné. Cependant, je ne suis pas certain que ma méthode soit "symfony-friendly" et, comme elle tient compte d'urls absolues, elle ne fonctionne pas en dehors de son contexte (frontend_dev.php/prod/etc).

    Bref, je suis preneur de tout conseil

    Merci d'avance.

    PS: pour détailler le fonctionnement, mon menu se présente ainsi :
    accueil | blog | contact

    accueil est en gras car il s'agit de la page courante
    les autres liens (soulignés) représente les liens vers les autres pages
    CV :
    - LinkedIn
    - Viadeo

  2. #2
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Salut,

    J'ai cherché et abandonné...

    Le mieux serait de partir non pas sur des url mais sur des routes (et uniquement des routes).

    Tu peux récupérer la route utilisée par le parser depuis l'objet request et donc ne plus avoir le problèmes des paramètres.

    Mais il reste des difficultés au niveau des "sous" liens, imagine un lien user qui envoie sur une liste d'user, là, ça marche. Puis tu parts vers un user en particulier (pas de liens dans le menu) et ... plouf, plus de menu en évidence...
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  3. #3
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Salut,

    Merci pour ta réponse

    J'ai constaté que je pouvais récupérer la route dans le template via :
    $sf_context->getInstance()->getRouting()->getCurrentRouteName();
    ou dans actions/components :
    sfContext::getInstance()->getRouting()->getCurrentRouteName();

    Cela fonctionne bien pour les routes de type list mais je ne sais pas comment m'y prendre pour des routes de type show.

    Par exemple une des routes les plus utilisées est la suivante :
    Code routing.yml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    [...]
    pagecontent_view:
      url: /:slugname
      class: sfDoctrineRoute
      options:
        model: Content
        type: object
      param:
        module: pagecontent
        action: show
      requirements:
        sf_method: [GET]
    [...]

    Les commandes ci-dessus me renvoie bien pagecontent_view mais je ne sais pas comment récupérer le slugname correspondant, ce dernier permettant d'identifier le contenu et donc de comparer avec ceux stocker dans mon menu.

    Je me permets par la même occasion une question bonus. Si ma page d'accueil est sur la route pagecontent_view avec le slugname accueil (donc url : /accueil). Comment puis-je fais pour définir une nouvelle route qui permettrait d'afficher cette page à l'emplacement '/' (qui serait alors plus appropriée).

    J'avais imaginer configurer la route suivante mais je ne sais pas comment fournir l'information slugname à cette dernière.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    homepage:
      url:   /
      param: { module: pagecontent, action: show }
    Merci d'avance
    CV :
    - LinkedIn
    - Viadeo

  4. #4
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Récupérer le slug n'est pas plus difficile que le nom de la route.

    Le mieux serait dans le contrôleur de le mettre à disposition du template.

    Si non, par le même principe une fois que tu as l'instance, tu peux récupérer le sfRequest. De là, tu sais récupérer les paramètres et donc le slug.


    Pour la deuxième question, j'ai un peu l'impression que tu veux le beurre et l'argent du beurre... l'url / avec rien pour la racine (ce qui est logique).

    Et l'url /:slug pour d'autre choses, ce qui est dangereux.

    Tu fais quoi si tu as une route /login et un slug = login ?

    Bon, je ne suis pas sur d'avoir tout compris, mais si c'est ce que j'ai compris... faudrait envisager ce cas
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  5. #5
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Réponse un peu tardive mais vieux motard que jamais

    Pour la première question, voici comment j'ai fait pour passer par les routes. L'important étant de générer les routes au niveau de chaque item du menu afin d'obtenir les urls associées, l'url de la page courrante étant déjà connue.
    (suis pas sur que ce soit super optimisé mais faute de mieux...)

    Code schema.yml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Menu:
      connection: doctrine
      tableName: sfMenu
      columns:
        label:
          type: string(20)
        routename:
          type: string(255)
        paramarray:
          type: string(1024)
        priority:
          type: integer
     
    # routename est le nom de la route (cf routing.yml)
    # paramarray est le contenu du tableau de paramètre en chaine de caractèreq soit par exemple "mavar1"=>"toto"

    Code components.class.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
      public function executeIndex(sfWebRequest $request)
      {
        $this->menus = Doctrine_Core::getTable('Menu')->getMenus();
     
        $this->currentPage = $request->getUri();
    }

    Code _index.php : 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
    <div id="menu" class="float-right">
        <ul>
          <?php
          $last = count($menus)-1;
     
          foreach ($menus as $key=>$menu) {
            //cast de la chaine de caractère en array
            eval('$mymenuparam = array('.$menu->getParamarray(ESC_RAW).');');
     
            // génération de l'url en fonction de la route et des paramètres
            $mymenuurl = url_for($menu->getRoutename(),$mymenuparam,true);
     
            echo "<li>";
            if ($mymenuurl==$currentPage) {
                echo "<span class=\"menuonpage\">".$menu->getLabel()."</span>";
            } else {
                echo '<a href="'.$mymenuurl.'">'.$menu->getLabel().'</a>';
            }
            if ($key < $last) { echo " | " ;}
            echo "</li>";
          }  
          ?>
        </ul>
    </div>

    Maintenant, quelque soit le contexte, je suis capable d'identifier la page et donc son item dans le menu



    Citation Envoyé par Michel Rotta
    Pour la deuxième question, j'ai un peu l'impression que tu veux le beurre et l'argent du beurre... l'url / avec rien pour la racine (ce qui est logique).

    Et l'url /:slug pour d'autre choses, ce qui est dangereux.

    Tu fais quoi si tu as une route /login et un slug = login ?

    Bon, je ne suis pas sur d'avoir tout compris, mais si c'est ce que j'ai compris... faudrait envisager ce cas
    En fait, je pensais que les routes étaient analysées par ordre de priorité, c'est à dire que la première route qui répond aux critères sera celle utilisée.
    Après je fais peut être erreur.

    Par contre je suis conscient du problème pour le cas de la route /login
    le slug = login ne sera alors jamais pris en compte.

    Mais ce projet est avant tout le moyen de connaitre les diverses possibilités de symfony (en réalisant un espèce de CMS à usage unique ^^) et bien entendu, cela ne me viendrait jamais à l'idée de livrer ce genre de chose à un client (même en lui interdisant certains slugs, je trouverais cela dangereux au niveau maintenabilité et pas très carré au niveau fonctionnel).

    Concernant ma page d'accueil, en fait je cherche à savoir :
    - si on peut re-router la racine vers une page (exemple / redirige vers /accueil) ? (en dehors d'un pseudo module avec redirection dans le executeIndex du controleur)
    - si on peut charger une page avec le module en mode show pour un paramètre prédéfinit. par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    homepage:
      url:   /
      param: { module: pagecontent, action: show, slugname: accueil }
    Merci d'avance
    CV :
    - LinkedIn
    - Viadeo

  6. #6
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Concernant ma page d'accueil, en fait je cherche à savoir :
    - si on peut re-router la racine vers une page (exemple / redirige vers /accueil) ? (en dehors d'un pseudo module avec redirection dans le executeIndex du controleur)
    C'est la première idée qui m'est venue à l'esprit. Il n'y a pas de paramètres pour y arriver depuis les routes. Hors à trouver une astuce dans le .htaccess (et j'ai des doutes), il n'y a qu'une redirection qui pourrait marcher.

    - si on peut charger une page avec le module en mode show pour un paramètre prédéfinit. par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    homepage:
      url:   /
      param: { module: pagecontent, action: show, slugname: accueil }
    Merci d'avance
    Cette route ne peut marcher, pour que le paramètre slug soit passé il faudrait qu'il soit définit. Peut-être si on lui dit qu'il peut accepter des paramètres optionnels ?

    On avait fait un truc dans le genre pour passer des paramètres à une action unique, l'idée était d'avoir deux url simple qui retournait un paramètre par défaut. Mais pour cela, il faut qu'il y ait au moins un paramètre dans la route.

    J'ai inventé une machine à couper les cheveux en quatre, au cas où.

    Encore une chose, il y a un plugin intéressant, que j'ai déjà utilisé : pmSuperfishMenuPlugin, il y a peut-être des trucs à récupérer ?
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  7. #7
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Merci pour ta réponse

    Concernant les routages, je commence à comprendre la philosophie du truc...

    Maintenant que mon menu est fonctionnel, je vais regarder de plus près ce plgin. Ce dernier pourrait m'être utile pour un prochain projet et, dans le pire des cas, cela restera tout de même très instructif
    CV :
    - LinkedIn
    - Viadeo

  8. #8
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    En fait il a des avantages : le menu est modifiable dynamiquement, il peut être préparé en yaml.

    Et des inconvénients : le menu en yaml est interprété à chaque fois (pas de mise en cache), impossible de limiter simplement une option aux personnes logguées ou pas, impossible de gérer des options style "cochée", impossible de mettre une aide (title), impossible de mettre une image pour une option de menu,... de quoi largement améliorer le truc !
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  9. #9
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Merci pour ces infos

    Cela m'amène à la question suivante :
    Est-ce que mon composant menu peu, tel qu'il est structuré, gérer la mise en cache ?
    (le système de cache sous symfony reste assez obscure pour moi malgré le tuto)
    CV :
    - LinkedIn
    - Viadeo

  10. #10
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Tu ne peux mettre en cache que des éléments qui durent.

    Donc chez toi, tu ne pourrais cacher qu'un array résultant de la lecture de la table (une requête d’économisée). Le reste est la génération du html, qui est dynamique. Sauf à reporter en javascript la mise en évidence du lien actif... (ce qui serait peut-être moins lourd).

    En relisant ton code, je me dis que tu aurais intérêt à le mettre dans un componnement. Et que le template n'est pas conforme, il embarque plus que du simple affichage (MVC...) il devrait être en partie préparé dans un tableau dans la contrôleur (avantage du componnement qui à son propre contrôleur), ainsi le code dans le template serait plus MVC et plus symfony template.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  11. #11
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Je ne saisie pas trop, mon menu est déjà un composant je crois (components.class.php à la place de actions.class.php et appel dans le layout par la commande include_component). A moins que quelque chose m'échape ?

    J'ai retouché mon menu afin qu'il puisse gérer le cache (enfin je pense)
    En voici le détail :

    Code components.class.php : 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
    class menuComponents extends sfComponents
    {
      public function executeIndex(sfWebRequest $request)
      {
        $menus = Doctrine_Core::getTable('Menu')->getMenus();
        $currentPage = $request->getUri();
     
        $last = count($menus)-1;
     
        $linemenu = array();
     
        foreach ($menus as $menu) {
          //cast de la chaine de caractère en array
          eval('$menu_param = array('.$menu->getParamarray().');');
     
          // génération de l'url en fonction de la route et des paramètres
          $menu_url = url_for($menu->getRoutename(),$menu_param,true);
     
          $linemenu[] = array ($menu_url,$menu->getLabel());      
        }
     
        $this->menus = $linemenu;
      }
    }

    mon template :
    Code _index.php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <div id="menu" class="float-right">
        <ul>
        <?php 
            $last = count($menus);
            for ($i = 0; $i < $last;$i++)
            {
                echo "<li>";
                echo '<a href="'.$menus[$i][0].'" class="menulink">'.$menus[$i][1].'</a>';
                echo '<span class="menuitem" data-url="'.$menus[$i][0].'">'.$menus[$i][1].'</span>';
                if ($i < $last -1) { echo " | " ;}
                echo "</li>";
            }  
        ?>
        </ul>
    </div>

    et mon js correspondant (les class menuitem sont cachés par défaut) :
    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
    $(document).ready(function() {
        var pcurrenturl = window.location.href;
     
        $(".menulink").each(function (index, url) {
            if (url == pcurrenturl) {
                $(this).hide();
            }
        }) 
     
        $(".menuitem").each(function (index, element) {
            if ($(this).data("url") == pcurrenturl) {
                $(this).show();
            }
        })
    });
    Qu'en pensez-vous ?
    CV :
    - LinkedIn
    - Viadeo

  12. #12
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Je ne vois pas trop où est le cache...

    Vu qu'il est des plus statiques, il devrait pouvoir être caché au niveau du template.

    Ton template n'est pas conforme à l'écriture préconisée par sensio pour les templates php.
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  13. #13
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Je ne vois pas trop où est le cache...
    Effectivement, j'ai oublié de fournir le fichier correspondant :
    module/menu/config/cache.yml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    _index:
      enabled: true
      with_layout: true
    Ton template n'est pas conforme à l'écriture préconisée par sensio pour les templates php.
    Je débute et je n'ai pas trouvé de référence concernant l'écriture des templates pour symfony (j'ai peut être mal cherché ?).
    Cependant, je constate effectivement que les templates semblent s'appuyer essentiellement sur du HTML avec quelques lignes php.
    Dois-je éviter les blocs php ?
    Est-ce que ce template correspond mieux ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <div id="menu" class="float-right">
        <ul>
            <?php $last = count($menus) ?>
            <?php for($i = 0; $i < $last;$i++): ?>
                <li>
                    <a href="<?php echo $menus[$i][0] ?>"class="menulink"><?php echo $menus[$i][1] ?></a>
                    <span class="menuitem" data-url="<?php echo $menus[$i][0] ?>"><?php echo $menus[$i][1] ?></span>
                    <?php if ($i < $last -1) { echo " | " ;} ?>
                </li>
            <?php endfor; ?>
        </ul>
    </div>
    Merci d'avance
    CV :
    - LinkedIn
    - Viadeo

  14. #14
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    En mode debug tu as la possibilité dans la barre de vérifier l'utilisation du cache, n'hésite pas à vérifier si ce que tu as paramétré est bien pris en compte.

    Effectivement, cette version du template est conforme à la norme.

    En gros, dans le template un minimum d'intelligence php, sauf pour faire une boucle de lecture d'un objet où une condition pour l'affichage. C'est le html qui prime.

    Dans le contrôleur ou le modèle, c'est le php qui prime, le fichier commence par un et n'à jamais de .
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

  15. #15
    Membre expert

    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Janvier 2004
    Messages
    2 123
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 123
    Points : 3 256
    Points
    3 256
    Par défaut
    Je me suis créé un environnement cache afin de voir tout cela et ca marche super

    Merci pour tous tes conseils
    CV :
    - LinkedIn
    - Viadeo

  16. #16
    Expert éminent
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Points : 8 486
    Points
    8 486
    Par défaut
    Si tu donnes un poisson à un homme, il mangera un jour. Si tu lui apprends à pêcher, il mangera toujours (Lao Tseu).

    • Pensez à valoriser les réponses pertinantes, cliquez sur le bouton vert +1 pour indiquer votre accord avec la solution proposée.
    • Pensez à utiliser la balise [code] pour afficher du code, elle est cachée sous le bouton [#] dans l'éditeur.
    • Une discussion est terminée ? Alors le bouton est votre ami !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Système] Création menu dynamique
    Par delma dans le forum Langage
    Réponses: 1
    Dernier message: 20/10/2006, 19h44
  2. [système] Comment ajouter un item dans le context menu de Windows ?
    Par ddmicrolog dans le forum API, COM et SDKs
    Réponses: 8
    Dernier message: 29/06/2005, 17h03
  3. Réponses: 3
    Dernier message: 13/06/2005, 12h05
  4. [MFC] Menu système d'un dialog box
    Par tonyskn dans le forum MFC
    Réponses: 2
    Dernier message: 24/05/2004, 21h50
  5. Réponses: 3
    Dernier message: 11/06/2003, 00h18

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