Opencart 3限制类别路径

时间:2019-02-20 03:17:53

标签: opencart-3

我正在尝试将类别路径限制为仅4个级别,并且在进入4个级别后不让目录显示任何子类别。我已在产品/类别控制器中将零件代码更改为以下代码,但它似乎没有更新页面。

$parts = explode('_', (string)$this->request->get['path']);

        //print_r($parts);
        echo "<script>console.log( 'Debug Objects: here21' );</script>";

        if(count($parts) < 4){
            echo "<script>console.log( 'Debug Objects: here2' );</script>";

        $category_id = (int)array_pop($parts);

        foreach ($parts as $path_id) {
            if (!$path) {
                $path = (int)$path_id;
            } else {
                $path .= '_' . (int)$path_id;
            }
                $category_info = $this->model_catalog_category->getCategory($path_id);

            if ($category_info) {
                $data['breadcrumbs'][] = array(
                    'text' => $category_info['name'],
                    'href' => $this->url->link('product/category', 'path=' . $path . $url)
                );
            }
        }
        }
    } else {
        $category_id = 0;
    }

我已经清除了仪表板中的缓存,也清除了system\storage\cache文件夹,但仍未更新。任何帮助表示赞赏。谢谢

1 个答案:

答案 0 :(得分:0)

因此,如果我正确地理解了任务,则希望不要出现这样的面包屑

home > category 1 > sub category 2 > sub category 3 > sub category 4 > sub cateogry 5

看起来像这样

home > category 1 > sub category 2 > sub category 3 > sub category 5 

是这样,那么解决方案非常简单:

$parts = explode('_', (string)$this->request->get['path']);

$category_id = (int)array_pop($parts);

//add this code - it will slice the parts array to only 3 items, leaving the 4th as the current category_id
$parts = array_slice($parts, 0, 3); 

foreach ($parts as $path_id) {

如果您不想看到最后一个面包屑项目,则需要向下滚动到第103行以找到此代码

// Set the last category breadcrumb
$data['breadcrumbs'][] = array(
    'text' => $category_info['name'],
    'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'])
);

您可以计算部件数组中的总项目数,并决定是否显示此面包屑。随时提出问题,我将相应地纠正我的答案。


我不会删除第一个答案,因为它可能会对某人有所帮助。但是这里是从作者那里获得更多细节之后的答案。

因此,如果您希望限制精细搜索以使其不显示在第四级和以下级别,则需要执行两个步骤:

  1. 计算水平。 在第67行上添加
$level = count($parts);
  1. 当级别超出限制时添加if语句。 在第139行上替换
$results = $this->model_catalog_category->getCategories($category_id);

if($level < 4){
    $results = $this->model_catalog_category->getCategories($category_id);
}else{
    $results = array();
}