#forms #magento #panel #admin
#формы #magento #панель #администратор
Вопрос:
привет, ребята, у меня проблема с действием формы, созданной панелью администратора magento для пользовательского модуля.
Это структура моих файлов в app / code / local / Namespace / Zipcodes / Block
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() amp;amp; 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();
}
Это мой Block/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');
}
}
Это мой Block/Adminhtml/Importblock/Edit/Tab/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();
}
}
this is my Block/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'
)
);
Но по-прежнему отображается действие формы как / save, а не как / import. Кто-нибудь может мне помочь с этим
Ребята, я нашел еще одну подсказку
файл под Adminhtml/Zipcodes/Edit/Form.php вызывается в форме importblock, поэтому действие не устанавливается во время выполнения. Теперь кто-нибудь может мне помочь, как удалить эту ошибку и сделать правильную ссылку на Adminhtml/Importblock/Edit/Form.php
Спасибо, пожалуйста, это так близко, помогите мне
Ответ №1:
Это происходит немного поздно, но может быть полезно для других, у которых возникает эта проблема.
В вашем 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 amp;amp; $this->_controller amp;amp; $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';
Это должно сработать.
С уважением,
Ответ №3:
Добавьте эту строку перед вызовом setForm():
`$form->setUseContainer(true);`
Это волшебный установщик для параметра useContainer массива _data для этого блока. Используется для указания виджету блока формы администратора распечатать тег с правильным URL действия, а также скрытый ввод, используемый для проверки сеанса.Вариен, если ты слушаешь, сделай этот ключ true по умолчанию. Обычно при использовании виджета формы вам также хотелось бы, чтобы к нему прилагался тег формы.