Добавить data_callback к сетке через php, а не xml - возможно ли это в Magento? - PullRequest
2 голосов
/ 21 марта 2011

Позвольте мне предвосхитить этот вопрос, объявив мой статус новичка, когда дело доходит до разработки интерфейса ...

Я пишу модуль администратора с новым экраном в панели администратора, состоящим из несколькихвкладки.Каждая вкладка добавляется с помощью функции $ this-addTab (...) в файле Tabs.php, например:

  $this->addTab('form_products', array(
              'label'     => Mage::helper('mymodule')->__('All The Products'),
              'title'     => Mage::helper('mymodule')->__('All The Products'),
              'content'   => $this->getLayout()->createBlock       ('mymodule/adminhtml_something_edit_tab_productsform')->toHtml(),
          ));

Эта вкладка содержит список продуктов с полем для флажка, заполненным функцией getSelectedProducts ().Файл блока для этой вкладки расширяется Mage_Adminhtml_Block_Widget_Grid

В ядре Magento я вижу, что вы используете что-то вроде следующего для объявления скрытого имени поля и функции обратного вызова данных:

   <block type="adminhtml/widget_grid_serializer" name="related_grid_serializer">
                <reference name="related_grid_serializer">
                    <action method="initSerializerBlock">
                        <grid_block_name>catalog.product.edit.tab.related</grid_block_name>
                        <data_callback>getSelectedRelatedProducts</data_callback>
                        <hidden_input_name>links[related]</hidden_input_name>
                        <reload_param_name>products_related</reload_param_name>
                    </action>
                    <action method="addColumnInputName">
                        <input_name>position</input_name>
                    </action>
                </reference>
     </block>

Мой вопросЕсть ли возможность объявить скрытое имя входа и функцию обратного вызова и т. д. во время создания блока в php?

Если нет, то мне нужна помощь с макетом xml .......

В данный момент мой файл layout.xml выглядит следующим образом:

<?xml version="1.0"?>
<layout version="0.1.0">
     <mymodule_adminhtml_something_index>
        <reference name="content">
            <block type="mymodule/adminhtml_something" name="something" />
   </reference>
    </mymodule_adminhtml_something_index>
</layout>

Я попытался добавить объявление вложенного блока в это, например,

<?xml version="1.0"?>
<layout version="0.1.0">
    <mymodule_adminhtml_something_index>
        <reference name="content">
            <block type="mymodule/adminhtml_something" name="something" />
            <block type="mymodule/adminhtml_something_edit_tab_productsform" name="mymodule.adminhtml.something.edit.tab.productsform"/> 
            <block type="adminhtml/widget_grid_serializer" name="something_grid_serializer">
                <reference name="something_grid_serializer">
                    <action method="initSerializerBlock">
                        <grid_block_name>mymodule.adminhtml.something.edit.tab.productsform</grid_block_name>
                        <data_callback>getSelectedProducts</data_callback>
                        <hidden_input_name>links[selected]</hidden_input_name>
                        <reload_param_name>products_selected</reload_param_name>
                    </action>
                </reference> 
            </block> 
        </reference>
    </mymodule_adminhtml_something_index>

</layout>

Вышеуказанные ошибки, так как он загружает мой файл блока одновременно с файлом основного блока (что, очевидно, не правильно).Я возился с вложением блоков выше и объявлением в отдельных тегах, например:

<mymodule_adminhtml_something_edit_form> 

Движущей силой этого является попытка получить данные о любых флажках, выбранных в форме продуктов, опубликованных, когда формасохранено, чего на данный момент не происходит.

1 Ответ

1 голос
/ 21 марта 2011

Вы должны знать, что <action method=...> в файлах макета просто вызывает именованный метод в экземпляре блока.

В приведенном выше примере related_grid_serializer является объектом Mage_Adminhtml_Block_Widget_Grid_Serializer, и это,

<action method="initSerializerBlock">
    <grid_block_name>catalog.product.edit.tab.related</grid_block_name>
    <data_callback>getSelectedRelatedProducts</data_callback>
    <hidden_input_name>links[related]</hidden_input_name>
    <reload_param_name>products_related</reload_param_name>
</action>

в точности эквивалентно:

->initSerializerBlock('catalog.product.edit.tab.related',
    'getSelectedRelatedProducts',
    'links[related]',
    'products_related');

Вы можете вызывать этот метод непосредственно из своего собственного класса.

(Обратите внимание, что имена тегов <grid_block_name>, <data_callback>, <hidden_input_name> и <reload_param_name> игнорируются. Они существуют только для удобства чтения.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...