No se puede recuperar el bloque del diseño cuando el caché de página completa está habilitado

magento.stackexchange https://magento.stackexchange.com/questions/14130

  •  16-10-2019
  •  | 
  •  

Pregunta

El problema es que no puedo recuperar ningún bloque de diseño o bloque infantil desde mi bloque en caché cuando el caché de página completa está habilitado. Tengo los siguientes archivos: 1) Cache.xml

<config>
<placeholders>
    <socialfeed_posts>
        <block>onepica_socialfeed/country_story</block>
        <name>country_story</name>
        <placeholder>SOCIAL_COUNTRY_STORY</placeholder>
        <container>OnePica_SocialFeed_Model_Cache_Container_Country_Story</container>
        <cache_life>0</cache_life>
    </socialfeed_posts>
</placeholders>
</config>

2) OnePica_SocialFeed_Model_Cache_Container_Country_story.php

class OnePica_SocialFeed_Model_Cache_Container_Country_Story extendsEnterprise_PageCache_Model_Container_Abstract
{
protected function _renderBlock()
{
    $blockClass = $this->_placeholder->getAttribute('block');
    $template = $this->_placeholder->getAttribute('template');
    /* @var $block OnePica_SocialFeed_Block_Country_Story */
    /*$block = new $blockClass;
    $block->setTemplate($template);
    $layout = Mage::app()->getLayout();
    $block->setLayout($layout);
    return $block->toHtml();
}
}

3) OnePica_SocialFeed_Block_country_story.php

class OnePica_SocialFeed_Block_Country_Story extends Mage_Core_Block_Template 
{
...
public function getPager()
{
    if (null === $this->_pager) {
        $this->_pager = $this->getLayout()->getBlock('social_feed_pager');
    }
    return $this;
}
...
}

4) Layout.xml

<reference name="root">
        <action method="setTemplate"><template>page/1column.phtml</template></action>
        <block type="onepica_socialfeed/html_pager" name="social_feed_pager" template="onepica/socialfeed/page/html/pager.phtml" />
<!-- Tried as a simple block of layout-->
    </reference>
    <reference name="content">
        <block type="onepica_socialfeed/country_story" name="country_story" as="country_story" template="onepica/socialfeed/country/story.phtml" >
            <block type="onepica_socialfeed/html_pager" name="social_feed_pager" template="onepica/socialfeed/page/html/pager.phtml" />
    <!-- Tried as a CHILD block of my cached block-->
        </block>
</reference>

Cuando la carga de la página al principio todo sea correcto, pero cuando intenté recargar la página por segunda vez, la página está abrasada, debido a $ this-> getLayout ()-> getBlock ('social_feed_pager') fila. No quiero crear el bloque 'social_feed_pager' en mi bloque usando $ this-> getLayout ()-> createBlock ('social_feed_pager'). Necesito recuperar el bloque del diseño.

Cualquier ayuda sería muy apreciada. ¡Gracias!

¿Fue útil?

Solución

Parece que su problema es que cache_lifetime de su bloque está configurado en '0'. Eso significa que su bloque no es caché en absoluto y su código se ejecuta durante cada recarga, pero todos los demás bloques están en caché, por lo que no puede obtenerlos como getLayout()->getBlock('any_block'). Intenta configurar

<cache_lifetime>86400</cache_lifetime>

Después de borrar todo el caché.

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