以下に、正しい軌道に乗るためのいくつかの考えを示します。
まず、セットアップ スクリプトでエンティティを作成します。
$installer->addAttribute('catalog_product', 'frontend_display', array(
'label' => 'Display Test',
'type' => 'varchar',
'frontend_model' => 'Test_Module/Entity_Attribute_Frontend_CsvExport',
'input' => 'select',
'required' => 0,
'user_defined' => false,
'group' => 'General'
));
使用するモデルに frontend_model を設定してください。フロントエンド モデルは、属性の表示に影響します (フロントエンド セクションと adminhtml セクションの両方)。
次に、自分でクラスを作成し、次の関数のいずれかまたは両方をオーバーライドします。
public function getInputType()
{
return parent::getInputType();
}
public function getInputRendererClass()
{
return "Test_Module_Block_Adminhtml_Entity_Renderer_CsvExport";
}
最初の ( getInputType()
) は、入力タイプを焼き付けられた入力タイプに変更するために使用されます (Varien_Data_Form_Element_*
オプションについては、を参照してください)。ただし、独自のレンダラー クラスを設定するには、後者の関数 - を使用しますgetInputRendererClass()
。それを以下に示します。
public function getElementHtml()
{
return Mage::app()->getLayout()->createBlock('Test_Module/Adminhtml_ExportCsv', 'export')->toHtml();
}
ここでは、要素自体にはボタンなどを表示するための追加機能がないため、整理するために別のブロックをインスタンス化しています。
最後に、このファイルを作成します。
class Test_Module_Block_Adminhtml_ExportCsv extends Mage_Adminhtml_Block_Widget
{
protected function _prepareLayout()
{
$button = $this->getLayout()->createBlock('adminhtml/widget_button')
->setData(array(
'label' => $this->__('Generate CSV'),
'onclick' => '',
'class' => 'ajax',
));
$this->setChild('generate', $button);
}
protected function _toHtml()
{
return $this->getChildHtml();
}
}
これは AJAX の部分をカバーしていませんが、残りの作業に非常に近づくことができます。