2016-10-11 95 views
0

我想之前得到從產品標識和產品後,目前我正在等我可以從這些產品的信息,並作出下一個產品和以前的產品按鈕獲取從產品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; 
     } 
+0

將當前ID加1或減1,並使用get查詢來檢查id是否存在保持遞減或遞增,直到找到有效的id爲止。您可以發佈模型查詢以便更好地理解您的查詢 –

+0

請提供更多信息,例如您正在處理的文件。基於您提供的少量信息,我的猜測是'$ data ['product_id']'不包含在將其傳遞給模型函數或$ result ['product_id']'不存在時存在。如果PHP中的關聯數組沒有帶指定字符串鍵的元素,則會發生非法字符串偏移 –

+0

我使用更多信息編輯它 – souptical

回答

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; 
} 

確保您使用!==運營商,而不是!=運營商爲!==檢查該類型實際上是一個布爾值,因此的假,則表示產品不針對存在的價值提供的產品ID。

此答案僅適用於檢索上一個和下一個產品。要檢索按ID排列的全部產品,需要完全不同的答案。

+0

改變了它有點incase之間有一個空白空間,所以我得到它編輯的下一個真實產品ID我的問題 – souptical

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"; 

} 

以上是將要使用的查詢。 現在使用您的首選數據庫庫運行查詢並返回結果。

應該這樣做