2011-04-11 33 views
2

嗨 夥計們我有一個自定義模塊的magento管理面板生成的窗體的表單行爲的問題。管理面板magento形式操作問題

這是我的文件下的應用程序/代碼/本地/命名空間結構/郵編/砌塊

Block 
| 
|____Adminhtml 
    | 
    |____ Importblock 
     | 
     |__Edit 
     | |__Form.php 
     | |__Tabs.php 
     | | 
     | |__Tab 
     |  |___Form.php 
     | 
     |__Edit.php 
     | 
     | 
     Zipcodes 
     | 
     |__Edit 
     | |__Form.php // << this file is getting called in importblock form 
     | |__Tabs.php 
     | | 
     | |__Tab 
     |  |___Form.php 
     | 
     |__Edit.php 

這是我ZipcodesController.php

public function importAction() 
{ 

    if ($data = $this->getRequest()->getPost() && isset($_FILES['csv_file']['name'])) 
    { 
     echo '<br> hi ! we uploaded the file'; 
    } 
    $this->_initAction(); 

    $this->_addContent($this->getLayout()->createBlock('zipcodes/adminhtml_importblock_edit')) 
      ->_addLeft($this->getLayout()->createBlock('zipcodes/adminhtml_importblock_edit_tabs')); 

    $this->renderLayout(); 
} 

的操作方法,這是我的座/Adminhtml/Importblock/Edit.php

<?php 
    class Namespace_Zipcodes_Block_Adminhtml_Importblock_Edit extends Mage_Adminhtml_Block_Widget_Form_Container 
{ 
    public function __construct() 
    { 
    parent::__construct(); 
    $this->_objectId = 'id'; 
    $this->_blockGroup = 'zipcodes'; 
    $this->_controller = 'adminhtml_zipcodes'; 
    $this->_updateButton('save', 'label', Mage::helper('zipcodes')->__('Upload file')); 

} 

public function getHeaderText() 
{ 
    return Mage::helper('zipcodes')->__('Import Zipcode data'); 

} 

}

這是我的座/ Adminhtml/Importblock /編輯/標籤/ form.php的

class Namespace_Zipcodes_Block_Adminhtml_Importblock_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form 
{ 
    protected function _prepareForm() 
     { 

    $form = new Varien_Data_Form(array(
      'id' => 'edit_form', 
      'action' => $this->getUrl('*/*/import'), 
      'method' => 'post', 
      'enctype' => 'multipart/form-data' 
     ) 
    ); 
    $this->setForm($form); 
    //echo '<br>form.php bahar<pre>';print_r(get_class_methods(get_class($form))); echo '</pre>'; 
    $fieldset = $form->addFieldset('zipcodes_form', array('legend' 
        => Mage::helper('zipcodes')->__('Provide data file'))); 

    $fieldset->addField('csv_file', 'file', array(
        'label' => Mage::helper('zipcodes')->__('CSV File'), 
        'class' => 'required-entry', 
        'required' => true, 
        'name' => 'csv_file', 
      )); 

    return parent::_prepareForm(); 
} 
} 

這是我的座/ Adminhtml/Importblock /編輯/ Tabs.php

class Namespace_Zipcodes_Block_Adminhtml_Importblock_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs 
{ 
public function __construct() 
{ 
    parent::__construct(); 
    $this->setId('zipcode_import_tabs'); 
    $this->setDestElementId('edit_form'); 
    $this->setTitle(Mage::helper('zipcodes')->__('Import Zipcodes')); 
} 

protected function _beforeToHtml() 
{ 
    $this->addTab('form_section', array(
      'label' => Mage::helper('zipcodes')->__('Zipcode Info'), 
      'title' => Mage::helper('zipcodes')->__('Zipcode Info'), 
      'content' => $this->getLayout() 
       ->createBlock('zipcodes/adminhtml_importblock_edit_tab_form')->toHtml(), 
      'active' => true 
     )); 

    return parent::_beforeToHtml(); 
} 
} 

