从产品前后获取 ID

Get ID from product before and after

我正在尝试从我当前查看的产品之前和之后的产品中获取 ID,因此我可以从这些产品中获取信息并制作下一个产品和上一个产品按钮

我正在开发 Opencart 2.3.0.2 版

这一切都在 product.php 控制器中 所有这些都在第 277 行附近,在数据之后['product_id'] 我添加了我的代码

        $data['product_id'] = (int)$this->request->get['product_id'];

        $results = $this->model_catalog_product->getProduct($data['product_id']);

        foreach ($results as $result) {
            if ($result['product_id'] < $data['product_id']){
                $data['product_before_id'] = $result['product_id'];
            } else {
                $data['product_before_id'] = 0;
            }

            if ($result['product_id'] > $data['product_id']){
                $data['product_after_id'] = $result['product_id'];
            } else {
                $data['product_after_id'] = 0;
            }

        }

我试图获取它但得到了非法的字符串偏移量

修改后的答案

        $next_product = $this->model_catalog_product->getProduct($product_id + 1);
        while($next_product === false){
            $product_id = $product_id + 1;
            $next_product = $this->model_catalog_product->getProduct($product_id);
        }

        $previous_product = $this->model_catalog_product->getProduct($product_id - 1);
        while($previous_product === false){
            $product_id = $product_id - 1;
            $previous_product = $this->model_catalog_product->getProduct($product_id);
        }


        if ($previous_product !== false) {
            if ($previous_product['product_id'] == $data['product_id']) {
                $data['product_before_id'] = 0;
            } else {
                $data['product_before_id'] = $previous_product['product_id'];
            }
        } else {
            $data['product_before_id'] = 0;
        }

        if ($next_product !== false) {
            if ($next_product['product_id'] == $data['product_id']) {
                $data['product_after_id'] = 0;
            } else {
                $data['product_after_id'] = $next_product['product_id'];
            }
        } else {
            $data['product_after_id'] = 0;
        }

要获取以前的 ID:

在您的模型中创建一个使用当前 ID 获取上一个 ID 和下一个 ID 的新函数:

function  nextId($currentId) {
   //Replace MyTable with the name of your table
   $q= "SELECT ID FROM MyTable WHERE id >= $currentId ORDER BY id ASC LIMIT 1";
}

function  prevId($currentId) {
   //Replace MyTable with the name of your table
   $q= "SELECT id FROM MyTable WHERE id <= $currentId ORDER BY id DESC LIMIT 1";

}

以上是将要使用的查询。 现在 运行 使用您首选的数据库的查询和 return 您的结果。

应该就可以了

您编写的代码从一开始就有缺陷。 getProduct 函数检索有关单个产品的信息,而不是所有产品。

根据您想执行的操作,我会简单地获取当前页面的产品 ID,然后检查它两侧的 ID。因此,如果产品 ID 为 4,请检查产品 ID 3 和 5 是否都存在。

这可以通过简单地 运行 两者的 getProduct 函数来实现,因为如果数据库中不存在产品 ID 参数,该函数将只是 return false。

示例:

$product_id = (int)$this->request->get['product_id'];

$previous_product_id = $this->model_catalog_product->getProduct($product_id - 1);
$next_product_id = $this->model_catalog_product->getProduct($product_id + 1);

if ($previous_product_id !== false) {
    $data['product_before_id'] = $previous_product_id;
} else {
    $data['product_before_id'] = 0;
}

if ($next_product_id !== false) {
    $data['product_after_id'] = $next_product_id;
} else {
    $data['product_after_id'] = 0;
}

确保您使用 !== 运算符而不是 != 运算符,因为 !== 检查类型实际上是布尔值,因此值为 false 表示产品提供的产品 ID 不存在。

此答案仅适用于检索上一个和下一个产品。要检索按 ID 订购的所有产品的完整集合,需要完全不同的答案。