đặt thuộc tính thành 'sử dụng giá trị mặc định' cho danh sách sản phẩm


10

Tôi muốn đặt hình ảnh thành 'sử dụng giá trị mặc định' cho danh sách sản phẩm và cho danh sách chế độ xem cửa hàng. Tôi biết cách thực hiện riêng lẻ cho từng sản phẩm: setData (propertyName, false) và vì vậy tôi có thể thực hiện một vòng lặp trong danh sách sản phẩm của mình. Vấn đề: nó thực sự quá chậm.

$attrArray=array('thumbnail','small_image','image');
$products = array(170,171,172);
$stores = array(17,18,19);
foreach ($stores as $store_id) {
    foreach ($products as $product_id) {
        foreach ($attrArray as $attr) { 
            $product = Mage::getModel('catalog/product')
            ->load($product_id)->setStoreId($store_id)
            ->setData($attr, false)
            ->save();
        }
    }
}

Vì vậy, tôi đã thử sử dụng Mage :: getSingleton ('catalog / sản phẩm_action') -> updateAttribut ($ sản phẩm, $ attrArray, $ store_id); thay vào đó, được cho là làm điều tương tự nhưng trên một danh sách các sản phẩm. Nó thực sự làm một cái gì đó: tất cả các hình ảnh của tôi hiện được đặt thành 'không có hình ảnh', nhưng không phải là 'Sử dụng giá trị mặc định' như mong đợi.

$attrArray = array('thumbnail'=>false,'small_image'=>false,'image'=>false);
$products = array(170,171,172);
$stores = array(17,18,19);
foreach ($stores as $store_id) {
    Mage::getSingleton('catalog/product_action')
    ->updateAttributes($products, $attrArray, $store_id);
}

Nếu ai đó quanh đây có một ý tưởng, nó thực sự có thể giúp tôi tiết kiệm thời gian! Cảm ơn.

Câu trả lời:


8

Về cơ bản, đặt giá trị thuộc tính thành 'Sử dụng giá trị mặc định' có nghĩa là bạn phải xóa hàng trong cơ sở dữ liệu cho thuộc tính đó, cho sản phẩm cụ thể, cho id cửa hàng.
Đây là một giải pháp đơn giản mà làm điều đó. Nó yêu cầu thay đổi cơ sở dữ liệu trực tiếp và một số người sẽ nói rằng đây là một 'Không-Không' lớn nhưng nó hoạt động.

$attrArray=array('thumbnail','small_image','image');
$products = array(170,171,172);
$stores = array(17,18,19);
$productsAsString = implode(',', $products);
$storesAsString = implode(',', $stores);
//get access to the resource
$resource = Mage::getSingleton('core/resource');
//get access to the db write connection
$connection = $resource->getConnection('core_write');
//model for retrieving attributes
$eavConfig = Mage::getModel('eav/config');
$tables = array();
//get the association between attribute ids and the tables where their values are stored
//group them by table name so you will run a single query for each table
foreach ($attrArray as $attributeCode){
    $attribute = $eavConfig->getAttribute('catalog_product', $attributeCode);
    if ($attribute){
        $tableName = $resource->getTableName('catalog/product') . '_' . $attribute->getBackendType();
        $tables[$tableName][] = $attribute->getId();
    }
}
//for each table delete the attribute values in the specified store for the specified products
foreach ($tables as $tableName => $attributeIds){
    $attributeIdsAsString = implode(',', $attributeIds);
    $q = "DELETE FROM {$tableName}
                WHERE
                    attribute_id IN ({$attributeIdsAsString}) AND
                    entity_id IN ({$productsAsString}) AND
                    store_id IN ({$storesAsString})";
    $connection->query($q);
}

Điều này nên được nó. Nhưng trong trường hợp tôi quá tự tin và điều này không hiệu quả, hãy sao lưu cơ sở dữ liệu của bạn trước.


1
Cảm ơn rất nhiều, tôi đã không kiểm tra nó, vì tôi không cần nó nữa và không có máy chủ thử nghiệm vào lúc này, nhưng chắc chắn nó sẽ hữu ích sau này!
Esteban

Tôi sẽ xác nhận mã. Hoạt động tốt!
mpw

nó hoạt động tốt và nhanh chóng
Electroid

Tôi muốn đặt "Sử dụng giá trị mặc định" được kiểm tra cho tất cả các thuộc tính sản phẩm trong Magento 2, tôi gặp vấn đề với giá trị thuộc tính sản phẩm, chúng được hiển thị từ chế độ xem cửa hàng mặc định nhưng một số thuộc tính không được đặt thành "Sử dụng giá trị mặc định" như đã chọn . Vì vậy, bất cứ khi nào tôi cập nhật các giá trị thuộc tính sản phẩm này cho tất cả các chế độ xem cửa hàng không phản ánh ở lối vào.
Himmat Paliwal
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.