2

ウィジェットレンダラーを使用してカスタム製品属性を追加する方法を知っている人はいますか?これは、プロモーションルールで確認できます。SKUを選択すると、製品を選択したAjaxポップアップが表示されます。

だから私はそれについてどうしますか?の :

$installer->addAttribute(Mage_Catalog_Model_Product::ENTITY...

つまり、ウィジェットを使用してカスタム属性値を選択するにはどうすればよいですか?

編集:シナリオは次のとおりです。

ボタンをクリックすると商品選択ウィジェットを開く商品属性を作成したいと思います。

選択後、選択したSKUはコンマ区切り形式で入力されます。

この動作は、カタログおよびショッピングカートの価格ルールで確認できます。ルールをSKUでフィルタリングすると(「ルールに適用」するにはSKU属性を有効にする必要があります)、商品選択ウィジェットを開くフィールドとボタンが表示されます。

4

1 に答える 1

1

以下に、正しい軌道に乗るためのいくつかの考えを示します。

まず、セットアップ スクリプトでエンティティを作成します。

$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 の部分をカバーしていませんが、残りの作業に非常に近づくことができます。

于 2012-11-16T17:31:06.057 に答える