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

问题描述 投票:0回答:1

我切换到Opencart 3.0。不喜欢将.t​​pl更改为.twig。

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

我发现了这个foreach循环:

{% for product in products %}

我想读哪个

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

我尝试将Loop添加到路径:

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

但它仅显示我当前使用的当前类别页面ID中的产品。

任何帮助将不胜感激。

php opencart opencart-3
1个回答
1
投票

直接在OC上进行编辑通常是一种不好的做法,而是查看OCMOD或VQMOD进行运行时更改,但不编辑核心文件。现在,这可能会带来额外的复杂性。

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

$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);

正在调用位于模型getProductsCatalogCategory)中的方法/catalog/model/product.php,此方法将基于传递给该方法的过滤器来构建SQL查询,并返回与结果相关联的数组(因此恰当命名的$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);

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

只需确保您正在使用网站的本地副本!

© www.soinside.com 2019 - 2024. All rights reserved.