php - Detectar página de inicio en Magento.phtml que funcionará con la memoria caché BLOCK_HTML habilitada
magento-1.4 (5)
Estas son algunas de las fuentes que le gustaría leer sobre el bloqueo de la memoria caché HTML:
Sería mejor para el rendimiento no deshabilitar el bloque por completo, sino especificar la clave de caché de una manera inteligente. Entonces, esto es lo que debes hacer:
- Primero, especifique un bloque personalizado para su archivo .phtml. Si no sabe qué es Block, o cómo asignar un bloque a un archivo de plantilla, aquí está la referencia al blog de Alan Storm.
Segundo: tendrás que agregar el siguiente código a un constructor de bloques:
$this->addData(array( ''cache_lifetime'' => 3600, ''cache_tags'' => array(Mage_Cms_Model_Block::CACHE_TAG), ''cache_key'' => $this->getCacheKey(), ));
Como ve, usé aquí el método
getCacheKey
de la clase abstractaMage_Core_Block_Abstract
.Ahora necesita asegurarse de que cache_key funcione para su lógica. El
Mage_Core_Block_Abstract::getCacheKey
utiliza otro método, que en realidad debería especificar los valores únicos para nuestro bloque -getCacheKeyInfo
. Debes redefinirlo usando tu lógica:public function getCacheKeyInfo() { $isHomepage = 0; if (Mage::getSingleton(''cms/page'')->getIdentifier() == ''home'') { $isHomepage = 1; } return array( $this->getNameInLayout(), $isHomepage, ); }
Ahora puede estar seguro de que la clave de la memoria caché para la Página de inicio diferirá de la clave de la memoria caché en todas sus otras páginas, y su caché devolverá información válida.
He intentado los siguientes dos métodos en catalog / navigation / vert_nav.phtml para agregar o suprimir contenido específico de la página de inicio:
if($this->getUrl('''') == $this->getUrl(''*/*/*'', array(''_current''=>true, ''_use_rewrite''=>true))):
o
if(
Mage::getSingleton(''cms/page'')->getIdentifier() == ''home'' &&
Mage::app()->getFrontController()->getRequest()->getRouteName() == ''cms''
) :
Ambos funcionan bien, sin embargo, cuando se activa BLOCK_HTML caché, funciona al principio, luego de un tiempo la página de inicio comienza a mostrar contenido que está destinado solo para otras páginas (después de una cláusula else que uso más abajo). Cuando desactivo BLOCK_HTML, se comporta como se esperaba.
Curiosamente, he usado el mismo código (el primero) en la página / html / head.phtml (para la página de inicio específica javascript / css), y en la página / html / header.phtml (para un encabezado que solo debería aparecer en la página de inicio), y funcionan bien incluso cuando BLOCK_HTML está activado.
(Magento 1.4.1.1)
La respuesta anterior es la mejor solución.
Simplemente puede copiar la aplicación / code / core / Mage / Catalog / Block / Nagivation.php
a:
app / code / local / Mage / Catalog / Block / Nagivation.php
y luego cambie el método getCacheKeyInfo () como se describe arriba.
/**
* Get Key pieces for caching block content
*
* @return array
*/
public function getCacheKeyInfo()
{
$shortCacheId = array(
''CATALOG_NAVIGATION'',
Mage::app()->getStore()->getId(),
Mage::getDesign()->getPackageName(),
Mage::getDesign()->getTheme(''template''),
Mage::getSingleton(''customer/session'')->getCustomerGroupId(),
''template'' => $this->getTemplate(),
''name'' => $this->getNameInLayout(),
$this->getCurrenCategoryKey(),
// Your logic to make home/none home have different cache keys
Mage::getSingleton(''cms/page'')->getIdentifier() == ''home'' ? ''1'' : ''0''
);
$cacheId = $shortCacheId;
$shortCacheId = array_values($shortCacheId);
$shortCacheId = implode(''|'', $shortCacheId);
$shortCacheId = md5($shortCacheId);
$cacheId[''category_path''] = $this->getCurrenCategoryKey();
$cacheId[''short_cache_id''] = $shortCacheId;
return $cacheId;
}
Esto hará que la clave de caché sea diferente para las páginas de la página principal / sin página de inicio, que almacenará en caché dos copias, en lugar de almacenar en caché una copia de plantilla única para usar en todas las páginas.
realmente la mejor manera es:
1 Actualice su diseño XML (local.xml o theme custom.xml)
<!-- CUSTOM: ADD NEW FOOTER BLOCK AT BOTTOM FOR PARTNERS -->
<cms_index_index>
<reference name="footer">
<block type="cms/block" name="footer_block_extra">
<action method="setBlockId"><block_id>footer_block_extra</block_id></action>
</block>
</reference>
</cms_index_index>
y el paso 2 agrega este código donde quieras el bloque en tu plantilla phtml (a menudo /page/html/footer.phtml)
<!-- SNH CUSTOM -->
<div class="grid_12">
<?php echo $this->getBlockHtml(''footer_block_extra''); ?>
</div>
y el paso 3 crea un nuevo bloque de CMS en tu back-end con el ID "footer_block_extra" ... y agrega tu contenido.
Solo para agregar a estas respuestas sugiriendo verificar si el identificador de página actual es igual a "inicio".
Definitivamente sería más seguro compararlo con Mage::getStoreConfig(''web/default/cms_home_page'')
.
Usamos
<!-- SNH CUSTOM -->
$route = Mage::app()->getFrontController()->getRequest()->getRouteName();
$action = Mage::app()->getFrontController()->getRequest()->getActionName();
if($route == ''cms'' && $action == ''index''):
<div class="grid_12">
echo $this->getChildHtml(''shopper_footer_partners'');
</div>
endif;