1

オプションのテキスト フィールドを持つカスタム モジュールがあります ( system.xmlの標準テキスト フィールド オプションで表示されます)。私がやりたいことは、1 つの必須テキスト フィールドを表示し、[+ Add Field]のようなボタンを表示することです。そのボタンを押すと、別のテキスト フィールドが追加されます。最大10 個の合計テキスト フィールド (最大)に対してこれを実行したいと思います。誰かがこれを達成するのを手伝ったり、これを行う方法に関する素晴らしいチュートリアルを教えてくれますか?

編集 2012 年 7 月 10 日 @ 午前 11 時 30 分

私はこれに取り組んできましたが、これまでのところテキストフィールドを表示させることができます。ただし、いくつか問題があります...

  1. [Save Config] ボタンを押しても、これらの動的に作成されたテキスト フィールドに入力された値は実際には保存されません。
  2. 実際に保存されるテキスト フィールドの数を制限する方法はありますか?
  3. テキスト フィールドのデータを取得する正しい方法がわかりません。これは主に、値を保存できないという事実によるものです...(これで助けが必要な場合は、#1が修正された後に別の更新を追加します...)

私のSystem.xmlファイルにはこれが含まれています(これに直接関連しています)。

<labels translate="label">
    <label>This is some label</label>
    <comment>This is some comment.</comment>
    <tooltip><![CDATA[This is some tooltip]]></tooltip>
    <frontend_type>text</frontend_type>
    <frontend_model>Company_Namespace/adminhtml_textfields</frontend_model>
    <backend_model>adminhtml/system_config_backend_serialized</backend_model>
    <sort_order>50</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>0</show_in_store>
</labels>

私のカスタムTextfields.php (frontend_model) ファイルの内容:

<?php

class Company_Namespace_Block_Adminhtml_Textfields extends Mage_Adminhtml_Block_System_Config_Form_Field
{
protected $_addRowButtonHtml = array();
protected $_removeRowButtonHtml = array();

protected function _getElementHtml(Varien_Data_Form_Element_Abstract $element)
{
    $this->setElement($element);

    $html = '<div id="code_label_textfields_template" style="display:none">';
    $html .= $this->_getRowTemplateHtml();
    $html .= '</div>';

    $html .= '<ul id="code_label_textfields_container">';

    if ($this->_getValue('method')) {
        foreach ($this->_getValue('method') as $i=>$f) {
            if ($i) {
                $html .= $this->_getRowTemplateHtml($i);
            }
        }
    }

    $html .= '</ul>';


    $html .= $this->_getAddRowButtonHtml('code_label_textfields_container', 'code_label_textfields_template', $this->__('Button Label Here'));

    return $html;
}

protected function _getRowTemplateHtml()
{
    $html = '<li>';

    $html .= '<div style="margin:5px 0 10px;">';
    $html .= '<input class="input-text" name="'.$this->getElement()->getName().'" value="'.$this->_getValue('price/'.$i).'" '.$this->_getDisabled().'/> ';

    $html .= $this->_getRemoveRowButtonHtml();
    $html .= '</div>';

    $html .= '</li>';

    return $html;
}



protected function _getDisabled()
{
    return $this->getElement()->getDisabled() ? ' disabled' : '';
}

protected function _getValue($key)
{
    return $this->getElement()->getData('value/'.$key);
}

protected function _getSelected($key, $value)
{
    return $this->getElement()->getData('value/'.$key)==$value ? 'selected="selected"' : '';
}

protected function _getAddRowButtonHtml($container, $template, $title='Add')
{
    if (!isset($this->_addRowButtonHtml[$container])) {
        $this->_addRowButtonHtml[$container] = $this->getLayout()->createBlock('adminhtml/widget_button')
                ->setType('button')
                ->setClass('add '.$this->_getDisabled())
                ->setLabel($this->__($title))
                //$this->__('Add')
                ->setOnClick("Element.insert($('".$container."'), {bottom: $('".$template."').innerHTML})")
                ->setDisabled($this->_getDisabled())
                ->toHtml();
    }
    return $this->_addRowButtonHtml[$container];
}

protected function _getRemoveRowButtonHtml($selector='li', $title='Remove')
{
    if (!$this->_removeRowButtonHtml) {
        $this->_removeRowButtonHtml = $this->getLayout()->createBlock('adminhtml/widget_button')
                ->setType('button')
                ->setClass('delete v-middle '.$this->_getDisabled())
                ->setLabel($this->__($title))
                //$this->__('Remove')
                ->setOnClick("Element.remove($(this).up('".$selector."'))")
                ->setDisabled($this->_getDisabled())
                ->toHtml();
    }
    return $this->_removeRowButtonHtml;
}
}

特に値を保存するために、何が欠けていますか???

4

1 に答える 1

1

例については、system.xmlおよびブロックを参照してください。Mage_GoogleCheckout_Block_Adminhtml_Shipping_Merchant少し複雑ですが、機能します。これは、Google Checkout の Merchant Calculated 設定で確認できます。

于 2012-07-07T02:53:38.290 に答える