0

我希望在一个空的类别页面(没有可用产品的类别)中显示一个模块(例如:特色产品)。

我一直在寻找解决方案(使用 PHP 或扩展/mod),但没有成功。谢谢。

4

1 回答 1

1

如果存在执行此操作的扩展程序或 mod

我从来没有听说过这样的扩展,我不认为有这种类型的扩展(无论如何,看看扩展商店

如果没有,到达那里的方式就足够了

基本上我们将使用两个文件:
类别控制器文件:<OC_ROOT>/catalog/controller/product/category.php
类别视图文件:<OC_ROOT>/catalog/view/theme/xxx/template/product/category.tpl

我们只需要:

(1) 判断是否加载模块(在控制器中)
使用简单的 if 语句,可以检查当前类别中的产品数量是否为零,然后您可以继续构建模块,幸运的是我们已经有了# of products in that line: $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中显示


PS:这篇文章非常好,为open cart 1.5.x的代码开发提供了很好的基础,也可以用于OC 2.x,只需稍加修改,祝你好运!

于 2015-07-21T20:07:09.740 回答