No se puede recuperar el bloque del diseño cuando el caché de página completa está habilitado
-
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!
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é.