Buscar..


Observaciones

Personalizar la funcionalidad del núcleo con temas

Los temas tienen archivos de diseño que, entre otras cosas, se pueden usar para cambiar los bloques que aparecen en la página. La plantilla de bloque también se puede cambiar y se pueden llamar diferentes métodos.

Diseños a nivel de tienda

Los temas estructurados jerárquicos de Magento significa que un tema base puede extenderse y asignarse a nivel de tienda.

Registro de temas personalizados

Los temas se pueden configurar de tres maneras:

  1. Por tienda en Sistema> Configuración> Diseño.
  2. Cambio de diseño con límites de tiempo Sistema> Diseño.
  3. Las excepciones de tema también se pueden establecer en una categoría y nivel de producto.

Paquete versus tema

Un paquete tiene múltiples temas. Cada uno de los temas en un paquete se hereda del tema predeterminado dentro de un paquete.

Diseño alternativo

El procedimiento de reserva de tema para localizar archivos de plantillas es:

  1. {paquete} / {tema}
  2. {paquete} / predeterminado
  3. base / predeterminado

Para agregar más directorios al mecanismo de reserva del tema, es necesario volver a escribir el método Mage_Core_Model_Design_Package :: getFilename

Para el área de administración, el respaldo es predeterminado / predeterminado.

Plantilla y rutas de diseño

Bloques

Los bloques se utilizan para la salida. El bloque raíz es el padre de todos los bloques y es de tipo Mage_Page_Block_Html.

Los bloques Mage_Core_Block_Template usan archivos de plantilla para representar contenido. El nombre del archivo de la plantilla se establece dentro de setTemplate () o addData ('plantilla') con rutas relativas.

Las plantillas son solo piezas de PHP incluidas en Mage_Core_Block_Template. Por lo tanto $ esto en una plantilla se refiere al bloque.

Mage_Core_Block_Template utiliza un búfer antes de incluir una plantilla para evitar la salida prematura.

El método Mage_Core_Model_Layout :: createBlock crea instancias de bloques.

La clase Mage_Core_Model_Layout_Update considera qué bloques deben crearse para cada página mirando los controladores de diseño.

Todos los bloques de salida se representan, por ejemplo, llamando a HTML (), que a su vez puede elegir representar a sus hijos.

Los bloques Text y Text_List representan automáticamente su contenido.

Hay dos eventos que se activan alrededor de la representación de bloques que se pueden usar para modificar el bloque antes y después de representar el HTML:

core_block_abstract_to_html_before core_block_abstract_to_html_after Un bloque hijo solo se procesará automáticamente si es de la clase Mage_Core_Block_Textlist de lo contrario, se deberá llamar al método getChildHtml.

Se puede acceder a las instancias de bloques a través del diseño, por ejemplo, Mage :: app () -> getLayout () y $ controller-> getLayout (). La salida del bloque es controlada por la función _toHtml ().

Las plantillas se representan mediante los métodos renderView () / fetchView () dentro de un bloque de plantillas. El búfer de salida se puede desactivar con $ layout-> setDirectOutput.

Es posible agregar un bloque al diseño actual, pero se debe hacer antes de llamar al método renderLayout ().

Diseño XML

<reference>
  -edit a block
<block>
  - define a block 
<action>
  - call method on a block
<update>
  - include nodes from another handle.

Los archivos de diseño se pueden registrar en config.xml:

<config>
    <{area}>
        <layout>
            <updates>
                <{name}>
                    <file>{filepath}</file>
                </{name}>
            </updates>
        </layout>
    </{area}>
</config>

La salida de la página se puede personalizar de las siguientes maneras:

  • Cambios de plantilla
  • Cambios de diseño
  • Anulando bloques
  • Observadores Las variables en bloques se pueden establecer de las siguientes maneras:
  • Diseño -A través de acciones o atributos
  • Controlador - $ this-getLayout () -> getBlock ()
  • Bloques secundarios - $ this-> getChild ()
  • Otro -Mage :: app () -> getLayout ()

Activos de bloque de cabeza

Los recursos de JavaScript y CSS se manejan en el bloque Mage_Page_Block_Html_head. Este bloque maneja la fusión de activos en un solo archivo para minimizar las solicitudes HTTP. El archivo combinado se basa en el tiempo de edición de los archivos de origen.

Al fusionar CSS, se llama a una función de devolución de llamada en Mage_Core_Model_Design_Package para actualizar las directivas @import o url () con las URL correctas

Diferentes mecanismos para desactivar la salida de bloque.

  • Si la respuesta ya se ha creado y establecido en el objeto de respuesta fuera del proceso de representación normal (por ejemplo, en un observador), la marca 'no-renderLayout' se puede establecer en el controlador de acción usando
Mage::app()->getFrontController()->getAction()->setFlag('','no-renderLayout');
  • Esto evita que renderLayout() procese los bloques de salida.
  • Lo mismo se puede lograr llamando a setNoRender (true) en el controlador frontal: Mage::app()->getFrontController()->setNoRender(true);
  • Establecer el isDispatched() en el objeto de respuesta podría ser más eficiente para lograr un efecto similar.

diferentes tipos de bloques

  • Mage_Core_Block_Template
  • Mage_Core_Block_Text_List
  • Mage_Core_Block_Messages
  • Mage_Core_Block_Text_Tag
  • Mage_Core_Block_Text
  • Mage_Page_Block_Template_Links Todos los bloques son bloques estructurales o Todos los bloques son bloques estructurales o bloques de contenido. Ejemplo:
  • core / text_list

Ejemplo de un bloque estructural .

No utiliza plantillas; simplemente se utiliza para generar el contenido de todos sus bloques secundarios uno tras otro.

  • núcleo / plantilla

Ejemplo de un bloque de contenido .

La salida de este tipo de bloque depende de la plantilla asignada. Sus bloques secundarios se envían dentro de su plantilla a través del método getChildHtml ('block_name'). Ejemplo: core / text_list - Ejemplo de un bloque estructural. No utiliza plantillas; simplemente se utiliza para generar el contenido de todos sus bloques secundarios uno tras otro. núcleo / plantilla - Ejemplo de un bloque de contenido. La salida de este tipo de bloque depende de la plantilla asignada. Sus bloques secundarios se envían dentro de su plantilla a través del método getChildHtml ('block_name').

Se puede acceder a las instancias de bloque desde el controlador

Desde un controlador de acción:

$this->getLayout()->getBlock('head')->getTemplate();

/**
* Get specified tab grid
*/
public function gridOnlyAction()
{
$this->_initProduct();
$this->getResponse()->setBody(
$this->getLayout()->createBlock('adminhtml/catalog_product_edit_tab_' .
$this->getRequest()->gerParam('gridOnlyBlock')
)
->toHtml()
);
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow