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?