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

MVC PHP Discussion :

Gérer des blocks avec actionstack


Sujet :

MVC PHP

  1. #1
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut Gérer des blocks avec actionstack
    Bonjour,

    Mon idée pour afficher des block comme dans Drupal ou Joomla est d'utiliser les actionsStack et un plugin.

    Mon block serait donc une action se trouvant dans un controlleur.

    Le processus serait le suivant:
    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    /**
    * Le plugin récupère les actions de blocks existants 
    * et les ajoute à la pile d'actionStack en lui envoyant des paramètres
    * comme la position dans le layout.
    */
    class Ez_Controller_Plugin_Block extends Zend_Controller_Plugin_Abstract  
    {
        public $stack;
     
        public function routeStartup() {
            $this->stack = Zend_Controller_Action_HelperBroker::getStaticHelper('actionStack');
            // On récupère les blocks dans la base
            $blocks = $this->tableBlocks->getAllBlocks()->toArray();
     
            $blocks = array_reverse($blocks); 
            foreach ($blocks as $block) {
                if ($block['active'] == 1) {
                    $this->stack->actionToStack($block['action'], $block['controller'], 
                                                $block['module'], array('segment' => $block['segment'],
                                                                        'title'   => $block['title'])
                                                );
                }
            }
        }
    }
     
     
    class LoginController extends Zend_Controller_Action
    {
     .../...
        public function blockauthAction()
        {
            $auth = Zend_Auth::getInstance();
            $this->view->title = $this->_request->getParam('title');
     
           // on récupère la position passé en param par actionstack $this->_helper->viewRenderer->setResponseSegment($this->_request->getParam('segment'));
     
            if ($auth->hasIdentity()) {
                $this->view->identity = $auth->getIdentity();
                $this->renderScript('login/welcome.phtml');
            } else {
                $this->renderScript('login/loginForm.phtml');
            }
        }
    }
    Et dans le layout, on a juste a appeler les layouts aux bons endroits:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    <div id="header"><h1><a href="/">Accueil</a></h1><?php echo $this->layout()->header; ?></div>
     
    <!-- LEFT BAR -->
                <?php if ($this->layout()->left): ?>
                <div id="left"><?php echo $this->layout()->left; ?></div>
                <?php endif; ?>
    Qu'en pensez-vous?

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 178
    Par défaut
    Hello,

    Je suis parti aussi sur ce principe pour notre CMS maison et ça marche très bien.

    Je te ferais juste la remarque suivante sur ce que tu passes dans ta stack :
    passe plutôt le block en param et pas chaque propriété du block séparément, dans le temps, au fur et à mesure que des fonctionnalités apparaîtrons pour tes blocs ton code d'ajout à la stack lui ne changera pas

  3. #3
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    Oui c'est vrai je vais faire ça.
    Le seul problème que je n'ai pas résolu (peut-etre que ça ne t'arrive pas!), c'est qu'en cas d'exception comme une page non trouvé par ex., il ne s'affiche que l'erreur et du coup pas les blocks!

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    178
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 178
    Par défaut
    Normalement tu peux configurer un gestionnaire d'erreur pour le front controller.
    C'est un plug-in je crois auquel tu peux dire quel module/controller/action tu veux executer en cas d'exception en cours de dispatching

  5. #5
    Membre chevronné Avatar de manuscle
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2004
    Messages : 488
    Par défaut
    Tu parler du plugin error_handler!

    Effectivement je viens de tester et ça fonctionne!

    J'ai détourné le gestionnaire d'errreur en créant mon propre controlleur d'erreurs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
     
        protected function _initFrontcontroller()
        {
     
            $front->registerPlugin(new Zend_Controller_Plugin_ErrorHandler(array('module'=>'default', 'controller'=>'toto','action'=>'error')));
        }
    }
    Puis j'ai simplement copié/collé le contenu de ErrorController dans mon TotoController...... ça roule

    Je rajoute que même ceci résoud le problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $front->registerPlugin(new Zend_Controller_Plugin_ErrorHandler(array('module'=>'default', 'controller'=>'error','action'=>'error')));

Discussions similaires

  1. [OpenOffice][Base de données] Gérer des formulaires avec des boutons
    Par Marie86 dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 12/11/2010, 10h59
  2. gérer des utilisateurs avec un fichier XML
    Par ryoussef19 dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 08/06/2007, 10h20
  3. Réponses: 2
    Dernier message: 05/01/2006, 10h43
  4. [MySQL] conseils pour gérer des images avec mysql
    Par briiice dans le forum Administration
    Réponses: 9
    Dernier message: 04/01/2006, 09h52

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