J'essaie d'ajouter un attribut EAV appelé «vendorping» au modèle sales/order_shipment. Pour ce faire, j'ai créé le fichier suivant dans mon module:Magento: Définition d'un attribut personnalisé sur le modèle sales/order_shipment
// app\code\local\Jb\Vendorping\sql\vendorping_setup\mysql4-install-0.1.0.php
$this->startSetup();
$sql = 'SELECT entity_type_id FROM `'.$this->getTable('eav_entity_type').'` WHERE entity_type_code = \'shipment\'';
$row = Mage::getSingleton('core/resource')
->getConnection('core_read')
->fetchRow($sql);
$entityTypeId = $row['entity_type_id'];
$c = array(
'entity_type_id' => $entityTypeId,
'attribute_code' => 'vendorping',
'backend_type' => 'int',
'frontend_input' => 'text',
'is_global' => '1',
'is_visible' => '0',
'is_required' => '0',
'is_user_defined' => '0',
'frontend_label' => 'Vendor Confirmed',
);
$attribute = new Mage_Eav_Model_Entity_Attribute();
$attribute->loadByCode($c['entity_type_id'], $c['attribute_code'])
->setStoreId(0)
->addData($c)
->save();
$this->endSetup();
Maintenant, cela fonctionne bien - cet attribut est ajouté avec succès:
mysql> mysql> SELECT * FROM eav_attribute WHERE attribute_code LIKE 'vendorping';
+--------------+----------------+----------------+-----------------+---------------+--------------+---------------+----------------+----------------+------------------+----------------+--------------+-------------+-----------------+---------------+-----------+------+
| attribute_id | entity_type_id | attribute_code | attribute_model | backend_model | backend_type | backend_table | frontend_model | frontend_input | frontend_label | frontend_class | source_model | is_required | is_user_defined | default_value | is_unique | note |
+--------------+----------------+----------------+-----------------+---------------+--------------+---------------+----------------+----------------+------------------+----------------+--------------+-------------+-----------------+---------------+-----------+------+
| 127 | 8 | vendorping | NULL | NULL | int | NULL | NULL | text | Vendor Confirmed | NULL | NULL | 0 | 0 | NULL | 0 | |
+--------------+----------------+----------------+-----------------+---------------+--------------+---------------+----------------+----------------+------------------+----------------+--------------+-------------+-----------------+---------------+-----------+------+
1 row in set (0.00 sec)
Mais si je lance cette action du contrôleur, je peut ne pas sembler sauver avec succès le nouvel attribut:
// app\code\local\Jb\Vendorping\controllers\IndexController.php ===
class Jb_Vendorping_IndexController extends Mage_Core_Controller_Front_Action
{
public function pingAction()
{
// Get shipment
$shipmentId = 1; // Set manually for now
$shipment = Mage::getModel('sales/order_shipment')->load($shipmentId);
var_dump($shipment->getOrder()->getShippingDescription());
// Outputs:
// string(17) "Flat Rate - Fixed" [So the shipment exists]
// Save "vendorping" field and save
$shipment->setVendorping(1);
$shipment->save();
// Reload shipment from database
$shipment = Mage::getModel('sales/order_shipment')->load($shipmentId);
// Check "vendorping" field
var_dump($shipment->getVendorping());
// Outputs:
// NULL [Why??]
}
}
Après googler 'installEntities', j'ai trouvé [cette ressource] (http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/installing_custom_attributes_with_your_module). Merci pour votre aide et merci pour votre blog. –
Cela fonctionne maintenant. Je vous remercie. –
Attendez, cela ne fonctionne que pour la version 1.3.2.4, pas 1.4.1.1. –