2015-01-30 2 views
1

Я добавил новый пользовательский атрибут для клиента, используя приведенный ниже код.Как обновить пользовательский атрибут Magento Client программно?

$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); 
$installer->addAttribute("customer", "stripe_customer_id", array(
    "type" => "varchar", 
    "backend" => "", 
    "label" => "Stripe ID", 
    "input" => "text", 
    "source" => "", 
    "visible" => true, 
    "required" => false, 
    "default" => "", 
    "frontend" => "", 
    "unique" => false, 
)); 
$attribute = Mage::getSingleton("eav/config")->getAttribute("customer", "stripe_customer_id"); 
$setup->addAttributeToGroup(
     $entityTypeId, $attributeSetId, $attributeGroupId, 'stripe_customer_id', '999' //sort_order 
); 
$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", 1) 
     ->setData("sort_order", 100) 
; 
$attribute->save(); 
$installer->endSetup(); 

Я вижу новое поле атрибута в Magento admin.

Custom Customer attribute

Теперь, когда я пытаюсь обновить пользовательский атрибут проверки с помощью кода ниже

$order = $payment->getOrder(); 
$customer = Mage::getModel('customer/customer')->load($order->getCustomerId()); 
$customer->setWebsiteId(Mage::app()->getWebsite()->getId()); 
$customer->setStripeCustomerId('887475748'); 
try { 
    $customer->save(); 
    print('Saved: '.$customer->getStripeCustomerId()); 
} catch (Exception $ex) { 
    Mage::throwException($ex->getMessage()); 
} 

Над кодом гравюр «Сохраненные: 887475748» и никогда не выбрасывает никаких исключений. Это означает, что клиент сохраняет без ошибок, но когда я вижу информацию на панели администратора, в поле ничего нет.

Примечание. Я обновил кеш Magento несколько раз, сбросил кеш-память и сбросил кеш Magento, но не успел.

Может кто-нибудь, пожалуйста, помогите мне, если мне что-то не хватает?

+0

Попробуйте удалить каталог 'var/cache'. Иногда DDE-кеш Magento остается позади, и когда Magento сохраняет модель, он не «знает» о новом атрибуте. Кроме того, перед сохранением убедитесь, что ваш клиент является действительным клиентом (после загрузки его можно проверить «$ customer-> getId()»). – Agop

ответ

0

Вы должны использовать следующий код ...

$customer->setStripeId('887475748'); 

Это не зная точное имя переменной, но угадывание из текста, это выглядит, как вы добавляете дополнительное слово «клиента» в вызове, чтобы установить его.

Вы также можете сделать это ...

$customer['name_of_attribute_here'] = '88747etc'; 

Таким образом, время от времени, может быть легче понять, чем корпуса и замены _ символа в вызовах функций Magento в.

Ваш текущий код просто добавляет переменную к объекту клиента, не меняя часть самого EAV клиента.

+5

Его имя атрибута - «stripe_customer_id», которое можно задать двумя способами: 1) $ customer-> setData ('stripe_customer_id', '887475748') -> save(); OR $ customer-> setStripeCustomerId ('887475748') -> save(); –

+0

Я разместил его до того, как он отредактировал. – CarComp

+0

Ой, извините, мой плохой :) –

1

Вам необходимо добавить следующие записи форм:

$ used_in_forms [] = "customer_account_create"; $ used_in_forms [] = "customer_account_edit";

Смежные вопросы