Pergunta

a estrutura do diretório Estou tentando conseguir seria esta:

application/default/views/layouts/layout.phtml
application/default/views/scripts/index/index.phtml
application/admin/views/layouts/layout.phtml
application/admin/views/scripts/index/index.phtml
library/Zend
config/config.ini
public/index.php (bootstrap)

mas eu não consigo descobrir como deixar Zend encontrar meu layout.phtml em cada um dos meus módulos.

Na minha inicialização eu tenho:

define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application/'));
define('APPLICATION_ENVIRONMENT', 'testing');

//setup path to our library files
set_include_path( APPLICATION_PATH . '/../library' . PATH_SEPARATOR .
                  get_include_path() );

//register the autoloader
require_once 'Zend/Loader.php';
Zend_Loader::registerAutoload(); 

//set config in the registry
$config = new Zend_Config_Ini( APPLICATION_PATH . '/../config/config.ini', APPLICATION_ENVIRONMENT ); 
Zend_Registry::set('config', $config);

//setup logging
$writer = new Zend_Log_Writer_Stream(APPLICATION_PATH . '/../log/debug.log');
$logger = new Zend_Log($writer);
Zend_Registry::set('logger', $logger);

//run!
$frontController = Zend_Controller_Front::getInstance();
$frontController->addModuleDirectory(APPLICATION_PATH);
//initialize Zend_Layout's MVC helpers
Zend_Layout::startMvc();

$frontController->throwExceptions(true);

try {

    Zend_Controller_Front::getInstance()->dispatch();

} catch (Exception $exception) {

    echo '<html><body><center>'  . 'An exception occured while dispatching the front controller.'; 
    if (defined('APPLICATION_ENVIRONMENT') && APPLICATION_ENVIRONMENT != 'production'  ) {
        echo '<br /><br />' . $exception->getMessage() . '<br />'  . '<div align="left">Stack Trace:' . '<pre>' . $exception->getTraceAsString() . '</pre></div>'; 
    }
    echo '</center></body></html>';
    exit(1);
}

Para onde estou indo errado?

Update:

Eu não olhei para isso em um longo tempo, então a solução aceita não pode ser up-to-date. Se alguém quiser postar uma solução mais up-to-date a esta pergunta (ou seja ZF 1.8+), faça-o! Seria útil para outras pessoas que estão à procura de uma solução para isso.

Foi útil?

Solução

Você deve verificar se por módulo Zend_Layout , neste artigo, as tampas autor exatamente o que você está tentando alcançar. Sua metodologia é escrever um plugin para o controlador de frente que lida com layout de registro.

Outras dicas

Usando o Zend Framework 1,12 (não testei-o em versões anteriores): funciona fora da caixa

Eu costumo usar application.ini a coisas configuração assim, em orther para permitir layouts:

resources.layout.layout = "layout"

... ou qualquer que seja o layout padrão deve ser chamado. Como "layoutPath" não foi definido Zend_Layout vai olhar para "application / módulos // views / scripts" para um arquivo chamado "layout.phtml"

Se você usar a ferramenta zend ele vai começar layouts com a seguinte linha:

resources.layout.layoutPath = APPLICATION_PATH "layouts/scripts"

Esta é também muito bem, basta apagar o diretório ou evitar a criação do padrão "layout.phtml". Se o layout padrão não é encontrado no diretório que irá olhar para de módulos como antes para o "layout.phtml" dentro "Aplicação / modules // views / scripts".

Se o layout não é encontrado dentro de um módulo que irá carregar o layout do módulo padrão.

Tão simples quanto isso!

Se você precisar de algum trabalho extra com o seu modelo você pode adicionar um plugin para isso, por exemplo:

resources.layout.pluginClass = "YourLibrary_Controller_Plugin_Layout"

e fazer algum material extra dentro dela.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top