OpenCart 2.2.0.0 中类别和产品页面的特定模板

Specific template for category and product page in OpenCart 2.2.0.0

我正在使用 OpenCart 版本 2.2.0.0 并尝试为每个类别和产品页面设置不同的模板。在线搜索我发现以下代码:

if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/category_' . $category_id . '.tpl')) {
    $this->template = $this->config->get('config_template') . '/template/product/category_' . $category_id . '.tpl';
} elseif (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/category.tpl')) {
    $this->template = $this->config->get('config_template') . '/template/product/category.tpl';
} else {
    $this->template = 'default/template/product/category.tpl';
}

此代码适用于旧版本的 OpenCart,但在新版本中我没有在 catalog/controller/product/category.php 文件

中找到类似的代码结构

如何在 OpenCart 2.2.0.0 中获得类似的结果?

由于Opencart从2.2改变了它的方法,代码不再有效,你可以这样修改它:

首先我们必须知道哪个主题是活动的,将其名称存储在变量中

$config_theme = $this->config->get('config_theme') == 'theme_default' ? 'default' : $this->config->get('config_theme');

然后我们必须检查是否有专门针对当前类别的文件,例如如果我们在类别 20 上,我们检查 category_20.tpl 是否存在。

if (file_exists(DIR_TEMPLATE . $config_theme . '/template/product/category_' . $category_id . '.tpl')) {

如果找到该文件:

$view = 'product/category_' . $category_id;

如果没有这样的文件,使用原始文件:category.tpl

} else {
    $view = 'product/category';
}

根据上述语句加载选定的视图文件。

$this->response->setOutput($this->load->view($view, $data));

结论:

catalog/controller/product/category.php中找到$this->response->setOutput($this->load->view('product/category', $data));并替换为上面的代码,这里是完整代码:

$config_theme = $this->config->get('config_theme') == 'theme_default' ? 'default' : $this->config->get('config_theme');
if (file_exists(DIR_TEMPLATE . $config_theme . '/template/product/category_' . $category_id . '.tpl')) {
    $view = 'product/category_' . $category_id;
} else {
    $view = 'product/category';
}
$this->response->setOutput($this->load->view($view, $data));

我有 OpenCart 2.2 designedlike 只有商品目录,index.php 有这行:

$application_config = 'catalog';

我在这里找到了负责选择View文件的行(MVC技术):

catalog/controller/event/theme.php

我的主题目录是 'default2' 在这里,我更改路径的模板文件:/index.php?route=product/category&path=69_65 到文件 catalog/view/theme/default2/template/product/category_69_65.tpl

我的代码片段的全部代码是这样的。

<?php
class ControllerEventTheme extends Controller {
    public function index(&$view, &$data) {
        if (!$this->config->get($this->config->get('config_theme') . '_status')) {
            exit('Error: A theme has not been assigned to this store!');
        }
        
        // This is only here for compatibility with old themes.
        if (substr($view, -4) == '.tpl') {
            $view = substr($view, 0, -4);
        }
        
        if ($this->config->get('config_theme') == 'theme_default') {
            $directory = $this->config->get('theme_default_directory');
        } else {
            $directory = $this->config->get('config_theme');
        }

        if (is_file(DIR_TEMPLATE . $directory . '/template/' . $view . '.tpl')) {
            $view = $directory . '/template/' . $view;
            //my snippet starts
            if ($view=='default2/template/product/category') {
                $url=$data['breadcrumbs'][count($data['breadcrumbs'])-1]['href'];
                if (substr($url, -5)=='69_65') {
                    if (is_file(DIR_TEMPLATE . $directory . '/template/product/category_69_65.tpl')) {
                        $view = $directory . '/template/product/category_69_65';
                    }
                }
            }
        //end of my snippet
        } else {
            $view = 'default/template/' . $view;
        }           
    }
}

而这个文件是对 uri product/catalog & path=69_65:

的反应

目录/视图/主题/default2/模板/product/category_69_65.tpl