Mufaddal
Mufaddal

Reputation: 5381

Grid layout in magento

I have create one custom tab in my module and display one grid output successfully, but my question is how we can display two grid serializer block in one page? i have tried to out put with calling two serializer block with this code.

public function customgridAction()

{
   $this->loadLayout();
    $this->getLayout()->getBlock('regionpage.productgrid')->setProductsGrid($this->getRequest()->getPost('products_grid', null));
    $this->getLayout()->getBlock('regionpage.articlegrid')->setArticlesGrid($this->getRequest()->getPost('articles_grid', null));
    $this->renderLayout();
}

And this is what my layout xml look like

<regionpage_adminhtml_regionpage_customgrid>
<block type="core/text_list" name="root">
    <block type="regionpage/adminhtml_regionpage_edit_tab_productgrid" name="regionpage.productgrid"/>
    <block type="adminhtml/widget_grid_serializer" name="regionpage_productgrid">
        <reference name="regionpage_productgrid">
            <action method="initSerializerBlock">
                <grid_block_name>regionpage.productgrid</grid_block_name>
                <data_callback>getSelectedProducts</data_callback>
                <hidden_input_name>links[productgrid]</hidden_input_name>
                <reload_param_name>products_grid</reload_param_name>
            </action>
            <action method="addColumnInputName">
                <input_name>position</input_name>
            </action>
        </reference>
    </block>
</block>

 <regionpage_adminhtml_regionpage_customgrid>
    <block type="core/text_list" name="root">
        <block type="regionpage/adminhtml_regionpage_edit_tab_articlegrid" name="regionpage.articlegrid"/>
        <block type="adminhtml/widget_grid_serializer" name="regionpage_articlegrid">
            <reference name="regionpage_articlegrid">
                <action method="initSerializerBlock">
                    <grid_block_name>regionpage.articlegrid</grid_block_name>
                    <data_callback>getSelectedArticles</data_callback>
                    <hidden_input_name>links[articlegrid]</hidden_input_name>
                    <reload_param_name>articles_grid</reload_param_name>
                </action>
                <action method="addColumnInputName">
                    <input_name>position</input_name>
                </action>
            </reference>
        </block>
    </block>
 </regionpage_adminhtml_regionpage_customgrid>

But it output last block not both block.

Upvotes: 1

Views: 997

Answers (1)

Mufaddal
Mufaddal

Reputation: 5381

Ok I think I have cracked it.

The problem appears to be when you are using the wrapping block

<block type="core/text_list" name="root">

Once you have defined a block of name "root" then it will be overridden if another block with the same name comes along later. (Correct me if I am wrong)

There are two solutions you could try.

  1. Combine both your xml into one section

Which would make your xml as follows

<regionpage_adminhtml_regionpage_customgrid>
    <block type="core/text_list" name="root">
    <block type="regionpage/adminhtml_regionpage_edit_tab_productgrid" name="regionpage.productgrid"/>
    <block type="adminhtml/widget_grid_serializer" name="regionpage_productgrid">
        <reference name="regionpage_productgrid">
            <action method="initSerializerBlock">
                <grid_block_name>regionpage.productgrid</grid_block_name>
                <data_callback>getSelectedProducts</data_callback>
                <hidden_input_name>links[productgrid]</hidden_input_name>
                <reload_param_name>products_grid</reload_param_name>
            </action>
            <action method="addColumnInputName">
                <input_name>position</input_name>
            </action>
        </reference>
    </block>
    <block type="regionpage/adminhtml_regionpage_edit_tab_articlegrid" name="regionpage.articlegrid"/>
        <block type="adminhtml/widget_grid_serializer" name="regionpage_articlegrid">
            <reference name="regionpage_articlegrid">
                <action method="initSerializerBlock">
                    <grid_block_name>regionpage.articlegrid</grid_block_name>
                    <data_callback>getSelectedArticles</data_callback>
                    <hidden_input_name>links[articlegrid]</hidden_input_name>
                    <reload_param_name>articles_grid</reload_param_name>
                </action>
                <action method="addColumnInputName">
                    <input_name>position</input_name>
                </action>
            </reference>
        </block>
    </block>
</regionpage_adminhtml_regionpage_customgrid>
  1. Simple replace in your second section the follow section

With a reference node which would make your second section look like

<regionpage_adminhtml_regionpage_customgrid>
    <reference name="root">
    <block type="regionpage/adminhtml_regionpage_edit_tab_articlegrid" name="regionpage.articlegrid"/>
        <block type="adminhtml/widget_grid_serializer" name="regionpage_articlegrid">
            <reference name="regionpage_articlegrid">
                <action method="initSerializerBlock">
                    <grid_block_name>regionpage.articlegrid</grid_block_name>
                    <data_callback>getSelectedArticles</data_callback>
                    <hidden_input_name>links[articlegrid]</hidden_input_name>
                    <reload_param_name>articles_grid</reload_param_name>
                </action>
                <action method="addColumnInputName">
                    <input_name>position</input_name>
                </action>
            </reference>
        </block>
    </reference>
</regionpage_adminhtml_regionpage_customgrid>

Here is a magento stack exchange answer https://magento.stackexchange.com/questions/3376/grid-layout-in-magento/3804#3804

Upvotes: 1

Related Questions