2012-02-05 1 views
5

Tôi đang làm việc trên một trang web Magento 1.6, trong đó có các xml sau bên CMS lĩnh vực trang chủ của "Layout Update XML":Không thể ngăn chặn Magento từ Caching Block

<reference name="content"> 
    <block type="catalog/navigation" name="catalog.category.home" as="homecategory" template="catalog/category/homecategory.phtml" /> 
</reference> 

Như mẫu hiển thị các danh mục ngẫu nhiên, tôi muốn vô hiệu hóa bộ nhớ đệm cho khối này. Để làm như vậy, tôi đã cố gắng sử dụng getChildHtml ('sub-block-mẫu', false) như sau:

(homecategory có $ this-> getChildHtml ('random_categories', false) trong mẫu của nó)

<reference name="content"> 
    <block type="catalog/navigation" name="catalog.category.home" as="homecategory" useCache="false" template="catalog/category/homecategory.phtml"> 
     <block type="catalog/navigation" name="catalog.category.home.randcats" as="random_categories" useCache="false" template="catalog/category/random.phtml" /> 
    </block> 
</reference> 

Vì vậy, bây giờ tôi đang gặp khó khăn, tự hỏi tại sao tôi không thể ngăn chặn bộ nhớ đệm của khối đó, mặc dù sử dụng đối số 'sai'.

+0

Không có nội dung nào như thuộc tính 'useCache = "false"'. –

+0

Bạn đã tắt bộ nhớ cache Magento trong Bảng điều khiển quản trị> Hệ thống> Quản lý bộ nhớ cache? – sondoha

+0

Bạn nên thực hiện đục lỗ bộ nhớ cache trang đầy đủ cho khối của bạn. Xem hướng dẫn này [hướng dẫn này] (http://tweetorials.tumblr.com/post/10160075026/ee-full-page-cache-hole-punching) và [câu hỏi này trên SO] (http://stackoverflow.com/ câu hỏi/8126548/cố gắng-get-động-nội dung-lỗ-punch-thông qua-magentos-đầy-trang-cache). – Zyava

Trả lời

3

Bạn đã thử ép nó bằng cách tạo một loại khối tùy chỉnh mới và quá tải các chức năng bộ nhớ đệm? Mở rộng các lớp Mage_Catalog_Block_Product_List_Random và tạo ra một sản phẩm nào pseudo-constructor:

protected function _construct() {} 

này sẽ ngăn chặn kế thừa thêm thẻ nhớ cache, suốt đời, và siêu dữ liệu khác để đối tượng khối. Sau đó, bạn có thể quá tải thông tin khóa bộ nhớ cache cũng như vậy mà nó không sử dụng bất kỳ khối bộ nhớ cache hiện có (hoặc kích hoạt). Ví dụ:

public function getCacheKeyInfo() 
{ 
    return array(
     'MY_CACHE_TAG', 
     Mage::app()->getStore()->getId(), 
     (int)Mage::app()->getStore()->isCurrentlySecure(), 
     Mage::getDesign()->getPackageName(), 
     Mage::getDesign()->getTheme('template') 
    ); 
} 
+0

Cảm ơn bạn, tôi sẽ thử điều đó. Mặc dù tôi vẫn uống rượu từ firehose, vì vậy việc tạo ra khối tùy chỉnh này có thể mất một số thử nghiệm và lỗi. – Excalibur

+1

Có thể thử xem http://inchoo.net/ecommerce/magento/magento-block-caching/ và xem liệu điều đó có giúp bạn trên đường đi không? – Jona

+1

Jona, cảm ơn bạn đã liên kết đến bài viết đó. Tôi nhận thấy nơi mà nó chỉ ra rằng khi '$ this-> addData (mảng ('cache_lifetime' => 'false'))' là trường hợp (là mặc định cho Danh mục/Điều hướng, điều này có nghĩa là bộ nhớ cache làm mới tự động 2 giờ một lần (7200 giây).Điều này là đủ tốt cho các yêu cầu của tôi, và có lẽ tốt hơn là không có bộ nhớ đệm vì lý do hiệu suất. – Excalibur

5

Tôi cũng gặp vấn đề tương tự. Tôi tin rằng nó phải làm một cái gì đó với loại khối của loại = "danh mục/chuyển hướng". Tôi đã thấy việc vô hiệu hóa bộ nhớ đệm hoạt động trên các loại khối khác. Đây là một sửa chữa cho loại hình khối này và vấn đề này:

thay đổi tập tin phtml: đảm bảo param thứ hai là sai

echo $this->getChildHtml('topCategoriesList',false); 

tập tin xml thay đổi: Thêm những hành động này đến khối

<block type="catalog/navigation" name="topCategoriesList" as="topCategoriesList" template="catalog/navigation/categorylist.phtml"> 
    <action method="unsetData"><key>cache_lifetime</key></action> 
    <action method="unsetData"><key>cache_tags</key></action> 
</block> 
+1

Nó làm việc cho tôi chỉ sử dụng XML. – user3409662