在分层导航中添加类别链接的简单方法,以便使用实际网址打开过滤类别

时间:2016-01-18 14:12:11

标签: magento

我想在Magento的分层导航中添加链接类别链接,以便当任何访问者点击分层导航中的类别时,它将使用他们的实际网址打开,而不是在同一页面上过滤结果。

我发现了这个:https://magento.stackexchange.com/questions/9513/layered-navigation-category-link

但这有点令人困惑。有人有任何简单的方法来进行这种修改吗?

我知道如何从每个类别的分层导航中删除类别过滤器列表,现在我想知道如何在分层导航中的过滤器上方添加任何静态块,以便我可以添加每个类别的子类别链接。

请提出一些建议。

3 个答案:

答案 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));
        }
    }

仅适用于类别部分。就我而言,它工作正常。