আমি এটির নিজস্ব গ্রিড এবং এডমিনটিচটিএমএল পৃষ্ঠাগুলি সম্পাদনা করে একটি কাস্টম স্টোর লোকেটার এক্সটেনশন তৈরি করেছি এবং সবকিছু দুর্দান্ত কাজ করে। স্টোরগুলির খোলার সময়গুলিতে আমি অ্যাট্রিবিউট বিকল্পগুলির মতো একটি গতিশীল গ্রিড প্রয়োগ করতে চাই।
এখন আমি একটি সমাধান খুঁজে পেয়েছি তবে আমি আশা করছি এর থেকে ভাল বা কমপক্ষে আরও ভাল উপায় আছে। আমার এখন পর্যন্ত যা আছে তা ফর্মের ক্ষেত্রে একটি রেন্ডারার যুক্ত করছে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;
}
}
যা আমাকে নিম্নলিখিত ফলাফল দেয়
এখন এটি মূলত কাজ করে তবে বর্তমান মানগুলি পাওয়া সেখানে যথেষ্ট অগোছালো হবে এবং সব মিলিয়ে আমি যে কোডটি লিখেছি সে সম্পর্কে আমি খুব বেশি গর্বিত নই (যেমন আপনি কল্পনাও করতে পারেন)।
আমি বেশ কয়েকটি সমাধানের জন্য গুগল করেছি তবে সকলেই সাধারণত এই পদ্ধতিটি গ্রহণ করেন। কেউ কি এটি করার একটি ক্লিনার উপায় জানেন?