मैंने स्वयं के ग्रिड के साथ एक कस्टम स्टोर लोकेटर एक्सटेंशन का निर्माण किया है और एडमिनबुक में पृष्ठों को संपादित करता है और सब कुछ बहुत अच्छा काम करता है। दुकानों के शुरुआती घंटों के लिए मैं विशेषता विकल्पों के लिए एक गतिशील ग्रिड को लागू करना चाहूंगा।
अब मुझे एक समाधान मिल गया है, लेकिन मुझे उम्मीद है कि एक बेहतर, या कम से कम क्लीनर तरीका है। मेरे पास अब तक फॉर्म में एक रेंडर को फ़ील्ड में जोड़ रहा हैfieldset
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);
[...]
}
}
और रेंडर करने के लिए एक ब्लॉक क्लास
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;
}
}
जो मुझे निम्नलिखित परिणाम देता है
अब यह मूल रूप से काम करता है, लेकिन वहां के मौजूदा मूल्यों को प्राप्त करना काफी गड़बड़ हो जाएगा और सभी में मुझे उस कोड पर गर्व नहीं होगा जो मैंने लिखा है (जैसा कि आप कल्पना कर सकते हैं)।
मैंने कई समाधानों के लिए Googled है, लेकिन सभी आम तौर पर इस दृष्टिकोण को लेते हैं। क्या किसी को यह करने के लिए एक क्लीनर तरीका पता है?