Saya telah membangun ekstensi pencari lokasi toko kustom dengan kisi itu sendiri dan mengedit halaman di Adminhtml dan semuanya berfungsi dengan baik. Untuk jam buka toko saya ingin menerapkan kotak dinamis seperti untuk opsi atribut.
Sekarang saya telah menemukan solusi tetapi saya berharap ada cara yang lebih baik, atau setidaknya lebih bersih. Apa yang saya miliki sejauh ini adalah menambahkan renderer ke bidang dalam formulirfieldset
class Redkiwi_Rkstorelocator_Block_Adminhtml_Rkstorelocator_Edit_Tab_General extends Mage_Adminhtml_Block_Widget_Form
{
protected function _prepareForm()
{
$form = new Varien_Data_Form();
$this->setForm($form);
$fieldset = $form->addFieldset('rkstorelocator_form', array('legend'=>Mage::helper('rkstorelocator')->__('Store information')));
[...]
$officehours_field = $fieldset->addField('office_hours', 'editor', array(
'name' => 'office_hours',
'label' => Mage::helper('rkstorelocator')->__('Office hours'),
'required' => false,
));
$officehours_block = $this->getLayout()
->createBlock('rkstorelocator/adminhtml_rkstorelocator_edit_renderer_officehours')
->setData(array(
'name' => 'office_hours',
'label' => Mage::helper('rkstorelocator')->__('Office hours'),
'required' => false,
));
$officehours_field->setRenderer($officehours_block);
[...]
}
}
Dan kelas blok untuk di-render
class Redkiwi_Rkstorelocator_Block_Adminhtml_Rkstorelocator_Edit_Renderer_Officehours
extends Mage_Adminhtml_Block_Abstract
implements Varien_Data_Form_Element_Renderer_Interface
{
public function render(Varien_Data_Form_Element_Abstract $element)
{
$required_indicator = $this->getData('required') ? '<span class="required">*</span>' : '' ;
$html = '
<table id="attribute-options-table" class="dynamic-grid rkstorelocator-officehours" cellspacing="0" cellpadding="0"><tbody>
<tr>
<th>Day indicator</th>
<th>Opening hour</th>
<th>Closing hour</th>
<th>
<button id="add_new_option_button" title="Add Option" type="button" class="scalable add"><span><span><span>Add Option</span></span></span></button>
</th>
</tr>
</tbody></table>
<script type="text/javascript">//<![CDATA[
var _form_html_row = \'<tr class="option-row rkstorelocator-officehours-dayrow" id="hour-row-{{id}}"><td><input name="'.$this->getData('name').'[value][option_{{id}}][0]" value="" class="input-text required-option" type="text"></td><td><input name="'.$this->getData('name').'[value][option_{{id}}][2]" value="" class="input-text required-option" type="text"></td><td><input name="'.$this->getData('name').'[value][option_{{id}}][2]" value="" class="input-text required-option" type="text"></td><td class="a-left" id="delete_button_container_option_{{id}}"><input type="hidden" class="delete-flag" name="'.$this->getData('name').'[delete][option_{{id}}]" value=""/><button onclick="$(\\\'hour-row-{{id}}\\\').remove();" title="Delete" type="button" class="scalable delete delete-option"><span><span><span>Delete</span></span></span></button></td></tr>\';
var _rkstorelocator_counter = 0;
$(\'add_new_option_button\').on(\'click\', \'button\', function(){
$(\'attribute-options-table\').insert(_form_html_row.replace(/\{\{id\}\}/ig, _rkstorelocator_counter));
_rkstorelocator_counter++;
});
//]]></script>
';
return $html;
}
}
Yang memberi saya hasil berikut
Sekarang ini pada dasarnya bekerja tetapi mendapatkan nilai saat ini di sana akan sangat berantakan dan semuanya saya tidak terlalu bangga dengan kode yang saya tulis (seperti yang Anda bayangkan).
Saya sudah mencari di Google untuk beberapa solusi tetapi semua umumnya mengambil pendekatan ini. Adakah yang tahu cara yang lebih bersih untuk melakukan ini?
sumber
Jawaban:
Butuh waktu lama bagi saya untuk menyadari bahwa harga Tier terlihat seperti yang saya inginkan. Jadi setelah melihat bagaimana Magento melakukannya dengan harga Tier, saya akhirnya melakukan hal berikut. Maaf sebelumnya untuk blok kode yang sangat besar tapi saya pikir mungkin menarik untuk referensi di masa mendatang.
Di kelas formulir saya
Redkiwi_Rkstorelocator_Block_Adminhtml_Rkstorelocator_Edit_Tab_General
Sekarang untuk kelas blok jam Office
Redkiwi_Rkstorelocator_Block_Adminhtml_Rkstorelocator_Edit_Renderer_Officehours
.Dan file .phtml template
adminhtml/default/default/template/rkstorelocator/officehours.phtml
Dan hasilnya:
Para Googler masa depan yang terhormat, Pada saat Anda membaca Magento 2.x ini akan dirilis. Mari berharap Magento membuat hal semacam ini sedikit lebih mudah. :)
sumber
Saya memberikan beberapa kode saya berdasarkan template Magento. Mungkin itu akan bermanfaat.
Beberapa antarmuka tab:
Dan template kehamilan / daftar / options.phtml:
sumber