2011-03-21 43 views
2

讓我通過聲明我的新手狀態來說明這個問題,當涉及到前端開發...通過php的xml添加'data_callback'到網格 - 它可能在Magento中嗎?

我正在管理面板中編寫一個管理模塊,其中包含一些選項卡。每個選項卡都使用Tabs.php文件中的$ this-addTab(...)函數添加,例如

$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> 

我的問題是,它可能會聲明隱藏的輸入名稱和回調函數等,在建設過程中的塊內?

如果不是,那麼我需要佈局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> 

這背後的驅動力是試圖讓當表單保存,這在目前是不會發生的產品形式選擇任何複選框的數據回發。

+0

看起來像我的代碼被殲滅....會盡力解決 – Gen 2011-03-21 03:05:45

回答

1

您需要知道,佈局文件中的<action method=...>只是調用實例化塊上的命名方法。

在上面的例子related_grid_serializerMage_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>標籤名稱將被忽略。它們的存在僅出於可讀性的原因。)