Додавання спеціального атрибуту до Клієнта


64

Нам потрібен простий спосіб додати атрибут до запису клієнта, який не може редагувати клієнт чи адміністратор, лише програмно. По суті, у нас сайт ExpressionEngine поєднаний з Magento.

Ми підтверджуємо автентифікацію за допомогою веб-сервісу і хотіли б зберегти деякий JSON, який ми отримуємо від аутентифікації, у запис клієнта та оновлювати його щоразу, коли вони входитимуть у систему.

Ми також хочемо, щоб дані були змінені, якщо вони змінюють інформацію в процесі оформлення замовлення, наприклад, адресу доставки. Потім ми будемо відправляти дані в нашу веб-службу, як це робимо в даний час з кожним замовленням.

Це важко зробити, оскільки зараз ми зберігаємо деякий JSON на кожному продукті за допомогою спеціального атрибута з розширенням MageWorx для користувацьких параметрів?

Я тут використовував Інтернет-модуль Creator http://www.silksoftware.com/magento-module-creator/, але не знаю, як змінити або отримати значення після встановлення модуля.

Де я міг навчитися писати розширення для цього?



Як це зробити, якщо я хочу зберегти це значення атрибута в таблиці бази даних "customer_entity"? @Marius
Kazim

1
@KazimNoorani Якщо ви хочете зберегти значення безпосередньо в customer_entityтаблиці, вам потрібно додати стовпець до таблиці та в сценарій, який додає атрибут (див. Мою відповідь нижче), замініть тип varcharна static.
Маріус

@Marius Я вже додав стовпчик до customer_entityтаблиці. І мій атрибут типу "select". Я хочу зберегти своє значення атрибута безпосередньо у цій "custom_column" customer_entityтаблиці. Як це зробити?
Казим Ноорані

1
Навіть якщо ви хочете зберегти дані в головній таблиці, вам все одно потрібен атрибут з типом static.
Маріус

Відповіді:


68

/app/code/local/Your/Customattribute/sql/your_customattribute_setup/install-0.1.0.php

<?php
$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", "customattribute",  array(
    "type"     => "varchar",
    "backend"  => "",
    "label"    => "Custom Attribute",
    "input"    => "text",
    "source"   => "",
    "visible"  => true,
    "required" => false,
    "default" => "",
    "frontend" => "",
    "unique"     => false,
    "note"       => "Custom Attribute"
));

$attribute   = Mage::getSingleton("eav/config")->getAttribute("customer", "customattribute");

$setup->addAttributeToGroup(
    $entityTypeId,
    $attributeSetId,
    $attributeGroupId,
    'customattribute',
    '999'  //sort_order
);

$used_in_forms=array();

$used_in_forms[]="adminhtml_customer";
//$used_in_forms[]="checkout_register";
//$used_in_forms[]="customer_account_create";
//$used_in_forms[]="customer_account_edit";
//$used_in_forms[]="adminhtml_checkout";
        $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();

/app/code/local/Your/Customattribute/etc/config.xml

 <?xml version="1.0"?>
    <config>
        <modules>
            <Your_Customattribute>
                <version>0.1.0</version>
            </Your_Customattribute>
        </modules>
        <global>

            <resources>
                <Your_Customattribute_setup>
                    <setup>
                        <module>Your_Customattribute</module>
                        <class>Mage_Customer_Model_Entity_Setup</class>
                    </setup>
                    <connection>
                        <use>core_setup</use>
                    </connection>
                </Your_Customattribute_setup>
                <Your_Customattribute_write>
                    <connection>
                        <use>core_write</use>
                    </connection>
                </Your_Customattribute_write>
                <Your_Customattribute_read>
                    <connection>
                        <use>core_read</use>
                    </connection>
                </Your_Customattribute_read>
            </resources>
        </global>

    </config>

app / тощо / модулі / Your_Customattribute.xml

  <?xml version="1.0"?>
    <config>
        <modules>
            <Your_Customattribute>
                <active>true</active>
                <codePool>local</codePool>
                <version>0.1.0</version>
            </Your_Customattribute>
        </modules>
    </config>

Потім для отримання чи редагування використовуйте:

$customer = Mage::getModel('customer/customer')->load($custid);
$customer->getCustomattribute();
$customer->setCustomattribute($yourjson);

Вам потрібно буде створити спостерігачів події для події входу, відповів тут: Як я можу отримати дані клієнта від спостерігача після успішного входу?

а також ймовірні спостерігачі для customer_save_after у випадку, якщо вони змінюють свою адресу в акаунті mgmt, і одну для цитати, яка може бути в різних місцях, залежно від того, що ви збираєтесь.


Що таке customer_band_sku?
MB34

Вибачте, це я створив залишок.
Воюватиме

То як би встановити функцію setCustomAttribute () для встановлення даних?
MB34

Чи є у вас приклад, як встановити дані, коли користувач входить?
MB34

1
Добре працює. Чи можете ви також сказати, як показати цей атрибут у панелі адміністратора + клієнтська сітка
aravind

9

Існує велика кількість спеціальних функціональних можливостей, які вам доведеться створити як власні модулі, що переосмислюють класи, і підключення до подій, за якими ви хочете, щоб дані передавались у вашу веб-службу. Що стосується атрибуту, коли ви створюєте власний модуль і визначаєте ресурс установки для нього у модулі, config.xmlяк у підручнику вище, то у вашому сценарії встановлення ви можете зробити щось подібне:

[module_path] / sql / [resource_node_defined_in_config_xml] / mysql4-install- [module_version_number] .php

$installer = $this;

$installer->startSetup ();

$setup = Mage::getModel ( 'customer/entity_setup' , 'core_setup' );

    //add budget
    $setup->addAttribute('customer', 'budget', array(
        'type' => 'decimal',
        'input' => 'text',
        'label' => 'Budget',
        'global' => 1,
        'visible' => 1,
        'required' => 0,
        'user_defined' => 0,
        'default' => '',
        'visible_on_front' => 1,
        'source' =>   NULL,
        'comment' => 'This is a budget'
    ));

$installer->endSetup ();

user_definedробить атрибут systemатрибутом, якщо його встановлено 0, що відключає можливість видалити його з адміністратора.


0

Після багато налагодження ядра я з'ясував, що magento очікує, що файл буде або в даних / Companyname_Modulname_setup /, або в sql / Companyname_Modulname_setup / .

І це має бути названо, mysql4-data-upgrade-OLDVERSION-NEWVERSION.phpнаприклад, mysql4-data-upgrade-0.1.0-0.1.0.phpзамістьmysql4-install-0.1.0.php

Принаймні на Magento 1.9.3

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.