Pregunta

la estructura de directorios que estoy tratando de lograr sería 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)

pero no puedo entender cómo dejar que Zend encuentre mi layout.phtml en cada uno de mis módulos.

en mi bootstrap tengo:

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);
}

¿Dónde me estoy equivocando?

Actualización:

No he visto esto en mucho tiempo, por lo que la solución aceptada puede no estar actualizada. Si alguien quiere publicar una solución más actualizada para esta pregunta (es decir, ZF 1.8+), ¡hágalo! Sería útil para otras personas que buscan una solución para esto.

¿Fue útil?

Solución

Deberías consultar Por módulo Zend_Layout , en este artículo, el autor cubre exactamente lo que eres tratando de lograr Su metodología es escribir un complemento para el controlador frontal que maneja el registro de diseño.

Otros consejos

Uso de Zend Framework 1.12 (no lo he probado en versiones anteriores): ¡funciona de inmediato!

Por lo general, uso application.ini para configurar las cosas, así como para habilitar diseños:

resources.layout.layout = "layout"

... o como se llame el diseño predeterminado. Como " layoutPath " no se ha definido Zend_Layout analizará " Aplicación / módulos // vistas / scripts " para un archivo llamado " layout.phtml "

Si usa la herramienta zend, comenzará los diseños con la siguiente línea:

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

Esto también está bien, simplemente elimine el directorio o evite crear el " layout.phtml " ;. Si el diseño predeterminado no se encuentra en ese directorio, buscará en los módulos como antes para el " layout.phtml " dentro de "Aplicación / módulos // vistas / scripts".

Si el diseño no se encuentra dentro de un módulo, cargará el diseño del módulo predeterminado.

¡Tan simple como eso!

Si necesita trabajo adicional con su plantilla, puede agregarle un complemento, por ejemplo:

resources.layout.pluginClass = "YourLibrary_Controller_Plugin_Layout"

y hacer algunas cosas adicionales dentro de él.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top