атрибуты пользовательского заказа magento - PullRequest
1 голос
/ 18 ноября 2011

Я пытаюсь добавить некоторые пользовательские атрибуты на страницу оформления заказа (продажи) в magento 1.5.1.0 для заказов, созданных из панели бэкэнда (администратора). Я попробовал этот код, и я вижу свой новый атрибут в таблице eav_attribute, но я не вижу свой новый атрибут, когда я делаю заказ из бэкэнда. Что мне не хватает ..?

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');

$setup->addAttribute('5', 'testattr', array(
 'label' => 'testlabel',
 'type' => 'varchar',
 'input' => 'text',
 'visible' => true,
 'required' => false,
 'position' => 5,
 ));


$eavConfig = Mage::getSingleton('eav/config');
$attribute = $eavConfig->getAttribute('5', 'testattr');
$attribute->setData('used_in_forms', array('checkout_register', 'adminhtml_checkout'));
$attribute->save(); 

Спасибо ..

Ответы [ 2 ]

3 голосов
/ 18 ноября 2011

Порядковые сущности неловко не похожи на обычные сущности, они используют плоскую таблицу вместо EAV, что означает, что недостаточно просто назначить атрибут. Вы должны изменить плоский стол (который я пробовал здесь) или создать дополнительные таблицы, а затем присоединить их к плоскому столу. Оглядываясь назад, я вижу, что должен был выбрать второй вариант, он безопаснее.


Я посмотрел немного ближе к шаблону заказа, и, возможно, есть хакерский обходной путь через менее используемый блок. Для начала давайте внесем изменения в файл layout/local.xml, чтобы его можно было перезаписать обновлениями;

<layout>
    <adminhtml_sales_order_create_index>
        <reference name="gift_options">
            <block type="adminhtml/template" template="YOUR/TEMPLATE.phtml" />
        </reference>
    </adminhtml_sales_order_create_index>
</layout>

Блок параметров подарка построен открытым способом, поэтому добавить его относительно легко. Замените YOUR/TEMPLATE.phtml на путь к файлу, который вы создадите. Вставляемый шаблон должен иметь поля ввода с именами, такими как order[testattr], и эти должны быть скопированы непосредственно в таблицу базы данных (согласно Mage_Adminhtml_Model_Sales_Order_Create, если я правильно читаю исходный код). Блок параметров подарка уже создает <fieldset> внутри <form> заказа, поэтому необходимы только поля ввода.

1 голос
/ 25 ноября 2011

Спасибо clockworkgeek за ваши ответы.Я нашел решение, используя вместо этого некоторые дополнительные атрибуты адреса, потому что это было намного проще (хотя мне пришлось много искать).

, поэтому решение это ..

<?php 

//Attribute to add
$newAttributeName = "rfc"; //modify this with the name of your attribute

//a) Add EAV Attributes (modify as you needed)
$attribute  = array(
    'type'          => 'varchar',
    'label'         => 'RFC',
    'visible'       => true,
    'required'      => false,
    'user_defined'  => true,
    'searchable'    => false,
    'filterable'    => false,
    'comparable'    => false,
);

$setup = new Mage_Eav_Model_Entity_Setup('core_setup');
//Add to customer
$setup->addAttribute('customer_address', $newAttributeName, $attribute);


/* this is not working for some reason. add the columns manually
//b) Add Quote attributes (one page step to step save field)
$setup = new Mage_Sales_Model_Mysql4_Setup('sales_setup');
$setup->getConnection()->addColumn(
        $setup->getTable('sales_flat_quote_address'),
        $newAttributeName,
        'text NULL DEFAULT NULL'
    );
$setup->getConnection()->addColumn(
$setup->getTable('sales_flat_order_address'),
$newAttributeName,
        'text NULL DEFAULT NULL'
);
*/
$eavConfig = Mage::getSingleton('eav/config');
$attribute = $eavConfig->getAttribute('customer_address', $newAttributeName);
$attribute->setData('used_in_forms', array('adminhtml_customer_address',
                'adminhtml_checkout_address')); //'customer_register_address', 'customer_address_edit',
$attribute->save();


?>

изатем отредактируйте файлы согласно этому посту. Magento: сохранить пользовательский атрибут адреса при оформлении заказа

...