Magento добавить цену уровня программно, но с настраиваемыми полями
У меня проблема с добавлением цены уровня продукта по коду. Я провел некоторое исследование, что есть magento API, который можно использовать, чтобы добавить цену уровня. Однако, так как я настроил наше magento и добавил новое поле к цене уровня, которая называется "временем производства", я больше не знаю, как добавить цену уровня через API.
Вот пример кода
$proxy = new SoapClient(Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_WEB).'/api/soap/?wsdl');
$sessionId = $proxy->login('API user','API Key');
$tierPrices[] = array(
'website' => 'all',
'customer_group_id' => 'all',
'production_time => $data[2],
'qty' => $data[3],
'price' => $data[4]
);
try {
$proxy->call($sessionId, 'product_tier_price.update', array($sku, $tierPrices));
} catch (Exception $e) {
$e->getMessage() . "\n";
}
Я получу сообщение об ошибке "Недопустимая цена уровня".
Есть идеи, почему это происходит? или есть другие способы добавить цены уровня?
Спасибо.
3 ответа
Я обнаружил, что проще всего загрузить модель, которую API использует для многоуровневых цен, чтобы она могла помочь вам, проверяя ваши данные для вас.
$tierPrices = array();
$tierPrices[] = array(
'customer_group_id' => 1, // or 'all' or whatever your customer group ID is
'qty' => 1, // Must be greater than 0
'price' => 5.99, // Use an int here, don't currency format
'website_id' => 0 // or whatever website ID you need to set this to
);
// Set more tiered prices here if you'd like...
$tierPriceModel = Mage::getModel('catalog/product_attribute_tierprice_api');
// Assume 12345 is your product ID
$tierPriceModel->update(12345, $tierPrices);
Для таких, как я, которым было интересно, почему цены уровня не были обновлены с учетом website_id, это потому, что в коде @Tyler V. произошла ошибка, или код API изменился.
Это правильный способ форматирования цен нового уровня:
$tierPrices[] = array(
'customer_group_id' => 'all',
'qty' => 1,
'price' => 5.99,
'website' => 0
);
Это уже не website_id, а веб-сайт, когда вы указываете веб-сайт в ценовом массиве уровня!
Лучше, чем API, где не все функции, которые вы можете использовать стандартным скриптом Magento, вам нужно всего лишь поместить в папку magento:
require("../../app/Mage.php");
Mage::init();
// Set an Admin Session
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);
Mage::getSingleton('core/session', array('name' => 'adminhtml'));
$userModel = Mage::getModel('admin/user');
$userModel->setUserId(1);
$session = Mage::getSingleton('admin/session');
$session->setUser($userModel);
$session->setAcl(Mage::getResourceModel('admin/acl')->loadAcl());
foreach ($youritemlist as $item) {
$product = Mage::getModel('catalog/product')->loadByAttribute('sku',$item);
if(is_object($product)) {
$product->setTierPrice($yourprice);
echo "..(set)..";
$product->save();
echo "..saved\n";
}; // end testing of product exist
}; // enf foreach