2012-04-27 35 views
7

Hey guys Tôi đang thiếu SQL trong số này để cập nhật hàng loạt các thuộc tính của SKU/UPCMagento cập nhật nhiều tính

Chạy EE1.10 FYI

tôi có tất cả các phần còn lại của các mã làm việc nhưng tôi "không chắc chắn những ai/cái gì/tại sao của thực sự cập nhật các thuộc tính của chúng tôi, và tôi đã không thể tìm thấy chúng, logic của tôi là

  1. mở một CSV và lấy tất cả dòng sản phẩm và attrib gắn vào mảng 2d
  2. Phân tích các SKU thành một ENTITY_ID
  3. Lấy ENTITY_ID và các thuộc tính và chạy cập nhật cho đến khi hoàn thành
  4. Lấy phần còn lại của ngày kể từ thứ sáu của nó

Dưới đây là của tôi (gần xong) mã, Tôi sẽ đánh giá cao sự giúp đỡ.

/** 
    * FUNCTION: updateAttrib 
    * 
    * REQS: $db_magento 
    * Session resource 
    * 
    * REQS: entity_id 
    * Product entity value 
    * 
    * REQS: $attrib 
    * Attribute to alter 
    * 
    */ 

Xem phản hồi của tôi về mã sản xuất đang hoạt động. Hy vọng điều này sẽ giúp một người trong cộng đồng Magento.

Trả lời

24

Trong khi điều này có thể làm việc về mặt kỹ thuật, mã bạn đã viết chỉ là về cách cuối cùng bạn nên thực hiện việc này.

Trong Magento, bạn thực sự nên sử dụng các mô hình được cung cấp bởi mã và không tự viết các truy vấn cơ sở dữ liệu.

Trong trường hợp của bạn, nếu bạn cần cập nhật thuộc tính cho 1 hoặc nhiều sản phẩm, có một cách để bạn thực hiện điều đó rất nhanh (và khá an toàn).

Nếu bạn nhìn vào: /app/code/core/Mage/Adminhtml/controllers/Catalog/Product/Action/AttributeController.php bạn sẽ thấy rằng bộ điều khiển này được dành để cập nhật nhiều sản phẩm một cách nhanh chóng.

Nếu bạn nhìn vào saveAction() chức năng bạn sẽ tìm thấy dòng mã sau đây:

Mage::getSingleton('catalog/product_action') 
    ->updateAttributes($this->_getHelper()->getProductIds(), $attributesData, $storeId); 

Mã này có trách nhiệm cập nhật tất cả các ID sản phẩm bạn muốn, chỉ có các thuộc tính thay đổi cho bất kỳ cửa hàng đơn tại một thời điểm.

Tham số đầu tiên về cơ bản là một mảng ID sản phẩm. Nếu bạn chỉ muốn cập nhật một sản phẩm, chỉ cần đặt nó vào một mảng.

Tham số thứ hai là một mảng chứa thuộc tính bạn muốn cập nhật cho các sản phẩm nhất định.Ví dụ: nếu bạn muốn cập nhật giá thành $ 10 và cân nặng thành 5, bạn sẽ chuyển mảng sau:

array('price' => 10.00, 'weight' => 5) 

Cuối cùng, thuộc tính thứ ba và cuối cùng là ID cửa hàng bạn muốn các cập nhật này xảy ra. Rất có thể con số này sẽ là 1 hoặc 0.

Tôi sẽ thực hiện cuộc gọi này và sử dụng chức năng này thay vì viết và duy trì các truy vấn cơ sở dữ liệu của riêng bạn.

+0

Vì vậy, nếu tôi đang cập nhật Lớp sản phẩm (hiển nhiên là không có mang nội bộ về mọi thứ, chỉ ở bên ngoài), điều này có liên quan như thế nào. – ehime

+1

@Josh Pennington: +1 cho một nghiên cứu tuyệt vời ... – Gowri

+0

để bạn chạy nó trong magento/shell/mycode.php? – aahhaa

0

chung Update Query sẽ như thế nào:

UPDATE 
    catalog_product_entity_[backend_type] cpex 
SET 
    cpex.value = ? 
WHERE cpex.attribute_id = ? 
    AND cpex.entity_id = ? 

Để tìm ra [backend_type] kết hợp với thuộc tính:

SELECT 
  backend_type 
FROM 
  eav_attribute 
WHERE entity_type_id = 
  (SELECT 
    entity_type_id 
  FROM 
    eav_entity_type 
  WHERE entity_type_code = 'catalog_product') 
AND attribute_id = ? 

Bạn có thể nhận được thêm thông tin từ bài viết blog sau đây:
http://www.blog.magepsycho.com/magento-eav-structure-role-of-eav_attributes-backend_type-field/

Hy vọng điều này sẽ giúp bạn.

Các vấn đề liên quan