ตั้งค่าแอตทริบิวต์เป็น 'ใช้ค่าเริ่มต้น' สำหรับรายการผลิตภัณฑ์


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

โดยพื้นฐานแล้วการตั้งค่าคุณลักษณะเป็น 'ใช้ค่าเริ่มต้น' หมายความว่าคุณต้องลบแถวในฐานข้อมูลสำหรับแอตทริบิวต์นั้นสำหรับผลิตภัณฑ์เฉพาะสำหรับรหัสร้านค้า
นี่เป็นวิธีแก้ปัญหาง่ายๆที่ทำได้ มันต้องการการแก้ไขฐานข้อมูลโดยตรงและบางคนจะบอกว่านี่เป็น '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.