Versucht, Holen Sie sich dynamische Inhalte Loch gestanzt, durch Magento Full Page Cache

Ich bin mit Magento Enterprise 1.10.1.1 und brauchen, um einige dynamische Inhalte auf unseren Produkt-Seiten. Ich bin das einfügen der aktuellen Uhrzeit in einem block, um schnell zu sehen, ob es funktioniert, aber kann nicht scheinen, um durch full-page-cache.

Habe ich versucht eine Vielzahl von Implementierungen finden Sie hier:

http://tweetorials.tumblr.com/post/10160075026/ee-full-page-cache-hole-punching
http://oggettoweb.com/blog/customizations-compatible-magento-full-page-cache/
http://magentophp.blogspot.com/2011/02/magento-enterprise-full-page-caching.html

Lösungen, Gedanken, Kommentare, Ratschläge willkommen.

hier ist mein code:

app/code/local/Fido/Example/etc/config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Fido_Example>
            <version>0.1.0</version>
        </Fido_Example>
    </modules>
    <global>
        <blocks>
            <fido_example>
                <class>Fido_Example_Block</class>
            </fido_example>     
        </blocks>
    </global>
</config>

app/code/local/Fido/Example/etc/cache.xml

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <placeholders>
        <fido_example>
            <block>fido_example/view</block>
            <name>example</name>
            <placeholder>CACHE_TEST</placeholder>
            <container>Fido_Example_Model_Container_Cachetest</container>
            <cache_lifetime>86400</cache_lifetime>
        </fido_example>
    </placeholders>
</config>

app/code/local/Fido/Example/Block/View.php

<?php

class Fido_Example_Block_View extends Mage_Core_Block_Template
{
    private $message;
    private $att;

    protected function createMessage($msg) {
        $this->message = $msg;
    }

    public function receiveMessage() {
        if($this->message != '') {
            return $this->message;
        } 
        else {
            $this->createMessage('Hello World');
            return $this->message;
        }
    }

    protected function _toHtml() {
        $html = parent::_toHtml();

        if($this->att = $this->getMyCustom() && $this->getMyCustom() != '') {
            $html .= '<br />'.$this->att;
        } 
        else {

        $now = date('m-d-Y h:i:s A');
        $html .= $now;
        $html .= '<br />' ;
        }

        return $html;
    }

}

app/code/local/Fido/Example/Model/Container/Cachetest.php

<?php

class Fido_Example_Model_Container_Cachetest extends Enterprise_PageCache_Model_Container_Abstract { 

    protected function _getCacheId()
    {
        return 'HOMEPAGE_PRODUCTS' . md5($this->_placeholder->getAttribute('cache_id') . $this->_getIdentifier());
    }

    protected function _renderBlock()
    {
        $blockClass = $this->_placeholder->getAttribute('block');
        $template = $this->_placeholder->getAttribute('template');

        $block = new $blockClass;
        $block->setTemplate($template);
        return $block->toHtml();
    }

protected function _saveCache($data, $id, $tags = array(), $lifetime = null) { return false; }  

}

app/design/frontend/enterprise/[mytheme]/template/Beispiel/anzeigen.phtml

<?php echo $this->receiveMessage() ?>

Ausschnitt aus app/design/frontend/enterprise/[mytheme]/layout/catalog.xml

<reference name="content">
    <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
            <block type="fido_example/view" name="product.info.example"  as="example" template="example/view.phtml" />
  • Sie zeigen nicht, code Fido_Example_Model_Container_Cachetest::_getIdentifier(). Wenn Sie zu Lesen [oggettoweb.com/blog/... gründlich, Sie wissen, dass die Ausgabe des Blocks mit Lochung zwischengespeichert zu. Im Beispiel auf [oggettoweb.com/blog/... zwischengespeichert wird für jeden Kunden. Sie können versuchen, zurück microtime() oder so etwas aus _getIdentifier() machen es einzigartig. Nicht sicher, diese Idee ist jedoch gut.
  • Vielen Dank für die Beratung Zyava, aber das hat nicht den trick tun - noch immer zwischengespeichert. (btw, ich versehentlich entfernt, von Cachetest.php
  • Sind Sie sicher, dass 'HOMEPAGE_PRODUCTS' . md5($this->_placeholder->getAttribute('cache_id') . $this->_getIdentifier()) ist immer ein neuer Wert?
  • Zyava - ich war mir nicht sicher, also legte ich, dass microtime() und da war keine Veränderung
InformationsquelleAutor rlflow | 2011-11-14
Schreibe einen Kommentar