Добавить новый атрибут в Magento Quote / Заказать
-
29-09-2019 - |
Вопрос
Я работаю над пользовательским модулем баллов лояльности. Во время оформления заказа клиент имеет возможность выкупить свои очки.
В настройке модуля я создал reeem_points eav_attribute (он присутствует в таблице eav_attribute), и я добавил атрибут в цитату, ну, вроде ...
Вот как я это сделал:
- В MySQL4-Install-0.1.0.php я звоню $ Installer-> Installentities ();
В namespace_module_model_resource_eav_mysql4_setup (который расширяет mage_eav_model_entity_setup) только 1 метод Публичная функция GetDefaultentities () Это только возвращает массив, который содержит (среди прочего):
'quote' => array( 'entity_model' => 'sales/quote', 'table' => 'sales/quote', 'attributes' => array( 'redeemed_points' => array('type' => 'static') ), ),
Снова в mysql4-install-0.1.0.php я создаю столбец в таблице sales_flat_quote, как это
//add redeemed_points to quote table $installer->getConnection()->addColumn($installer->getTable('sales/quote'), 'redeemed_points', 'bigint(20)'); $installer->addAttribute('quote', 'redeemed_points', array('type'=>'static'));
При оформлении заказа, когда я выкупаю точки, метод SavePoints ($ data) из моего класса, который расширяет mage_checkout_model_type_onepage, вызывается:
public function savePoints($data)
{
//save data
if ($data == 1) {
$redeemedPoints = Mage::helper('points')->getRedeemablePoints();
$this->getQuote()->setRedeemedPoints($redeemedPoints['points']);
} else {
$this->getQuote()->setRedeemedPoints(0);
}
$this->getQuote()->collectTotals()->save();
$this->getCheckout()
->setStepData('points', 'complete', true);
if ($this->getQuote()->isVirtual()) {
$this->getCheckout()->setStepData('payment', 'allow', true);
} else {
$this->getCheckout()->setStepData('shipping_method', 'allow', true);
}
Mage::helper('firephp')->debug($this->getQuote()->debug());
return array();
}
Вы заметите, что я отлаживаю объект QUOTE в Firephp: на данный момент (на этом этапе оформления, просто After, сохраняя его в цитате), я вижу атрибут погашения reeemed_points с правильным значением.
Моя проблема в том, что на следующем шаге этот атрибут исчез из объекта цитаты :(
Поэтому я понимаю, что мне не удалось включить атрибут my receebeed_points в объекте цитаты, но я действительно не знаю, что мне не хватает ...
Кто -нибудь кто -нибудь кто -нибудь?
Решение
Попробуйте вручную удалить var/cache/*. Схемы DB кэшируются там, и иногда Magento не будет забирать ваши новые столбцы таблицы, даже если они там. Кроме того, это, похоже, не очищается, используя функцию четкого кеша в бэкэнд, но только путем вручную удаляя все в каталоге.
Другие советы
Следующий расширенный пример включает в себя программный кэш очистки:
$installer = Mage::getResourceModel('sales/setup', 'sales_setup');
$installer->startSetup();
$installer->addAttribute('order', 'new_attribute', array('type'=>'boolean','default'=>0));
$installer->addAttribute('quote', 'new_attribute', array('type'=>'boolean','default'=>0));
// Refresh DB table describing cache programmatically
if (method_exists($this->_conn, 'resetDdlCache')) {
$this->_conn->resetDdlCache('sales_flat_order');
$this->_conn->resetDdlCache('sales_flat_quote');
}
$installer->endSetup();
Есть самый простой способ, попробуйте этот пример:
$installer = Mage::getResourceModel('sales/setup', 'sales_setup');
$installer->startSetup();
$installer->addAttribute('order', 'new_attribute', array('type'=>'boolean','default'=>0));
$installer->addAttribute('quote', 'new_attribute', array('type'=>'boolean','default'=>0));
$installer->endSetup();