1

バックエンド(管理者)パネルから作成された注文の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(); 

ありがとう..

4

2 に答える 2

3

注文エンティティは通常のエンティティとは異なり、EAV の代わりにフラット テーブルを使用します。つまり、属性を割り当てるだけでは不十分です。フラットテーブルを変更するか(ここで試しました)、追加のテーブルを作成してからそれらをフラットテーブルに結合する必要があります。後から考えると、2 番目のオプションを選択する必要があったことがわかります。より安全です。


注文テンプレートをもう少し詳しく調べたところ、あまり使用されていないブロックを介したハック的な回避策があるかもしれません。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>、入力フィールドのみが必要です。

于 2011-11-18T15:14:00.993 に答える
1

お返事ありがとうございます。代わりにいくつかの追加のアドレス属性を使用して解決策を見つけました。これは、はるかに簡単だったからです(ただし、多くの検索が必要でした)。

だから解決策は..

<?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: カスタム アドレス属性をチェックアウトに保存する

于 2011-11-25T09:37:31.120 に答える