So fügen Sie programmgesteuert ein Kundenattribut in Magento hinzu
-
12-12-2019 - |
Frage
$installer = $this;
$installer->startSetup();
$installer->addAttribute('customer','badge', array(
'label' => 'Badge',
'type' => 'text', //backend_type
'input' => 'multiselect', //frontend_input
'backend' => 'eav/entity_attribute_backend_array',
'global' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_GLOBAL,
'source' => 'marketplace/eav_entity_attribute_source_badge', // Goes to Step 2
'visible' => true,
'required' => false,
'default' => '',
'frontend' => '',
'unique' => false,
'note' => ''
));
Mage::getSingleton('eav/config')
->getAttribute('customer', 'badge')
->setData('used_in_forms', array(
'customer_account_create', 'customer_account_edit', 'customer_address_edit',
'checkout_onepage_register', 'checkout_onepage_register_guest', 'checkout_onepage_billing_address',
'adminhtml_customer','checkout_onepage_shipping_address','checkout_multishipping_register'
))
->save();
$installer->endSetup();
Mein Abzeichen,php
class Company_Marketplace_Model_System_Config_Source_Badge
extends Mage_Eav_Model_Entity_Attribute_Source_Abstract
{
protected $_options;
public function toOptionArray()
{
$collection = Mage::getModel('marketplace/badge')->getCollection();
$allattributes = array();
foreach ($collection as $data) {
$allattributes[] = array(
'value' => $data->getBadgeName(),
'label' => $data->getBadgeName()
);
}
return $allattributes;
}
}
Fehler erhalten:
Fatal error: Call to undefined method Mage_Core_Model_Resource_Setup::addAttribute()
in app\code\local\Company\Marketplace\sql\marketplace_setup\mysql4-upgrade-1.0.0-1.0.1.php on line 6
Lösung
Ich gehe davon aus, dass Sie dieses XML-Stück im haben config.xml
Datei innerhalb der <global>
Etikett
<resources>
<[module]_setup>
<setup>
<module>Company_Marketplace</module>
</setup>
</[module]_setup>
</resources>
Sie müssen Magento anweisen, das Kunden-Setup-Modell für Ihr Setup zu verwenden.Sie können dies tun, indem Sie das obige Markup wie folgt umwandeln:
<resources>
<[module]_setup>
<setup>
<module>Company_Marketplace</module>
<class>Mage_Customer_Model_Resource_Setup</class> <!-- this needs to be added -->
</setup>
</[module]_setup>
</resources>
[BEARBEITEN]
Fügen Sie diese Methode auch Ihrem Quellmodell hinzu:
public function getOptionText($value)
{
$isMultiple = false;
if (strpos($value, ',')) {
$isMultiple = true;
$value = explode(',', $value);
}
$options = $this->getAllOptions(false);
if ($isMultiple) {
$values = array();
foreach ($options as $item) {
if (in_array($item['value'], $value)) {
$values[] = $item['label'];
}
}
return $values;
}
foreach ($options as $item) {
if ($item['value'] == $value) {
return $item['label'];
}
}
return false;
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange