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

Zend Framework PHP Discussion :

[Zend_Layout] Insertion de menu dans une appli par module


Sujet :

Zend Framework PHP

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 277
    Points : 93
    Points
    93
    Par défaut [Zend_Layout] Insertion de menu dans une appli par module
    Bonjour à tous,

    J'ai suivit le tuto suivant pour comprendre et appliquer les layouts :
    http://julien-pauli.developpez.com/t...r/zend-layout/

    Je construit le squelette de mon application et je fonctionne par module. J'ai donc un menu qui apparait sur toutes les pages d'un module. Je veux donc inclure cette partie automatiquement par un layout. Ce menu comporte des variables, je voulais donc utiliser l'helper de vue ActionHelper.

    Dans l'exemple il montre une utilisation d'action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $this->action('gauche','login') ?>  // action('index','header') dans mon cas
    Cependant, comme je fonctionne par module, voici le message d'erreur:
    --------------------------------------------------
    Fatal error: Uncaught exception 'Zend_Controller_Exception' with message 'No default module defined for this application' in /var/www/projet/site1/library/Zend/Controller/Dispatcher/Standard.php:392 Stack trace: #0 /var/www/projet/site1/library/Zend/Controller/Dispatcher/Standard.php(211): Zend_Controller_Dispatcher_Standard->getControllerClass(Object(Zend_Controller_Request_Http)) #1 /var/www/projet/site1/library/Zend/Controller/Dispatcher/Standard.php(245): Zend_Controller_Dispatcher_Standard->isDispatchable(Object(Zend_Controller_Request_Http)) #2 /var/www/projet/site1/library/Zend/View/Helper/Action.php(136): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #3 [internal function]: Zend_View_Helper_Action->action('index', 'header') #4 /var/www/projet/site1/library/Zend/View/Abstract.php(300): call_user_func_array(Array, Array) #5 [internal function]: Zend_View_Abstrac in /var/www/projet/site1/library/Zend/Controller/Dispatcher/Standard.php on line 392
    --------------------------------------------------

    La question est donc: Savez vous comment faire fonctionner les "action" avec une appli par module?

    Merci d'avance.

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Si tu gères les modules, il me semble qu'il faut passer le nom du module en troisième paramètre.

  3. #3
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 277
    Points : 93
    Points
    93
    Par défaut
    C'était bien ça.

    Plus largement,

    Bonjour à tous,

    Je construit actuellement le squelette de mon site. Pour l'instant, j'ai un fonctionnement par module et multilingue.
    Je commence à regarder le principe des layouts pour inclure mon header et mon menu automatiquement.
    Quelques précision :
    - Le header doit être identique sur tout le site.
    - Le menu est spécialisé par module.

    J'ai donc suivit le cours de "developpez" => http://julien-pauli.developpez.com/t...r/zend-layout/

    J'ai choisit l'insertion de layout par le helper de vue "ActionHelper".

    J'ai donc ceci dans mon bootstrap

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Zend_Layout::startMvc($config->layout);
    Voilà mon fichier de configuration:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    [general]
    db.adapter = PDO_MYSQL
    db.config.host = localhost
    db.config.username = root
    db.config.password = ****
    db.config.dbname = site1
     
    layout.layout     = template
    layout.contentKey = contenu
    layout.layoutPath = ./../application/modules/news/views/layouts
    layout.layoutModule = news
    Voici le code du fichier template.phtml:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <?php echo $this->action('header','index','news') ?>
    <?php echo $this->layout()->contenu?>
    et voilà l'arborescence :

    |->site1
    ---|->application
    ------|->models
    ------|->modules
    ---------|->news
    ------------|->controllers
    ------------|->views
    ---------------|->layout
    ------------------|->template.phtml
    ---------------|->scripts
    ------------------|->affichage
    ---------------------|->index.phtml
    ---|->library
    ------|->Zend
    ---|->public
    ------|->index.php

    Donc comme vous pouvez le voir, j'ai configurer mon repertoire de layout pour pointer vers le dossier suivant
    => \application\modules\news\views\layouts

    Le problème est que je pointe vers le module news. Donc cela marche bien pour le menu que j'inclus dans les pages de ce module mais comment faire pour les autres modules ?
    Comment faire également pour le header qui doit être identique sur toutes les pages?

    En faite ma question est de façon générale : Quelle est le meilleur moyen d'insérer des layouts dans une appli par module?

    Avez vous un modules spécial qui possède tous les layouts et tous les "templates" ?

    Merci d'avance pour votre aide.

  4. #4
    Membre à l'essai
    Inscrit en
    Septembre 2004
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 16
    Points : 13
    Points
    13
    Par défaut
    Je me demande défois si vous lisez la doc avant de coder...


    Si tu omets le paramètre du module, il prends le module courant.
    ainsi, si tu appels
    $this->acion('menu', 'nav');
    Il va chercher le controller nav et l'action menu dans le module actuel
    si tu mets
    $this->acion('menu', 'nav', 'common');
    Il ira chercher l'action menu, tu controller nav, tu modules 'common'.

    Avec ca, tu as tout ce qu'il te faut.

    N'oublie pas qu'il existe aussi les partials...


    Si tu possèdes un module qui contient tous les layouts et tous les templates, quel est l'interet alors d'une application modulaire ????
    Ce sont tes propres choix d'organisation

  5. #5
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 277
    Points : 93
    Points
    93
    Par défaut
    Oki. C'est bien ce que je pensais. Donc maintenant que j'ai compris le principe des différents composants, il me reste à choisir la meilleure façon de les utiliser.

    Pour cela j'ai besoin de votre aide.

    Une page se compose de cette manière.

    -un header html => unique pour chaque page (titre de la page, mots clés etc)
    -une bannière => identique sur tout le site
    -un menu droit => unique à chaque module (menu de navigation dans le module)
    -Le contenu => unique pour chaque page
    -un pied de page => identique sur tout le site

    Quelle est pour vous la meilleure façon de mettre cela en place?
    Mon problème se situe dans le header html. Au départ je voulais avoir un "template" et inclure les différentes vues:
    <?
    echo $this->action('banniere','index','mep'); //mep est le module ou je créer les vues générales
    echo $this->action('menu1','index','mep'); //un menu
    echo $this->layout()->contenu; //le contenu
    echo $this->action('footer','index','mep');
    ?>

    Mais, de cette façon, je ne vois pas comment inclure mon header html.

    Avez vous une piste?

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2006
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France, Bas Rhin (Alsace)

    Informations forums :
    Inscription : Février 2006
    Messages : 15
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    J'aimerais faire a peu près la même chose que toi vu que cela fait un bout de temps qu'il n'a pas eu de réponse je me disais que tu avais peutêtre trouvé la solution par toi-même. Si oui pourrait-tu nous la faire partager ?

    merci

  7. #7
    Membre régulier
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    277
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 277
    Points : 93
    Points
    93
    Par défaut
    Mon problème se situait au niveau de la création du header HTML. J'ai appris que l'action (et donc la vue) qui est exécuter/rendu dans le 'content' est générée avant le template.phtml. Il est donc possible de faire ca.

    Fichier template.phtml :
    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
     
    <?php $this->headLink()->appendStylesheet('/styles/'.$this->domain_name.'/styles.css'); ?>
    <?php $this->headTitle($this->hotspot_name, 'PREPEND'); ?>
    <?php $this->headTitle($this->domain_name, 'PREPEND'); ?>
    <?php $this->headTitle()->setSeparator(' / '); ?>
     
    <?php echo $this->doctype('XHTML1_STRICT') ?>
    <html>
    <head>
     
    <?php echo $this->headMeta() ?>
    <?php echo $this->headTitle() ?>
    <?php echo $this->headLink() ?>
    <?php echo $this->headScript() ?>
    <?php echo $this->headStyle() ?>
     
    </head>
     
    <body>
     
    <?php echo $this->layout()->content;?>
     
    </body>
    </html>
    et le fichier "content" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php $this->headTitle("horaires invalides"); ?>
     
    <h1>horaires invalides</h1>
     
    <p>
    La définition de vos plages horaires ne vous permettent pas d'accéder à ce hotspot maintenant.
    </p>
    pour avoir ce résultat (résumé):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    <!DOCTYPE ...
    <head>
    <title>pc-joff / Hotspot 1 / horaires invalides</title>
    <link href="/styles/pc-joff/styles.css" ...
    </head>
     
    <body>
     
    <h1>horaires invalides</h1>
     
    <p>
    La définition de vos plages horaires ne vous permettent pas d'accéder à ce hotspot maintenant.
    </p>
    Ceci est un exemple pour le title mais tu peux utiliser le même principe pour tout le reste.

    (Merci à nORKy qui m'a donné la réponse sur le z-f)

    Ce que je n'avais pas compris, c'est que les variables définies dans le 'content' pouvaient être utilisées dans la vue du 'layout'.



    Dit toi que l'action (et donc la vue) qui est exécuter/rendu dans 'content' est générée AVANT layout.phtml
    De ce fait, dans ton content tu peut mettre ca :

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

Discussions similaires

  1. [11g] Empêcher un insert dans une table par un Trigger
    Par cmako dans le forum PL/SQL
    Réponses: 19
    Dernier message: 16/10/2013, 15h42
  2. Menu dynamique dans une appli Winforms
    Par aiglelibre dans le forum Windows Forms
    Réponses: 5
    Dernier message: 02/05/2012, 15h19
  3. [Visual Web] Menu dans une appli web
    Par eponette dans le forum NetBeans
    Réponses: 2
    Dernier message: 26/01/2009, 20h03
  4. Réponses: 3
    Dernier message: 23/06/2004, 21h17
  5. Se servir du login/passwd window dans une appli
    Par ericb dans le forum Windows
    Réponses: 8
    Dernier message: 26/05/2004, 17h34

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