Ich habe eine benutzerdefinierte Filialfinder-Erweiterung mit einem eigenen Raster erstellt und Seiten im Adminhtml bearbeitet, und alles funktioniert hervorragend. Für die Öffnungszeiten der Filialen möchte ich ein dynamisches Raster wie für die Attributoptionen implementieren.
Jetzt habe ich eine Lösung gefunden, aber ich hoffe, dass es einen besseren oder zumindest saubereren Weg gibt. Bisher habe ich dem Feld im Formular einen Renderer hinzugefügtfieldset
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);
[...]
}
}
Und eine Blockklasse zum Rendern
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;
}
}
Welches gibt mir das folgende Ergebnis
Das funktioniert im Grunde genommen, aber die aktuellen Werte zu ermitteln, wird ziemlich chaotisch sein, und insgesamt bin ich nicht allzu stolz auf den Code, den ich geschrieben habe (wie Sie sich vorstellen können).
Ich habe nach mehreren Lösungen gegoogelt, aber im Allgemeinen verfolgen alle diesen Ansatz. Kennt jemand einen saubereren Weg, um dies zu tun?
quelle
Antworten:
Es hat viel zu lange gedauert, bis mir klar wurde, dass die Tier-Preise so aussehen, wie ich es will. Nachdem ich mir angesehen hatte, wie Magento mit Tier Pricing umgeht, ging ich folgendermaßen vor. Entschuldigung im Voraus für die riesigen Codeblöcke, aber ich dachte, es könnte für zukünftige Referenz interessant sein.
In meiner Formklasse
Redkiwi_Rkstorelocator_Block_Adminhtml_Rkstorelocator_Edit_Tab_General
Nun zur Sprechstunde
Redkiwi_Rkstorelocator_Block_Adminhtml_Rkstorelocator_Edit_Renderer_Officehours
.Und die Vorlage .phtml-Datei
adminhtml/default/default/template/rkstorelocator/officehours.phtml
Und das Ergebnis:
Sehr geehrte zukünftige Googler, wenn Sie dies lesen, wird Magento 2.x veröffentlicht. Hoffen wir, dass Magento solche Dinge ein bisschen einfacher gemacht hat. :)
quelle
Ich gebe einige meiner Codes, die auf Magento-Vorlagen basieren. Vielleicht wird es nützlich sein.
Einige Registerkarten:
Und Schwangerschaft / Liste / options.phtml Vorlage:
quelle