Opencart 3.0——在类别页面上按 ID 显示类别中的所有产品

Opencart 3.0 -- Display All Products from Category by ID on Category Page

我切换到 Opencart 3.0.. 不喜欢 .tpl 到 .twig 的变化。

无论如何,我一直在尝试在另一个类别页面上显示特定类别的所有产品,但无济于事。

我发现了这个 foreach 循环:

{% for product in products %}

我想象的是

<?php foreach ($products as $product) { //do something } ?>

我尝试将循环添加到路径中:

catalog/view/theme/*/template/product/category.twig

但它只显示我当前所在的当前类别页面 ID 中的产品。

如有任何帮助,我们将不胜感激。

在 OC 上直接编辑文件通常是不好的做法,而是查看 OCMOD 或 VQMOD 进行运行时更改但不编辑核心文件。当然,这现在可能是一个额外的并发症。

如果您查看 /catalog/controller/product/ 文件夹中的 category.php 文件第 150 行,您会看到以下代码行:

$data['products'] = array();

$filter_data = array(
    'filter_category_id' => $category_id,
    'filter_filter'      => $filter,
    'sort'               => $sort,
    'order'              => $order,
    'start'              => ($page - 1) * $limit,
    'limit'              => $limit
);

$product_total = $this->model_catalog_product->getTotalProducts($filter_data);

$results = $this->model_catalog_product->getProducts($filter_data);

您需要做的是使用必要的过滤器创建一个新的 $filter_data 变量,如果您只需要类别 ID 即可。

看下面这行:

$results = $this->model_catalog_product->getProducts($filter_data);

它正在调用位于模型 CatalogCategory (/catalog/model/product.php) 中的方法 getProducts 此方法将根据传递给方法和 return 一个带有结果的关联数组(因此恰当地命名为 $results 变量)。

我们首先查看的控制器文件然后遍历这些 $results 并将值存储在 $data['products'].

综上所述,您可以尝试以下方法:

$data['products2'] = array();

$new_filter_data = array(
    'filter_category_id' => 13 // or any relevant ID
);

$results2 = $this->model_catalog_product->getProducts($new_filter_data);

这不是一个完整的解决方案,因为控制器文件会继续调整图像大小、获取评论等。因此您需要根据您的需要进行调整并尝试一下。

只需确保您正在处理网站的本地副本!