管理者ユーザーが必要なだけフィールドを生成できるようにしたい。別の拡張機能で解決策を見つけ、それを出発点として使用しました。だから私はこのようなコードを持っています:
でsystem.xml
:
<showcases translate="label">
<label>Showcases</label>
<frontend_type>text</frontend_type>
<sort_order>10</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<fields>
<showcase translate="label">
<label>Showcases</label>
<frontend_type>select</frontend_type>
<frontend_model>awesomehome/adminhtml_showcases</frontend_model>
<backend_model>adminhtml/system_config_backend_serialized</backend_model>
<sort_order>410</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
</showcase>
</fields>
</showcases>
そしてでNamespace/Awesomehome/Block/Adminhtml/Showcases.php
:
class Namespace_Awesomehome_Block_Adminhtml_Showcases
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="showcase_template" style="display:none">';
$html .= $this->_getRowTemplateHtml();
$html .= '</div>';
$html .= '<ul id="showcase_container">';
if ($this->_getValue('showcases')) {
foreach (array_keys($this->_getValue('showcases')) as $row) {
if ($row) {
$html .= $this->_getRowTemplateHtml($row);
}
}
}
$html .= '</ul>';
$html .= $this->_getAddRowButtonHtml(
'showcase_container',
'showcase_template', $this->__('Add new showcase')
);
return $html;
}
protected function _getRowTemplateHtml($row = 0)
{
$html = '<li><fieldset>';
$html .= $this->_getShowcaseTypeHtml($row);
$html .= $this->_getRemoveRowButtonHtml();
$html .= '</fieldset></li>';
return $html;
}
protected function _getShowcaseTypeHtml($row) {
$html = '<label>' . $this->__('Showcase type:') . '</label>';
$html .= '<select style="width:100%;" class="input-text" name="' . $this->getElement()->getName() . '[type][]">';
$html .= '<option value="1" '
. ($this->_getValue('type/' . $row) == "1" ? 'selected="selected"' : '') .'>'
. $this->__("Simple") . "</option>";
$html .= '<option value="2" '
. ($this->_getValue('type/' . $row) == "2" ? 'selected="selected"' : '') .'>'
. $this->__("With Image") . "</option>";
$html .= '</select><br/>';
return $html;
}
期待どおりに動作し、次のようになります。
次に、フィールドセットに画像アップロードフィールドを追加します。どうすればよいですか?
更新:
私はsystem.xml
あなたがこのコードを書いて画像フィールドを追加できることを知っています:
<image translate="label">
<label>Image</label>
<frontend_type>image</frontend_type>
<backend_model>adminhtml/system_config_backend_image</backend_model>
<upload_dir config="system/filesystem/media" scope_info="1">awesomehome/topcategories</upload_dir>
<base_url type="media" scope_info="1">awesomehome/topcategories</base_url>
<sort_order>30</sort_order>
<show_in_default>1</show_in_default>
<show_in_website>1</show_in_website>
<show_in_store>1</show_in_store>
<comment>Allowed file types: jpeg, gif, png.</comment>
</image>
ただし、1つではなく複数のフィールドが必要なので、この方法は使用できません。
system.xml
私の場合は使用できません。私の質問をもう一度読んでください。