我想在Magento的分层导航中添加链接类别链接,以便当任何访问者点击分层导航中的类别时,它将使用他们的实际网址打开,而不是在同一页面上过滤结果。
我发现了这个:https://magento.stackexchange.com/questions/9513/layered-navigation-category-link
但这有点令人困惑。有人有任何简单的方法来进行这种修改吗?
我知道如何从每个类别的分层导航中删除类别过滤器列表,现在我想知道如何在分层导航中的过滤器上方添加任何静态块,以便我可以添加每个类别的子类别链接。
请提出一些建议。
答案 0 :(得分:1)
您需要做的就是使用布局句柄<catalog_category_layered />
在左侧添加一个块。并在使用当前类别的phtml文件获取所有子类别。
在local.xml文件中
<layout>
<catalog_category_layered>
<block type="core/template" name="layeredcatnav" template="catalog/navigation/layeredcatnav.phtml"/>
</catalog_category_layered>
</layout>
在catalog/navigation/layeredcatnav.phtml
文件中
<?php $current_cat = Mage::getSingleton('catalog/layer')->getCurrentCategory();
$cat_id = $current_cat->getId(); //current category id
//now get subcategories using this category id
$children = Mage::getModel('catalog/category')->getCategories($cat_id);
foreach ($children as $category) {
echo $category->getName();
echo $category->getURL();
}
?>
注意:未经测试
答案 1 :(得分:0)
通过覆盖getUrl()
Mage_Catalog_Model_Layer_Filter_Item class
方法,可以很容易地修复此问题
Go to /app/code/core/Mage/Catalog/Model/Layer/Filter/Item.php
public function getUrl()
{
$query = array(
$this->getFilter()->getRequestVar()=>$this->getValue(),
Mage::getBlockSingleton('page/html_pager')->getPageVarName() => null // exclude current page from urls);
return Mage::getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true, '_query'=>$query));
}
更改为:
public function getUrl()
{
if($this->getFilter()->getRequestVar() == "cat"){
$category_url = Mage::getModel('catalog/category')->load($this->getValue())->getUrl();
$return = $category_url;
$request = Mage::getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true));
if(strpos($request,'?') !== false ){
$query_string = substr($request,strpos($request,'?'));
}
else{
$query_string = '';
}
if(!empty($query_string)){
$return .= $query_string;
}
return $return;
}
else{
$query = array(
$this->getFilter()->getRequestVar()=>$this->getValue(),
Mage::getBlockSingleton('page/html_pager')->getPageVarName() => null // exclude current page from urls
);
return Mage::getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true, '_query'=>$query));
}
}
如果它适用于您,请复制Item.php文件并将本地文件放在此路径/app/code/local/Mage/Catalog/Model/Layer/Filter/Item.php
答案 2 :(得分:0)
您可能可以为magento 2编写此代码。
对于magento 2,我们在vendor \ magento \ module-catalog \ Model \ Layer \ Filter \ Item.php中具有相同的功能,我们具有getUrl()函数。
原始代码:
public function getUrl()
{
$query = [
$this->getFilter()->getRequestVar() => $this->getValue(),
// exclude current page from urls
$this->_htmlPagerBlock->getPageVarName() => null,
];
return $this->_url->getUrl('*/*/*', ['_current' => true, '_use_rewrite' => true, '_query' => $query]);
}
然后是自定义代码来解决该问题:
public function getUrl()
{
if($this->getFilter()->getRequestVar() == "cat"){
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$category_url = $objectManager->create('Magento\Catalog\Model\Category')->load($this->getValue())->getUrl();
$return = $category_url;
$request = $this->_url->getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true));
if(strpos($request,'?') !== false ){
$query_string = substr($request,strpos($request,'?'));
}
else{
$query_string = '';
}
if(!empty($query_string)){
$return .= $query_string;
}
return $return;
}
else{
$query = array(
$this->getFilter()->getRequestVar()=>$this->getValue(),
$this->_htmlPagerBlock->getPageVarName() => null // exclude current page from urls
);
return $this->_url->getUrl('*/*/*', array('_current'=>true, '_use_rewrite'=>true, '_query'=>$query));
}
}
仅适用于类别部分。就我而言,它工作正常。