Я работаю над пользовательским расширением Magento (1.9.0.1 версии).
Позвольте мне описать вам мою проблему в картинках:
Когда я нажимаю кнопку, чтобы перейти на следующую страницу:
И тогда возникает эта проблема:
Как видите, по любой причине поля Magento, указанные на рисунке, удваиваются, а Loading
блок в середине не исчезает.
Позвольте мне показать вам весь мой конфигурационный файл:
<?xml version="1.0"?>
<config>
<modules>
<VivasIndustries_SmsNotification>
<version>1.0.0</version>
</VivasIndustries_SmsNotification>
</modules>
<global>
<models>
<smsnotification>
<class>VivasIndustries_SmsNotification_Model</class>
<resourceModel>vivasindustries_smsnotification_resource</resourceModel>
</smsnotification>
<vivasindustries_smsnotification_resource>
<class>VivasIndustries_SmsNotification_Model_Resource</class>
<entities>
<smsnotification>
<table>VivasIndustries_SmsNotification</table>
</smsnotification>
<smsnotificationhistory>
<table>VivasIndustries_SmsHistory</table>
</smsnotificationhistory>
</entities>
</vivasindustries_smsnotification_resource>
</models>
<resources>
<smsnotification_setup>
<setup>
<module>VivasIndustries_SmsNotification</module>
</setup>
<connection>
<use>core_setup</use>
</connection>
</smsnotification_setup>
<smsnotification_read>
<connection>
<use>core_read</use>
</connection>
</smsnotification_read>
<smsnotification_write>
<connection>
<use>core_write</use>
</connection>
</smsnotification_write>
</resources>
<events>
<sales_order_save_after>
<observers>
<vivasindustries_smsnotification>
<class>smsnotification/observer</class>
<method>orderSaved</method>
</vivasindustries_smsnotification>
</observers>
</sales_order_save_after>
</events>
<helpers>
<smsnotification>
<class>VivasIndustries_SmsNotification_Helper</class>
</smsnotification>
</helpers>
<blocks>
<smsnotification>
<class>VivasIndustries_SmsNotification_Block</class>
</smsnotification>
</blocks>
</global>
<adminhtml>
<acl>
<resources>
<all>
<title>Allow Everything</title>
</all>
<admin>
<children>
<system>
<children>
<config>
<children>
<vivas>
<title>Vivas - All</title>
</vivas>
</children>
</config>
</children>
</system>
</children>
</admin>
</resources>
</acl>
<layout>
<updates>
<smsnotification>
<file>smsnotification.xml</file>
</smsnotification>
</updates>
</layout>
</adminhtml>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<VivasIndustries_SmsNotification before="Mage_Adminhtml">VivasIndustries_SmsNotification_Adminhtml</VivasIndustries_SmsNotification>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>
Вот файлы, которые создают таблицу сетки:
<?php
class VivasIndustries_SmsNotification_Block_Adminhtml_Sms_History extends Mage_Adminhtml_Block_Widget_Grid_Container{
public function __construct()
{
$this->_controller = 'adminhtml_sms_history';
$this->_blockGroup = 'smsnotification';
$this->_headerText = Mage::helper('smsnotification')->__('SMS History');
parent::__construct();
$this->_removeButton('add');
}
}
А также:
<?php
class VivasIndustries_SmsNotification_Block_Adminhtml_Sms_History_Grid extends Mage_Adminhtml_Block_Widget_Grid
{
public function __construct()
{
parent::__construct();
$this->setId('smsnotification_grid');
$this->setDefaultSort('id');
$this->setDefaultDir('DESC');
$this->setSaveParametersInSession(true);
$this->setUseAjax(true);
}protected function _prepareCollection()
{
$collection = Mage::getResourceModel('smsnotification/smsnotificationhistory_collection');
$this->setCollection($collection);
return parent::_prepareCollection();
}protected function _prepareColumns()
{
$this->addColumn('id', array(
'header' => Mage::helper('smsnotification')->__('ID'),
'align' =>'right',
'width' => '50px',
'index' => 'id',
));
$this->addColumn('receiver', array(
'header' => Mage::helper('smsnotification')->__('Receiver'),
'align' =>'left',
'index' => 'receiver',
));
$this->addColumn('phone', array(
'header' => Mage::helper('smsnotification')->__('Phone'),
'align' =>'left',
'index' => 'phone',
));
$this->addColumn('email', array(
'header' => Mage::helper('smsnotification')->__('Email'),
'align' =>'left',
'index' => 'email',
));
$this->addColumn('smstext', array(
'header' => Mage::helper('smsnotification')->__('SMS Text'),
'align' =>'left',
'index' => 'smstext',
));
$this->addColumn('date', array(
'header' => Mage::helper('smsnotification')->__('Date'),
'align' =>'left',
'index' => 'date',
));return parent::_prepareColumns();
}
public function getRowUrl($row)
{
return $this->getUrl('*/*/edit', array('id'=>$row->getId()));
}
}
Я не знаю, где моя ошибка и почему она удваивает эти поля.
У вас есть идеи, как решить эту проблему?
Спасибо!
Когда вы используете метод setUseAjax
Magento попытается перезагрузить только сетку на странице через ajax.
Таким образом, чтобы это работало, вы должны указать Magento, какой URL он должен получить, чтобы иметь скриншот, и только сетку, чтобы обновить его через ajax, в противном случае он будет неправильно предполагать, что он должен обновить сетку с помощью URL текущей страницы, поэтому добавление заголовка администратора во второй раз в div должен содержать только сетку. Как на ваших скриншотах.
Есть способ пойти:
В VivasIndustries_SmsNotification_Block_Adminhtml_Sms_History_Grid
добавьте эту функцию:
public function getGridUrl()
{
return $this->getUrl('*/*/smsGrid', array('_current'=>true));
}
Таким образом, вы также должны добавить это действие в свой контроллер VivasIndustries_SmsNotification_Adminhtml
и визуализировать блок с вашей сеткой и только этот.
Как это :
public function smsGridAction()
{
$this->getResponse()
->setBody($this->getLayout()
->createBlock('smsnotification/adminhtml_sms_history_grid')
->toHtml()
);
}
И тебе должно быть хорошо идти.
Других решений пока нет …