php - texto - que significa atributo alt
Agregar atributos a la entidad del cliente (4)
Este es el código para un atributo int
básico con renderizador de text
:
$installer = $this;
$installer->startSetup();
$setup = new Mage_Eav_Model_Entity_Setup(''core_setup'');
$entityTypeId = $setup->getEntityTypeId(''customer'');
$attributeSetId = $setup->getDefaultAttributeSetId($entityTypeId);
$attributeGroupId = $setup->getDefaultAttributeGroupId($entityTypeId, $attributeSetId);
$setup->addAttribute(''customer'', ''your_attribute_code_here'', array(
''input'' => ''text'',
''type'' => ''int'',
''label'' => ''Some textual description'',
''visible'' => 1,
''required'' => 0,
''user_defined'' => 1,
));
$setup->addAttributeToGroup(
$entityTypeId,
$attributeSetId,
$attributeGroupId,
''your_attribute_code_here'',
''999'' //sort_order
);
$oAttribute = Mage::getSingleton(''eav/config'')->getAttribute(''customer'', ''your_attribute_code_here'');
$oAttribute->setData(''used_in_forms'', array(''adminhtml_customer''));
$oAttribute->save();
$setup->endSetup();
El paso inusual para agregar atributos es setData(''used_in_forms'')
parece ser exclusivo de los atributos del cliente. Sin él, el campo no se renderizará, ciertamente no en el adminhtml de todos modos. Puede ver las opciones válidas para esta matriz en la tabla de la base de datos customer_form_attribute
.
En términos de usar un select
con opciones predefinidas, esto es lo que necesita:
$iAttributeId = $installer->getAttributeId($entityTypeId, ''your_attribute_code_here'');
$aClasses = array(''TV'',''DVD'',''Home Theatre'',''Air Conditioner'',''Stereo/Hifi'',''Game Console'',''Camcorder'',''VCR'',''Set Top Box'',''PVR'');
$aOption = array();
$aOption[''attribute_id''] = $iAttributeId;
for($iCount=0;$iCount<sizeof($aClasses);$iCount++){
$aOption[''value''][''option''.$iCount][0] = $aClasses[$iCount];
}
$setup->addAttributeOption($aOption);
Y aquí hay un walk-through sobre el uso de una fuente personalizada para su menú desplegable
Espero que esto ayude,
JD
Mi objetivo actual es agregar un nuevo atributo de cliente (con tipo de int
) que debería aparecer como select con opciones predefinidas (cargadas desde un modelo con entradas editables en backend, lo cual está hecho). Estoy luchando con el uso adecuado del método $installer->addAttribute()
, especialmente especificando la opción de fuente correcta. Otro problema es que el nuevo atributo no se guarda en la tabla eav_entity_attribute
Estoy en Magento CE 1.5.1.0
La respuesta de @Janathan Day es genial y me ayudó muchísimo. Sin embargo, siempre que haya configurado su clase de setup
en Mage_Customer_Model_Entity_Setup
, Magento puede hacer todo el trabajo por usted:
<!-- config.xml Example -->
<?xml version="1.0"?>
<config>
<global>
<resources>
<acme_module_setup>
<setup>
<module>Acme_Module</module>
<class>Mage_Customer_Model_Entity_Setup</class>
</setup>
<connection>
<use>core_setup</use>
</connection>
</acme_module_setup>
</resources>
</global>
</config>
Y aquí está el mysql4-install-XXXphp
:
<?php
$installer = $this;
/* @var $installer Mage_Customer_Model_Entity_Setup */
$installer->startSetup();
$installer->addAttribute(
''customer'',
''acme_imported'',
array(
''group'' => ''Default'',
''type'' => ''int'',
''label'' => ''Imported into Acme'',
''input'' => ''select'',
''source'' => ''eav/entity_attribute_source_boolean'',
''global'' => Mage_Catalog_Model_Resource_Eav_Attribute::SCOPE_STORE,
''required'' => 0,
''default'' => 0,
''visible_on_front'' => 1,
''used_for_price_rules'' => 0,
''adminhtml_only'' => 1,
)
);
$installer->endSetup();
El adminhtml_only
anterior manejará toda la lógica de used_in_forms
para usted. Además, el group
definición se encargará de asignarlo al grupo de atributos.
La solución proporcionada por alex y puerro trabajó para mí. Solo tengo que agregar la función setter en nuestro AccountController.php
$customer->setProfession($this->getRequest()->getPost(''profession''))
->save(); // Added for updating Profession
Donde "profesión" era mi atributo personalizado.
Solo tiene que agregar el atributo de cliente debajo del archivo de instalación de mysql del módulo personalizado a través del siguiente script.
$installer = $this;
$installer->startSetup();
$installer->addAttribute("customer", "yourattributename", array(
"type" => "int",
"backend" => "",
"label" => "Bad Customer",
"input" => "select",
"source" => "eav/entity_attribute_source_boolean",
"visible" => true,
"required" => false,
"default" => "",
"frontend" => "",
"unique" => false,
"note" => ""
));
$attribute = Mage::getSingleton("eav/config")->getAttribute("customer", "yourattributename");
El siguiente script utilizado para donde quiera usar el atributo del cliente
$used_in_forms=array();
$used_in_forms[]="adminhtml_customer";
$attribute->setData("used_in_forms", $used_in_forms)
->setData("is_used_for_customer_segment", true)
->setData("is_system", 0)
->setData("is_user_defined", 1)
->setData("is_visible", 0)
->setData("sort_order", 100)
;
$attribute->save();
$installer->endSetup();