0

Web サイトを解析するためのクローラーを作成しました。ウェブサイトから情報を取得し、OpenCart データベースに保存します。何が起こるかというと、opencart の製品説明ページで一部のオプションを表示できません。しかし、何も変更せずにこれらのオプションを編集して保存すると、管理パネルで。次に、製品説明ページでこれらのオプションを表示できます。

別の問題もあります。上記の手順を実行した後、一部のオプション値がデータベースからランダムに削除され、オプションに関連付けられた製品説明ページでオプション値を表示できません。

OpenCart バージョン 1.5.3.1 を使用しています。
そして、私はこのパーサーを C#.NET 4.0 で作成しました。バックエンド データベースは MYSQL です。

これはバグですか?

ここに画像を掲載しました。

http://s11.postimage.org/lab58b4ip/Option_Value_Bug.jpg

4

2 に答える 2

1

This will work. It is fixed by the OC people..:)

https://github.com/opencart/opencart/commit/7ba1837c93645994063a6df67638924d86b0c672

Or alternatively you can edit this: "upload/admin/model/catalog/product.php"

 @@ -38,10 +38,12 @@ public function addProduct($data) {
38   38 

39   39 
           $product_option_id = $this->db->getLastId();
40   40 

41      
-          if (isset($product_option['product_option_value'])) {
     41 
+          if (isset($product_option['product_option_value']) && count($product_option['product_option_value']) > 0 ) {
42   42 
             foreach ($product_option['product_option_value'] as $product_option_value) {
43   43 
               $this->db->query("INSERT INTO " . DB_PREFIX . "product_option_value SET product_option_id = '" . (int)$product_option_id . "', product_id = '" . (int)$product_id . "', option_id = '" . (int)$product_option['option_id'] . "', option_value_id = '" . (int)$product_option_value['option_value_id'] . "', quantity = '" . (int)$product_option_value['quantity'] . "', subtract = '" . (int)$product_option_value['subtract'] . "', price = '" . (float)$product_option_value['price'] . "', price_prefix = '" . $this->db->escape($product_option_value['price_prefix']) . "', points = '" . (int)$product_option_value['points'] . "', points_prefix = '" . $this->db->escape($product_option_value['points_prefix']) . "', weight = '" . (float)$product_option_value['weight'] . "', weight_prefix = '" . $this->db->escape($product_option_value['weight_prefix']) . "'");
44   44 
             } 
     45 
+          }else{
     46 
+            $this->db->query("DELETE FROM " . DB_PREFIX . "product_option WHERE product_option_id = '".$product_option_id."'");
45   47 
           }
46   48 
         } else { 
47   49 
           $this->db->query("INSERT INTO " . DB_PREFIX . "product_option SET product_id = '" . (int)$product_id . "', option_id = '" . (int)$product_option['option_id'] . "', option_value = '" . $this->db->escape($product_option['option_value']) . "', required = '" . (int)$product_option['required'] . "'");
...  ...    
@@ -160,10 +162,12 @@ public function editProduct($product_id, $data) {
160  162    

161  163    
           $product_option_id = $this->db->getLastId();
162  164    

163     
-          if (isset($product_option['product_option_value'])) {
     165    
+          if (isset($product_option['product_option_value'])  && count($product_option['product_option_value']) > 0 ) {
164  166    
             foreach ($product_option['product_option_value'] as $product_option_value) {
165  167    
               $this->db->query("INSERT INTO " . DB_PREFIX . "product_option_value SET product_option_value_id = '" . (int)$product_option_value['product_option_value_id'] . "', product_option_id = '" . (int)$product_option_id . "', product_id = '" . (int)$product_id . "', option_id = '" . (int)$product_option['option_id'] . "', option_value_id = '" . (int)$product_option_value['option_value_id'] . "', quantity = '" . (int)$product_option_value['quantity'] . "', subtract = '" . (int)$product_option_value['subtract'] . "', price = '" . (float)$product_option_value['price'] . "', price_prefix = '" . $this->db->escape($product_option_value['price_prefix']) . "', points = '" . (int)$product_option_value['points'] . "', points_prefix = '" . $this->db->escape($product_option_value['points_prefix']) . "', weight = '" . (float)$product_option_value['weight'] . "', weight_prefix = '" . $this->db->escape($product_option_value['weight_prefix']) . "'");
166  168    
             }
     169    
+          }else{
     170    
+            $this->db->query("DELETE FROM " . DB_PREFIX . "product_option WHERE product_option_id = '".$product_option_id."'");
167  171    
           }
168  172    
         } else { 
169  173    
           $this->db->query("INSERT INTO " . DB_PREFIX . "product_option SET product_option_id = '" . (int)$product_option['product_option_id'] . "', product_id = '" . (int)$product_id . "', option_id = '" . (int)$product_option['option_id'] . "', option_value = '" . $this->db->escape($product_option['option_value']) . "', required = '" . (int)$product_option['required'] . "'");
于 2012-12-18T05:51:53.707 に答える
1

オプションの在庫がない場合、オプションがないように見えることがあります。これは、利用できないオプションを非表示にするために意図的に行われたと思います。商品エディタの「オプション」タブで、各オプションの在庫値を設定したことを確認してください

于 2012-12-17T19:06:53.983 に答える