제품 목록에 대해 속성을 '기본값 사용'으로 설정


10

제품 목록 및 상점보기 목록에 대해 이미지를 '기본값 사용'으로 설정하고 싶습니다. 각 제품에 대해 개별적으로 수행하는 방법을 알고 있습니다 : setData (attributeName, false), 그래서 제품 목록을 반복 할 수 있습니다. 문제 : 너무 느립니다.

$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();
        }
    }
}

그래서 나는 Mage :: getSingleton ( 'catalog / product_action')-> updateAttributes ($ products, $ attrArray, $ store_id); 대신 제품 목록에 대해 동일한 작업을 수행해야합니다. 실제로 뭔가를합니다 : 이제 모든 이미지가 '이미지 없음'으로 설정되었지만 예상대로 '기본값 사용'으로 설정되지 않았습니다.

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

여기 누군가가 아이디어가 있다면 시간을 절약하는 데 정말로 도움이 될 것입니다! 감사.

답변:


8

기본적으로 속성 값을 '기본값 사용'으로 설정하면 해당 속성에 대한 데이터베이스에서 특정 제품에 대한 상점 ID의 행을 삭제해야합니다.
여기에 간단한 해결책이 있습니다. 데이터베이스를 직접 변경해야하며 일부 사람들은 이것이 큰 'No-No'라고 말하지만 작동합니다.

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

이거 야. 그러나 과도하게 자신감이 있고 작동하지 않는 경우 먼저 데이터베이스를 백업하십시오.


1
고마워, 나는 그것을 더 이상 필요없고 순간 테스트 서버가 없기 때문에 아직 테스트하지는 않았지만 나중에 유용 할 것입니다!
Esteban

코드를 보증하겠습니다. 잘 작동합니다!
mpw

잘 작동하고 빠릅니다!
electroid

Magento 2의 모든 제품 속성에 대해 "기본값 사용"을 선택하고 제품 속성 값에 문제가 있습니다. 기본 저장소보기에는 표시되지만 "기본 값 사용"으로 설정되지 않은 속성은 거의 없습니다. . 따라서 프론트 엔드에 반영되지 않는 모든 상점보기에 대해 이러한 제품 속성 값을 업데이트 할 때마다
Himmat Paliwal
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.