2011-09-26 47 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中注册它。