2012-09-13 16 views
6

He probado los dos métodos siguientes en el catálogo/navegación/vert_nav.phtml añadir o suprimir contenidos específicos a la página principal:Detectar la página de inicio de Magento .phtml que trabajará con caché BLOCK_HTML permitido

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 caché BLOCK_HTML está activada, funciona en un primer momento, a continuación, después de un contenido, mientras que la página de inicio comienza a mostrar que está dirigido sólo a otras páginas (después de una cláusula else utilizo menor abajo). Cuando desactivo BLOCK_HTML, se comporta como se esperaba.

Curiosamente, he utilizado 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 debe aparecer en la página de inicio), y funcionan bien incluso cuando BLOCK_HTML está activado.

(Magento 1.4.1.1)

Respuesta

4

La respuesta anterior es la mejor solución.

usted podría simplemente copiar app/código/core/Mago/Catálogo/Bloquear/Nagivation.php

a:

app/código/local/Mago/Catálogo/Bloquear/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 el caché de claves diferentes para las páginas página de inicio/ninguno-página de inicio, que depositará dos copias, en lugar de almacenar en caché una copia única plantilla para su uso en todas las páginas.

+0

Además de mi publicación, hay un pequeño error tipográfico en esta línea: 'Mage :: getSingleton ('cms/page') -> getIdentifier() == 'home'? '1', '0'' - debe ser 'Mage :: getSingleton (' cms/page ') -> getIdentifier() ==' home '? '1': '0'' para que funcione correctamente –

+0

gracias por eso, se tipeó directamente en el navegador sin pruebas :) – Andrew

4

Estas son las fuentes que te gustaría leer acerca de bloque HTML caché:

  1. magento forum
  2. some blog
  3. inchoo blog

Se sería mejor para el rendimiento no deshabilitar el bloque por completo, b Por el contrario, especifique la clave de caché de forma inteligente. Entonces esto es lo que debe hacer:

  1. 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, here's la referencia al blog de Alan Storm.
  2. En segundo lugar - que tendrá que añadir código siguiente a un constructor de bloque:

    $this->addData(array(
        'cache_lifetime' => 3600, 
        'cache_tags'  => array(Mage_Cms_Model_Block::CACHE_TAG), 
        'cache_key'  => $this->getCacheKey(), 
    )); 
    

    Como se ve, que se utiliza aquí el método getCacheKey de la clase abstracta Mage_Core_Block_Abstract.

  3. Ahora debe asegurarse de que cache_key funcione según 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. Es necesario redefinir usando su lógica:

    public function getCacheKeyInfo() 
    { 
        $isHomepage = 0; 
        if (Mage::getSingleton('cms/page')->getIdentifier() == 'home') { 
         $isHomepage = 1; 
        } 
        return array(
         $this->getNameInLayout(), 
         $isHomepage, 
        ); 
    } 
    

    Ahora usted puede estar seguro de que cache para la página inicial diferirá de clave de caché para todas las demás páginas, y la memoria caché devolverá información válida.

+0

Excelente respuesta, gracias. Terminé seleccionando la respuesta de Andrew, ya que era una solución rápida que funcionaba con una plantilla que no había escrito originalmente. – rwired

2

Utilizamos

<!-- 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; 
0

realmente la mejor forma de hacerlo es:

1 actualización de su diseño XML (local.xml o custom.xml tema)

<!-- 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 add este código donde desea el bloque en su plantilla phtml (a menudo /page/html/footer.phtml)

<!-- SNH CUSTOM --> 
<div class="grid_12"> 
    <?php echo $this->getBlockHtml('footer_block_extra'); ?> 
</div> 

y paso 3 crea un nuevo bloque CMS en tu back-end con el ID "footer_block_extra" ... y agrega tu contenido.

2

Solo para agregar a estas respuestas, lo que sugiere comprobar 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').

Cuestiones relacionadas