2011-09-26 52 views
1

啓用完整頁面緩存時是否可以獲取當前類別? 在這種情況下不執行目錄控制器,因此註冊表(current_category密鑰)爲空。我能得到的是根類別使用FPC啓用當前類別

感謝

+1

你將需要在這裏提供更多的信息。你正在創建自己的模塊嗎?你在寫控制器嗎?一個模型?模板?你壓倒一切嗎? – jprofitt

+0

@jproffit我正在寫一個隨機產品列表模塊的模塊,它不受FPC實施打孔的影響。需要獲取當前類別以獲取此類別產品。考慮從URL獲取該信息,但也許有更好的方法。謝謝 – Zifius

回答

3

由於可能的解決辦法之一是讓通過給定的網址分類ID。你有url的表格重寫,你有請求字符串。

// Try to get category id directly from request 
    if (Mage::app()->getRequest()->getParam('id')) { 
     return Mage::app()->getRequest()->getParam('id'); 
    } 
    // Try to get category id from request by rewrite request path 
    $aliases = Mage::app()->getRequest()->getAliases(); 
    if ($aliases && is_array($aliases) && !empty($aliases) && $aliases['rewrite_request_path']) { 
     $urlRewrite = Mage::getModel('core/url_rewrite')->loadByRequestPath($aliases['rewrite_request_path']); 
     if ($urlRewrite && $urlRewrite->getId()) { 
      return $urlRewrite->getCategoryId(); 
     } 
    } 

可能是不是很漂亮的解決方案,但它對我來說很好。

+0

謝謝你的回覆,我在Magento重寫方面不是很有經驗,請你解釋一下:'url_rewrite'模型沒有被代碼加載,也許我在我的設置中缺少某些東西?對於可能起作用的第一種情況? – Zifius

+0

如果沒有應用url重寫,並且請求看起來像http:// yourdomain/catalog/category/view/id/32432/... – azakolyukin

+0

,則第一個條件將起作用。要了解它的工作原理,您可以嘗試研究文件應用程序/代碼/core/Mage/Core/Model/Url/Rewrite.php – azakolyukin

1

您需要通過層得到它:

$layer = Mage::getSingleton('catalog/layer'); 
$_category = $layer->getCurrentCategory(); 
$currentCategoryId= $_category->getId(); 

問候, 肯尼

+0

getCurrentCategory()方法也適用於註冊表,這裏不是一個選項。現在我從session中獲得最後一個類別$ categoryId = Mage :: getSingleton('catalog/session') - > getLastVisitedCategoryId(); – Zifius

0

您是打孔的塊如下所示:

我寫隨機產品列表塊模塊,它不是 受FPC通過實施打孔

這意味着您的塊是Magento的精簡版(請參閱applyWithoutApp()方法),因此要從註冊表中訪問current_category,您需要在您的打孔模塊的Container中註冊它。