从产品中获取ID之前和之后

时间:2016-10-11 12:13:31

标签: php opencart

我正在尝试从我正在寻找的产品之前和之后获取产品的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;
        }

2 个答案:

答案 0 :(得分: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";

}

以上是将要使用的查询。 现在使用首选数据库库运行查询并返回结果。

应该这样做

答案 1 :(得分:0)

你写的代码开头有缺陷。 getProduct函数检索有关单个产品的信息,而不是所有产品。

根据您想要做的事情,我只需获取当前页面的产品ID,然后检查其中任意一侧的ID。因此,如果产品ID为4,请检查产品ID 3和5是否都存在。

这可以通过简单地为它们运行getProduct函数来实现,因为如果数据库中不存在产品ID参数,则函数将返回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排序的所有产品的完整集合,需要完全不同的答案。