Изменить макет в Bootstrap - PullRequest
       35

Изменить макет в Bootstrap

1 голос
/ 26 апреля 2011

Я новичок в Zend, и у меня проблема с изменением моего макета в начальной загрузке.Я хочу изменить свой макет, когда пользователь вошел в систему.

Моя функция изменить макет в начальной загрузке выглядит следующим образом:

protected function _initAuthState()
{
$layout = new Zend_Layout;
$layout->setLayoutPath('/layouts/scripts');

if (Zend_Auth::getInstance()->hasIdentity()):
// Logged in.
$layout->setLayout(layout2);

else:
// Not Logged in.
$layout->setLayout(‘layout’);
endif;
}

Этот код не работает, макетвсегда одно и то же ... помогите!

Ответы [ 2 ]

4 голосов
/ 26 апреля 2011

Вы изменяете новый экземпляр макета, а не экземпляр, который используется системой.

Я предполагаю, что вы задаете параметры макета в application.ini.Поэтому вам нужно:

$this->bootstrap('layout');
$layout = $this->getResource('layout');

Затем выполнить проверку / модификацию этого экземпляра макета.

Кстати, изменение макета часто выполняется с помощью плагина фронт-контроллера.Все еще запускается достаточно рано, чтобы выполнять работу, но часто более настраиваемый и многократно используемый.См. здесь и здесь для двух примеров.

1 голос
/ 28 апреля 2011

Я нашел ответ !!

это мой окончательный результат, и он работает !!

Bootstrap.php:

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

    public function _initLoader(){
        $resourceLoader = new Zend_Loader_Autoloader_Resource(array(
        'basePath'  => '../application/',
        'namespace' => 'My',
        ));

        $resourceLoader->addResourceTypes(array(
            'plugin' => array(
                'path'      => 'plugins/',
                'namespace' => 'Plugin',
            )
        ));
    }

    public function _initPlugins()
    {
    $front = Zend_Controller_Front::getInstance();
    $front->registerPlugin(new My_Plugin_Layout());
    }
}

application / plugins / Layout.php:

<?php
class My_Plugin_Layout extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch()
    {
        $user = Zend_Auth::getInstance();
        $role = $user->getIdentity()->role;
        $layout = Zend_Layout::getMvcInstance();

        switch ($role) {
            case 'admin':
                $layout->setLayout('layout2');
                break;

            case 'normal':
                $layout->setLayout('layout');
                break;

            default:
                $layout->setLayout('layout');
                break;
        }
    }
}
?>
...