Impossibile recuperare isolato dal layout quando la cache pagina intera è abilitato
-
16-10-2019 - |
Domanda
Il problema è che non posso recuperare qualsiasi blocco dal layout o il blocco bambino da mio blocco nella cache quando la cache piena pagina è attivata. Ho prossimi file: 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>
Quando il caricamento della pagina in un primo momento tutto sia giusto, ma quando ho provato ricaricare la pagina seconda volta, la pagina viene crached, a causa di $ this-> getLayout () -> getBlock ( 'social_feed_pager') di fila . Non voglio creare block 'social_feed_pager' nel mio blocco utilizzando $ this-> getLayout () -> createBlock ( 'social_feed_pager'). Ho bisogno recuperare isolato dal layout.
Qualsiasi aiuto sarebbe molto apprezzato. Grazie!
Soluzione
Sembra che il tuo problema è che cache_lifetime del blocco è impostato su '0'. Ciò significa che il blocco non è la cache a tutti e le sue piste di codice nel corso di ogni ricarica, ma tutti gli altri blocchi sono nella cache in modo non è possibile ottenere loro come getLayout()->getBlock('any_block')
.
Prova a impostare
<cache_lifetime>86400</cache_lifetime>
Dopo cancellare tutta la cache.