如何通过ID隐藏Opencart类别中的产品?

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

我在 Opencart 上有一个网站。我们的商店里有几百种产品,我们试图对它们进行排名以用于 SEO 目的(或搜索),但我们只希望它们的基本产品显示在类别页面上。

假设我想隐藏某个类别中的所有产品,如果我的 ID 位于 PHP 字符串中,如下所示:

444,443,145,97,459,460,454,451,450,449,445,446,447,448,457,456,387,385

将其乘以 30 左右,因为我们在该特定类别中有很多产品。

有人知道我该怎么做吗?我是否可以将某些内容添加到类别模板或类别控制器中,以隐藏产品,使其不显示在基于 ID 的类别页面上。

opencart
3个回答
0
投票

正如 @Jonid Bendo 在其评论中所说,对于如何实现这一目标,你确实有很多选择。

首先,我不明白为什么您不禁用这些产品,或者更好地将它们从您的类别中删除。

我可以提出两种方法:

  • 数据库级别。
  • 控制器级别。

数据库级别 您可以在产品中创建一个额外的字段 bool 类型来确定您可以选择或不选择的产品,并在数据库请求中添加此条件:

 $sql = "SELECT p.product_id, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' |||| AND p.show_cat = '1' |||| GROUP BY r1.product_id) AS rating, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special";

控制器级别

拿到产品列表后,将特定id的产品一一剔除(技术不太好)。

还有很多其他的解决方案,只取决于您想要花费多少工作和时间以及达到哪种质量。


0
投票

数据库级别您甚至可以进行覆盖 - 应从请求中排除的产品的“黑名单”或“白名单”,相反,仅显示这些产品:

    $blacklist = '444,443,145,97,459,460,454,451,450,449,445,446,447,448,457,456,387,385';
    
    if ($blacklist) {
        $sql_blacklist = " AND ".($blacklist_type == 'black' ? "NOT" : "")."(p.product_id IN (" . $this->db->escape($blacklist) . "))";
    }

并在请求中的某处插入,例如:

AND p.status = '1' ". $sql_date_modified . "

0
投票

您可以在控制器级别执行此操作 目录/控制器/产品/category.php

搜索此代码

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

            foreach ($results as $result) {

并通过添加带有产品 ID 的数组来编辑它

$results = $this->model_catalog_product->getProducts($filter_data);
$products_to_hide = [444,443,145,97,459,460,454,451,450,449,445,446,447,448];
    
foreach ($results as $result) {
if (in_array((int)$result['product_id], $products_to_hide)){
continue;
}
//... rest of the code
© www.soinside.com 2019 - 2024. All rights reserved.