Eylemlerin zend framework, yığını Modüler web sitesi

3 Cevap php

Nasıl Zend çerçeve ile modüler bir web sitesi kurmak için. Ben, her sayfa url olarak db sayfaları temsil edilmektedir var. Her sayfa 1Ton içeriği vardır. Her içerik denetleyicisi, eylem ve konumunu (+ diğer artık önemli değil sütunlar) sahiptir. Yani, bir istek bir sayfa ve çoklu içerikleri (çoklu eylemler) olduğunu. Nasıl çıktı önce tüm eylemleri inşa edebilirsiniz? Ben içeriği (eylemler düzen baskı-out önce çalıştırılır) orada kaplara konur örnek feryat gibi düzen tasarımı istiyorum.

<div id="left">
   <?= $this->layout()->left_container ?>
</div>
<div id="center">
   <?= $this->layout()->center_container ?>
</div>
<div id="right">
   <?= $this->layout()->right_container ?>
</div>

Şimdiye kadar ben düzeni görünümünde eylemleri denilen, ama bu yaklaşım sevmiyorum:

foreach ($contents as $item) {
    echo $this->action($item['action'], $item['controller'], null, array('content' => $item));
}

Teşekkürler.

p.s.

adepretis kod kardeşime benzer, benim eylemleri views hata oluşmaz, zaman eylem denir düzende yazdırılacak anlamına gelir ki, düzen içinde çalıştırılır. Eylemler düzeni çıkıştan önce inşa hiçbir whey var mı? Başka bir kötü şey, her eylem ben ... çalıştırmanız gerekir ki -> setResponseSegment, ben bu otomatik istiyorum.

p.s. #2

Ben cevap olarak feryat listelenir, cevabını bulduk. Bir peynir altı suyu varsa ben bu kolay bir yere yazınız yapabilirsiniz.

3 Cevap

Ben diğer forumda cevabı buldum. İşte asnwer olduğunu:

MyPlugin

class MyPlugin extends Zend_Controller_Plugin_Abstract
{

    public function routeStartup(Zend_Controller_Request_Abstract $request)
    {
    	$action_stack = new Zend_Controller_Action_Helper_ActionStack();
    	// here I will read actions from db and run it in loop, but for example few are staticly added bellow
    	$action_stack->actionToStack('index', 'content', 'default', array('position' => 'left'));
    	$action_stack->actionToStack('index', 'content', 'default', array('position' => 'center'));
    	$action_stack->actionToStack('index', 'edo', 'default', array('position' => 'center'));
    	$action_stack->actionToStack('left', 'edo', 'default', array('position' => 'left'));
    	$action_stack->actionToStack('right', 'edo', 'default', array('position' => 'right'));
    }

}

BaseController, her kontrol uzanır

class BaseController extends Zend_Controller_Action
{

    public function preDispatch()
    {
    	$position = $this->_request->getParam('position', false);
    	if ($position) {
    		$this->_helper->viewRenderer->setResponseSegment($position);
    	}
    }

}

Layout. Phtml

<div>
    <h2><u>LEFT:</u></h2>
    <?=$this->layout()->left?>
</div>
<div>
    <h2><u>CENTER:</u></h2>
    <?=$this->layout()->center?>
</div>
<div>
    <h2><u>RIGHT:</u></h2>
    <?=$this->layout()->right?>
</div>

Bu herkes daha iyi bir çözüm varsa, soru cevap ve ben onun cevabını kabul edecek, ne istediğini.

Sen ActionStack helper kullanabilirsiniz. Örneğin:

class MyController_Action extends Zend_Controller_Action {
    function init() {
        /** you might not want to add to the stack if it's a XmlHttpRequest */
        if(!$this->getRequest()->isXmlHttpRequest()) {
            $this->_helper->actionStack('left', 'somecontroller', 'somemodule');
            $this->_helper->actionStack('center', 'somecontroller', 'somemodule');
            $this->_helper->actionStack('right', 'somecontroller', 'somemodule');
        }
}

class MyController extends MyController_Action {
    function indexAction() {
        // do something
    }
}

class SomecontrollerController extends MyController_Action {
    function leftAction() {
        // do something

        $this->_helper->viewRenderer->setResponseSegment('left_container');
    }

    function centerAction() {
        // do something

        $this->_helper->viewRenderer->setResponseSegment('center_container');
    }

    function rightAction() {
        // do something

        $this->_helper->viewRenderer->setResponseSegment('right_container');
    }
}

Yürütme /somemodule/my/index sonuçlar için bir istek /somemodule/somecontroller/left. /somemodule/somecontroller/right, /somemodule/somecontroller/center hangi karsilik gelen düzen segmentlerinde sonunda.

hi i also encounter the same problem. The solution you suggest work fine. But my baseController is in module base .The code work smooth with baseController but when i extended with controllers in another module error occure as base Controller cannot identify in other controller For eg: modules/ base/Controller/baseController modules/ user/Controller/userController

Herhangi Çözümleri?