2012-12-17 2 views
0

웹 사이트 구문 분석을위한 크롤러를 만들었습니다. 그것은 웹 사이트에서 정보를 얻고 OpenCart 데이타베이스에서 그것을 저장한다. 나는 opencart의 제품 설명 페이지에서 몇 가지 옵션을 볼 수 없다. 하지만 관리자 패널에서 편집하고 아무 것도 변경하지 않고 해당 옵션을 저장할 때. 그런 다음 제품 설명 페이지에서 해당 옵션을 볼 수 있습니다.옵션 값 OpenCart 1.5.3.1에서 자동 삭제

또 다른 문제가 있습니다. 위에서 언급 한 단계를 수행 한 후 일부 옵션 값이 임의로 데이터베이스에서 삭제되고 옵션과 관련된 제품 설명 페이지에서 옵션 값을 볼 수 없습니다.

OpenCart 버전 1.5.3.1을 사용하고 있습니다.
그리고 C# .NET 4.0에서이 파서를 만들었고 백엔드 데이터베이스는 MYSQL입니다.

이것은 버그입니까?

여기에 이미지를 게시했습니다. 당신이 그들에 대한 재고 모든 항목이없는 경우

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

+0

를이 될 수있다 크롤러에만 버그가 있지만 크롤러를 확인해야합니다. 내 모든 마법이 완료된 것 같습니다. 크롤링하고 데이터를 저장하는 중입니다. – shadyyx

+0

@shadyyx 코드를 확인하고 코드를 두 번 확인했습니다. 그것은 잘 작동하고 그것은 데이터베이스에 데이터를 저장합니다. 하지만 편집하고 열린 카트에 옵션을 저장하려고하면 그 값이 삭제됩니다. –

답변

1

이것은 작동합니다. 그것은 :) 있습니다 .. OC 사람들에 의해

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

을 고정 또는 대안이를 편집 할 수 있습니다 "업로드/관리/모델/카탈로그/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'] . "'"); 
1

옵션이 없을 것처럼 보일 수 있습니다. 나는 이것이 가능하지 않은 옵션을 감추려 고 의도적이라고 믿는다. 제품 편집기의 "옵션"탭에서 각 옵션의 재고 값을 설정했는지 확인하십시오.