كيف يمكنك تعيين السعر الخاص للمنتج في الماجنتو عبر استعلام SQL المباشر؟
-
12-12-2019 - |
سؤال
أحتاج إلى تحديث السعر الخاص بشكل جماعي من ملف CSV (الذي يخبرني برقم SKU والسعر الخاص من/إلى التاريخ).
في الوقت الحالي أفعل ذلك باستخدام طريقة نماذج الماجنتو مثل هذا (بعد تحليل صفوف CSV) في حلقة foreach:
$p = Mage::getModel('catalog/product');
$product_id = $p->getIdBySku($product['SKU']);
if (!$product_id) {
throw new Exception('Product Does Not Exists');
}
$p->setStoreId($store_id)->load($product_id);
$p->setSpecialPrice(floatval($product['Price']));
$p->setSpecialFromDate($product['FromDate']);
$p->setSpecialFromDateIsFormated(true);
$p->setSpecialToDate($product['ToDate']);
$p->setSpecialToDateIsFormated(true);
$p->save();
$p = null;
يعد هذا أمرًا جيدًا عندما تحتاج مجموعة من المنتجات إلى التحديث.ومع ذلك، عندما تقوم بتحديث أكثر من 100 منتج، يصبح هذا بطيئًا بشكل لا يصدق ويؤثر على أداء الموقع أيضًا.
هل يمكنني بأي حال من الأحوال استيراد سعر خاص بكميات كبيرة وكذلك تحديد التواريخ عبر استعلام SQL مباشر؟
أثناء البحث في هذه المشكلة، وجدت حلاً ممكنًا (استنادًا إلى هذه المقالة http://fishpig.co.uk/magento/tutorials/update-prices-sql) مع تحديد special_price
في قاعدة البيانات مباشرة مثل هذا:
ملحوظة: دينار بحريني_ هي بادئة الجدول الخاص بي
UPDATE bd_catalog_product_entity AS CPE
INNER JOIN bd_catalog_product_entity_decimal AS CPED ON CPED.entity_id = CPE.entity_id
SET CPED.`value` = 2.99 -- New Special Price
WHERE
CPED.attribute_id = (
SELECT
attribute_id
FROM
bd_eav_attribute eav
WHERE
eav.entity_type_id = 4
AND eav.attribute_code = 'special_price'
)
AND CPED.store_id = 1 -- Retail Store
AND CPE.sku = 'ABS049' -- Sku Being Updated
هذا يبدو للعمل (أستطيع أن أرى القيمة في واجهة المستخدم الماجنتو محدثة).لست متأكدًا بعد مما إذا كانت هذه هي الطريقة الصحيحة لتحديد السعر الخاص في قاعدة البيانات مباشرةً.
كما أنني لم أتوصل بعد إلى كيفية ضبط from
/to
بلح.
أي مساعدة في هذا سيكون موضع تقدير كبير.
المحلول
دعنا نقول ذلك $storeId
هو المتجر الذي تريد تحديث السعر له $specialPrice
هو سعرك الخاص، $sku
هو رمز SKU لمنتجك، $fromDate
و $toDate
هي...حسنًا، لقد فهمت الفكرة.
الآن قم بتشغيل هذا الكود:
$id = Mage::getSingleton('catalog/product')->getIdBySku($sku);
if ($id) {
Mage::getSingleton('catalog/product_action')->updateAttributes(
array($id), //array with ids to update
array( //array with attributes to update
'special_price' => $specialPrice,
'special_from_date' => $fromDate,
'special_to_date' => $toDate,
),
$storeId //store id to update. If you want to update the global value use 0 in here
);
}
نصائح أخرى
إذا كنت ترغب في تحديث المنتجات الحالية، فلا داعي لإجراء التغييرات يدويًا.ما عليك سوى استيراد ملف CSV الذي يجب أن يحتوي فقط على تلك السمات كأعمدة مطلوبة للتحديث.SKU حقل مطلوب لذا لا تنس تضمينه في ملف CSV الخاص بك.
وسوف تستورد المنتجات بسرعة كبيرة.