Recuperar el valor atributo personalizado al cliente a través de observador
-
16-10-2019 - |
Pregunta
Estoy tratando de obtener el valor de atributo personalizado al cliente en el observador, pero sin resultados. ¿Puede alguien ayudarme:
<frontend>
<events>
<customer_customer_authenticated>
<observers>
<ssd_customeractivation>
<type>singleton</type>
<class>SSD_CustomerActivation_Model_Observer</class>
<method>customerCustomerAuthenticated</method>
</ssd_customeractivation>
</observers>
</customer_customer_authenticated>
</events>
</frontend>
Observer.php
class SSD_CustomerActivation_Model_Observer
{
public function customerCustomerAuthenticated($observer)
{
/**
* @var $customer Mage_Customer_Model_Customer
*/
$customer = $observer->getEvent()->getModel();
Mage::log($customer->getData('customer_active'));
}
}
Instalador:
$installer = $this;
$installer->startSetup();
$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
$attributeCode = 'customer_active';
$setup->addAttribute('customer', $attributeCode, array(
'label' => 'Is Active',
'type' => 'int',
'input' => 'boolean',
'visible' => true,
'required' => false,
'position' => 530,
));
$eavConfig = Mage::getSingleton('eav/config');
$attribute = $eavConfig->getAttribute('customer', 'is_active');
$usedInForms = array(
'adminhtml_customer',
);
$attribute->setData('used_in_forms', $usedInForms);
$attribute->save();
$installer->endSetup();
Solución
No aparece el valor, ya que no se establece para ese cliente. Cuando se agrega un atributo que el cliente, en un principio no hay ningún valor para él. Usted tiene que editar el cliente en el panel de administración y el conjunto de ese campo a un valor (sí o no, en su caso).
Tengo la sensación de que se va a decir que usted ya hizo eso y todavía no funciona. He aquí por qué.
Su script de instalación en realidad instalan 2 atributos: customer_active
y is_active
. El primero no está disponible en cualquier forma. El segundo (is_active
) es el que aparece en el back-end, y se establece el valor de la misma. En el observador comprobar el valor de customer_active
.
Creo que se necesita para cambiar esta línea en el instalador:
$attribute = $eavConfig->getAttribute('customer', 'is_active');
A éste:
$attribute = $eavConfig->getAttribute('customer', 'customer_active');
y volver a instalar el módulo.