Форма действий проблема с админ-панели magento - PullRequest
2 голосов
/ 11 апреля 2011

Привет, ребята. У меня проблема с действием формы для сгенерированной административной панелью magento формы для пользовательского модуля.

Это структура моих файлов в app / code / local / Namespace / Zipcodes /Блок

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 / Edit / Tab / Form.php

<code>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 '
';$ fieldset = $ form-> addFieldset ('zipcodes_form', массив ('legend' => Mage :: helper ('zipcodes') -> __ ('Предоставить файл данных')));$ fieldset-> addField ('csv_file', 'file', array ('label' => Mage :: helper ('zipcodes') -> __ ('CSV File'), 'class' => 'required-entry', 'required' => true, 'name' => 'csv_file',));вернуть родителя :: _ prepareForm ();}}

это мой Блок / Adminhtml / Importblock / Edit / 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')) в коде из-за этого, когда форма отображается, я вижу действие действия формы как / save вместо / import

Поэтому я изменил 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 / Zipcodes / Edit / Form.php вызывается в форме importblock, поэтому действиене устанавливается во время выполнения.Теперь кто-нибудь может мне помочь, как удалить эту ошибку и сделать правильную ссылку на Adminhtml / Importblock / Edit / Form.php

Спасибо Пожалуйста, это так близко, помогите мне

Ответы [ 3 ]

5 голосов
/ 04 апреля 2012

Это немного запаздывает, но может быть полезно для других, у которых возникла эта проблема.

В вашем 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 голосов
/ 01 сентября 2011

В вашем файле Namespace_Zipcodes_Block_Adminhtml_Importblock_Edit измените эту строку:

$this->_controller = 'adminhtml_zipcodes';

до

$this->_controller = 'adminhtml_zipcodes_import';

Это должно сработать.

С уважением,

1 голос
/ 22 мая 2012

Добавьте эту строку перед вызовом setForm():

   `$form->setUseContainer(true);` 

Это магический установщик для параметра useContainer массива _data для этого блока. Он используется для того, чтобы указать виджету бланка администратора, чтобы он распечатал тег с правильным URL-адресом действия, а также скрытый ввод, используемый для проверки сеанса. Обычно, с виджетом формы, вы хотите, чтобы с ним также был тег формы.

...