我希望在空的类别页面(没有可用产品的类别)中显示一个模块(例如:特色产品)。
我一直在寻找解决方案(使用PHP或扩展/ mod),但没有成功。 感谢。
答案 0 :(得分:1)
我从未听说过这样的扩展,我认为没有这种类型的扩展(无论如何,看看extensions store)
基本上我们会处理两个文件:
类别控制器文件:<OC_ROOT>/catalog/controller/product/category.php
类别视图文件:<OC_ROOT>/catalog/view/theme/xxx/template/product/category.tpl
我们只需要:
(1)确定是否加载模块(在控制器中)
使用简单的if语句,您可以检查当前类别中的产品数是否等于零,然后您可以继续构建模块,幸运的是我们已经拥有该行中的#个产品:
$product_total = $this->model_catalog_product->getTotalProducts($filter_data);
所以你只需要检查$product_total == 0
(2)以适当的方式构建模块HTML(在控制器中)
如果您打开任何控制器,您会注意到有一条线总是用来执行某个控制器并将其输出作为字符串返回,这一行是:
$this->load->controller('controller route')
你甚至可以在同一个文件中注意到它:
$data['column_left'] = $this->load->controller('common/column_left');
因此您只需要复制该行并使用它来加载您想要的模块(使用模块路由module/featured
为您的情况),但是,OC中的某些模块希望传递一些参数到index()
函数,没有它就行不通,不要惊慌:D,你只需要打开任何使用模块的文件(比如common/column_left.php
)并做同样的事情,我为你复制(稍作修改):
if ($this->config->get($module_code . '_status'))
{
$data['module_html'] = $this->load->controller('module/' . $module_code);
}
else
{
$this->load->model('extension/module');
$setting_info = $this->model_extension_module->getModule($module_id);
if ($setting_info)
{
$data['module_html'] = $this->load->controller('module/' . $module_code, $setting_info);
}
}
$module_id
和$module_code
的值可以在表<DB_PREFIX>_module
中找到,对于您的情况,它们将是:
$module_id = 28;
$module_code = 'featured';
(3)在页面中显示模块(在视图中)
只需检查是否设置了$module_html
的值,然后将其显示在容器div中