&最後這是我Block_Adminhtml_Importblock_Edit_Form.php

class Namespace_Zipcodes_Block_Adminhtml_Importblock_Edit_Form extends Mage_Adminhtml_Block_Widget_Form 
{ 
    protected function _prepareForm() 
    { 
     $form = new Varien_Data_Form(array(
       'id' => 'edit_form', 
       'action' => $this->getUrl('*/*/import'), 
       'method' => 'post', 
      ) 
     ); 

     $form->setUseContainer(true); 
     $this->setForm($form); 
     return parent::_prepareForm(); 
    } 
} 

,當我運行代碼的最後一個文件不會被調用。因爲我使用的代碼$this->_addContent($this->getLayout()->createBlock('zipcodes/adminhtml_importblock_edit'))由於這個時候的形式獲取呈現我看到的形式行動行動/保存,而不是/進口

所以我改變了Block_Adminhtml_Importblock_Edit_Tab_Form &寫道

$form = new Varien_Data_Form(array(
      'id' => 'edit_form', 
      'action' => $this->getUrl('*/*/import'), 
      'method' => 'post', 
      'enctype' => 'multipart/form-data' 
     ) 
    ); 

但仍是其表現形式操作爲/保存不導入。任何人可以幫助我解決這個


傢伙,我發現多了一個線索

下的文件Adminhtml /郵編/編輯/ form.php的是越來越稱爲importblock的形式 這就是爲什麼該動作沒有得到在運行時設置。 現在誰能幫助我如何刪除此錯誤&做出正確的參考Adminhtml/Importblock /編輯/ form.php的

由於其請這麼近幫我

回答

5

這來得有點遲,但可能是其他人得到這個問題有幫助。

在你Namespace_Zipcodes_Block_Adminhtml_Importblock_Edit類,你必須:

$this->_objectId = 'id'; 
$this->_blockGroup = 'zipcodes'; 
$this->_controller = 'adminhtml_zipcodes'; 

,但有一個屬性丟失:$this->_mode

設置$this->_mode'import'將有助於你得到正確的行動。

$this->_objectId = 'id'; 
$this->_blockGroup = 'zipcodes'; 
$this->_controller = 'adminhtml_zipcodes'; 
$this->_mode  = 'import' 

改變之後,你會得到您的形式正確的行動。

默認模式爲edit

class Mage_Adminhtml_Block_Widget_Form_Container extends  Mage_Adminhtml_Block_Widget_Container 
{ 
protected $_objectId = 'id'; 
protected $_formScripts = array(); 
protected $_formInitScripts = array(); 
protected $_mode = 'edit'; 
protected $_blockGroup = 'adminhtml'; 

的用於_prepareLayout()函數:

protected function _prepareLayout() 
{ 
    if ($this->_blockGroup && $this->_controller && $this->_mode) { 
     $this->setChild('form', $this->getLayout()->createBlock($this->_blockGroup . '/' . $this->_controller . '_' . $this->_mode . '_form')); 
    } 
    return parent::_prepareLayout(); 
} 

正如你可以看到你的塊來代替,默認你得到的edit_form塊。

乾杯。

2

在你Namespace_Zipcodes_Block_Adminhtml_Importblock_Edit文件,改變這一行:

$this->_controller = 'adminhtml_zipcodes'; 

$this->_controller = 'adminhtml_zipcodes_import'; 

這應該做的伎倆。

問候,

1

主叫setForm():

`$form->setUseContainer(true);` 

這是一個魔法設定器用於此塊的_data陣列的useContainer參數之前添加此行。它用來告訴管理員窗體部件使用正確的動作url打印出一個標籤,以及用於驗證會話的隱藏輸入。如果您正在聆聽,則使用隱藏輸入.Varien默認情況下使該鍵成爲true。通常,使用表單小部件時,您也需要一個表單標記。