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

Bibliothèques et frameworks PHP Discussion :

[CakePHP] Layout et element dynamique


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut [CakePHP] Layout et element dynamique
    Bonjour,

    J'aimerais faire un truc qui parait simple mais qui ne l'est pas.
    Pour donner l'idée j'aimerais pouvoir inclure un élément dans un layout mais sous condition dans le contrôleur. Un petit peu a la manière de changer le titre des pages grâce a la variable $title_for_layout

    Exemple :

    index.ctp:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <body>
    <?php $menu_for_layout ?>
    </body>
    menu.ctp
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <ul>
    <li>Menu 1</li>
    <li>Menu 2</li>
    <li>Menu 3</li>
    </ul>
    index_controller.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ($condition)
       this->menu = $this->element('menu');
    mais ça ne marche pas, quelqu'un peut-il m'aider ?
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    As-tu essaye de faire echo $menu; ?
    Je ne veux aps dire de betises mais les variables xxx_for_layout sont codees en dur dans la classe View :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		$data_for_layout = array_merge($this->viewVars, array(
    			'title_for_layout' => $pageTitle,
    			'content_for_layout' => $content_for_layout,
    			'scripts_for_layout' => join("\n\t", $this->__scripts),
    			'cakeDebug' => $debug
    		));
    En gros si tes variables ne sont pas correctement placees dans ViewVars avant l'appel a View::render() tu ne pourras rien faire simplement sauf en bidouillant un peu ...
    Bon courage en tout cas

  3. #3
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    Citation Envoyé par real34 Voir le message
    Bonjour,

    As-tu essaye de faire echo $menu; ?
    oui et ce n'est pas super pour 2 raisons :

    - Le controlleur ne "connait pas" $this->element()
    - Si je n'affecte rien a $news, j'ai un beau message d'erreur (Undefined variable $news)

    Citation Envoyé par real34 Voir le message
    En gros si tes variables ne sont pas correctement placees dans ViewVars avant l'appel a View::render() tu ne pourras rien faire simplement sauf en bidouillant un peu ...
    Bon courage en tout cas
    Je vais essayer de bidouiller mais franchement ça serait vraiment classe que cake puisse le faire dans le futur.

    Ainsi que la possibilité de setter un layout pour un groupe d'actions/controller

    merci a toi
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    Après vérificaiton ce n'est en effet pas possible de manière immédiate ... mais comme je te l'ai dit du bidouillage est possible (http://bakery.cakephp.org/articles/v...-to-the-layout). Il est également possible d'intégrer les bonnes choses aux bons endroits et de le faire sans bidouille, mais ce n'est pas "immédiat" : http://nik.chankov.net/2007/10/10/ca...ssing-through/ (comprendre le concept et améliorer son code).

    Néanmoins, je pense qu'avant d'essayer de te lancer dans des révolutions pour faire ce que tu veux à TA manière le faire il faudrait te poser un peu, pour voir si il n'existe pas une manière propre de résoudre ton besoin initial à la manière de CakePHP.

    Tu veux afficher un menu selon certaines conditions ? Rajoutes une variable "$displayMenu" que tes contrôleurs pourront modifier ($this->set('displayMenu', true/false))...
    Tu veux un layout pour un groupe d'action/contrôleur ? Définis la variable "$this->layout" dans un beforeFilter() en analysant l'action et le contrôleur courant.

    CakePHP est à mon avis suffisamment souple pour te permettre de faire des choses proprement, en respectant le MVC.

  5. #5
    Rédacteur
    Avatar de RideKick
    Homme Profil pro
    Directeur technique
    Inscrit en
    Septembre 2006
    Messages
    5 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2006
    Messages : 5 914
    Points : 12 572
    Points
    12 572
    Par défaut
    Citation Envoyé par real34 Voir le message
    Tu veux afficher un menu selon certaines conditions ? Rajoutes une variable "$displayMenu" que tes contrôleurs pourront modifier ($this->set('displayMenu', true/false))...
    Tu veux un layout pour un groupe d'action/contrôleur ? Définis la variable "$this->layout" dans un beforeFilter() en analysant l'action et le contrôleur courant.

    CakePHP est à mon avis suffisamment souple pour te permettre de faire des choses proprement, en respectant le MVC.
    C'est finalement les options pour lesquelles j'ai opté meme si j'ai quand meme un doute sur le respect du MVC.

    En effet, la vue pour moi devrait etre ni pls ni moins qu'un template simple, hors si on commence a faire du traitement dedans du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if($afficheLayout) else
    on casse u n peu le paradigme.

    Meme si je suis conscient qu'on ne peut pas non plus s'en passer quelque part c'est un peu paradoxale je trouve

    Merci pour ton aide encore une fois précieuse
    Pas de questions techniques en MP please

    Mon site perso

    Mon profil Viadeo

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Février 2005
    Messages
    58
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 58
    Points : 74
    Points
    74
    Par défaut
    Un layout est cense gerer le code generique de ta vue, donc pour ma part je trouve ca normal d'avoir dans des elements (en premier lieu) et aussi dans les layouts (meme si en avoir trop signifie qu'il y a sans dout un probleme quelque part).

    Il suffit juste de ne pas en abuser et de faire en sorte que ce code ait vraiment un sens ...

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/08/2007, 14h21
  2. Elements dynamique dans un formulaire
    Par nabil148911 dans le forum Struts 1
    Réponses: 5
    Dernier message: 23/08/2007, 10h21
  3. [Struts-Layout][debutant] Crumbs dynamique
    Par radoine dans le forum Struts 1
    Réponses: 3
    Dernier message: 20/07/2006, 14h56
  4. Layout pour ajoute dynamique
    Par Invité dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 04/05/2006, 12h38
  5. [struts-layout]nom properties dynamique
    Par discoboys dans le forum Struts 1
    Réponses: 1
    Dernier message: 10/02/2006, 17h00

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