2011-02-18 8 views
5

¿Cómo enlaza Zend $ this-> layout() -> content con scripts/index/index.phtml?Flujo básico de páginas en Zend Framework PHP

Creo que estoy fallando en entender los conceptos básicos de cómo se supone que las páginas se mantienen juntas. He visto el inicio rápido en el sitio zend pero es demasiado simplista.

Respuesta

1

Lo que se muestra en su vista (el archivo PHTML) se guarda en la variable de contenido. Eso se puede repetir en la plantilla de diseño (otro archivo phtml - preferiblemente layout.phtml). Y ese es el 'producto final' :) (o tal vez desea especificar su pregunta más).

4

Así como Tomáš Fejfar explicó que así es como funciona el $this->layout()->content. Sin embargo, lo interesante es que el "contenido" no es solo una variable en el diseño. De hecho, 'contenido' es una clave en un marcador de posición de vista llamado 'Zend_Layout'. Por esta razón, los siguientes fragmentos son equivalentes a echo $this->layout()->content en su layout.phtml:

$placeHolder = Zend_View_Helper_Placeholder_Registry::getRegistry()->getContainer('Zend_Layout'); 
echo $placeHolder['content']; 

// or 

echo $this->placeholder('Zend_Layout'); 

// or 

echo $this->placeholder('Zend_Layout')->content; 

Esto puede ser muy útil. Lo que quiero decir es que puedes definir algunos lugares en tu layout.phtml que mostrarán los valores de tus claves personalizadas del marcador de posición 'Zend_Layout'. Por ejemplo, imagine que le gustaría tener un layout.phtml y desea poder modificar el texto en su pie de página. Usted puede hacer esto mediante la definición de layout.phtml que contendrá lo siguiente en el pie de página:

<div id="footer"> 
<?php echo $this->layout()->myFooterText; ?> 
</div> 

usted podría fijar un valor por defecto de este pie de página en, por ejemplo, su Bootstrap.php. Sin embargo, si lo desea, puede modificar este texto en sus acciones de la siguiente manera;

$this->view->placeholder('Zend_Layout')->myFooterText = 'Some text only for this action'; 

Eso es lo que quería agregar. Por supuesto, uno podría pensar en otros escenarios, porque $this->view->placeholder('Zend_Layout') es una instancia de Zend_View_Helper_Placeholder_Container, por lo que podría hacer otras cosas con el marcador de posición Zend_Layout.

EDITAR: Clave 'contenido' es un nombre predeterminado. Puede cambiar a otra cosa utilizando el método de setContentKey Zend_Layout, por ejemplo .:

protected function _initSetNewLayoutContentKey() { 

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

    // instead of 'content' use 'viewoutput' 
    $layout->setContentKey('viewoutput'); 
} 

Con este cambio, en su layout.phtml que usaría echo $this->layout()->viewoutput; en lugar de echo $this->layout()->content;.

+0

'content' es el nombre del segmento de respuesta predeterminado, todos los cuales están disponibles para el asistente de vista de diseño. También puede obtenerlos del objeto de respuesta en sí. Los segmentos de respuesta son, desafortunadamente, una característica poco documentada de ZF – Phil

+0

@Phil Brown. Lo que quiero decir es que 'contenido' es una clave en el marcador de posición Zend_Layout y Zend_Layout lo está usando para almacenar el resultado de las acciones. Puede verificar fácilmente las claves del marcador de posición de la siguiente manera: var_dump ($ this-> placeholder ('Zend_Layout') -> getKeys()); – Marcin

0

El diseño no es más que un complemento de controlador que crea su propia vista después de que se haya realizado todo el envío para que pueda tomar el objeto de respuesta final y establecer la propiedad de contenido de su vista en el cuerpo de respuesta.

Así que, básicamente, en su caso, el búfer de index.phtml, se almacena primero en el objeto de respuesta, luego el diseño posterior toma este valor y lo cambia a su propio búfer de vista.