管理者の顧客アドレス属性のフォームフィールドを再配置するにはどうすればよいですか?
質問
顧客アドレスにいくつかのカスタム属性を追加するMagento拡張機能を開発しています。私の目標は、Admin Orderフォームのアドレス入力フィールドを再配置することです。属性の並べ替え順序を変更すると、配置はカスタム属性に対してのみ変更されます。つまり、システム属性の入力フィールドの前にカスタム属性の入力フィールドを配置できません。
ソースコードを読みました Mage_Adminhtml_Block_Sales_Order_Create_Form_Address
と Mage_Customer_Model_Form
しかし、それでもそれを行う方法を理解することはできません。
これはまったく可能ですか?もしそうなら、どうすればそれを達成できますか?
編集mysql4-install-0.1.0.phpスクリプトでは、以下を使用します。
$this->addAttribute('customer_address', 'carrier_office_name', array(
'type' => 'int',
'input' => 'text',
'label' => 'Carrier office name',
'global' => 1,
'visible' => 1,
'sort_order' => 247, // example
'required' => 0,
'user_defined' => 1,
'visible_on_front' => 1
));
解決
で見つかったコードを見てください Mage_Adminhtml_Block_Sales_Order_Create_Form_Address::_prepareForm
. 。電話した後 _addAttributesToForm
すべての属性を追加するために、デフォルトの属性のほんの一握りで追加の処理を行います。これを行うと、フォームからそれらを削除してから、元の位置に関係なくフォームの上部に配置されます。
フォームのすべての属性の位置を変更することは確かに可能ですが、そのためには、フォーム要素の最終的な位置を制御するためにブロックを拡張する必要があります。
他のヒント
他の誰かがこれを達成しようとしている場合:
$someFieldName = $this->_form->getElement('some_field_name');
//Remove the element from its default position
$fieldset->removeField($someFieldName->getId());
//Add new field
$someNewField = $fieldset->addField($someFieldName->getId(),
'text',
$someFieldName->getData(),
**$this->_form->getElement('lastname')->getId()**);
重要な情報: $this->_form->getElement('lastname')->getId()
カスタム入力フィールドを配置する必要がある要素です。
私が使用したソリューションは、私のカスタム属性をシステム属性として定義することでした。そのために必要な唯一のことは、パラメーターを設定することでした。ユーザー定義の'価値で 0.
$this->addAttribute('customer_address', 'mobile', array(
'type' => 'varchar',
'input' => 'text',
'label' => 'Mobile',
'global' => 1,
'visible' => 1,
'required' => 0,
'user_defined' => 0,
'visible_on_front' => 1,
'position' => 130 ));
システムまたはユーザー定義の属性の違いが重要かどうかわからない。
NB(Magento 1.9.2.1):メソッドaddattribute()の「sort_order」の代わりにパラメーター「位置」を使用する必要がありました。