Magento - сеточный фильтр с использованием ajax перезагружает всю страницу - PullRequest
15 голосов
/ 16 декабря 2011

Я использую сетку в администраторе magento (расширение Mage_Adminhtml_Block_Widget_Grid) для отображения содержимого таблицы базы данных. Я видел в некоторых других модулях, что в конструкторе можно установить опцию для использования перезагрузки ajax вместо перезагрузки страницы
это мой конструктор:

public function __construct() {
    parent::__construct();
    $this->setId('myGrid');
    $this->setSaveParametersInSession(true);
    $this->setVarNameFilter('my_filter');
    $this->setUseAjax(true);
}

но когда я щелкаю по фильтру сетки и нажимаю кнопку поиска, она перезагружает ВЕСЬ страницу (включая верхний и нижний колонтитулы, ...) ВНУТРИ сетки.
Есть идеи, почему это так?

Ответы [ 4 ]

19 голосов
/ 16 декабря 2011

Я нашел решение:Сначала мне нужно было добавить следующую функцию в класс сетки

 public function getGridUrl()
 {
   return $this->getUrl('*/*/grid', array('_current'=>true));
 }

, после чего каждый вызов ajax будет отправляться на этот URL (и соответствующее действие контроллера), а не на URL страниц.затем я добавил следующий бит в XML-файл макета:

<module_controller_grid>
  <reference name="root">
    <block type="package/gridblockname" name="root" output="toHtml" />
  </reference>
</module_controller_grid>

, он перезаписывает корневой элемент и отображает только блок сетки.следовательно, мой вызов ajax загрузит только обновленную сетку и не будет включать заголовок, нижний колонтитул и т. д.

13 голосов
/ 12 ноября 2013

Добавить следующий код в функцию __construct () в:

app/code/local/[Name_Space]/[Module_Name]/Block/Adminhtml/[Module_Name]/Grid.php file.

$this->setUseAjax(true);

Теперь добавьте следующую функцию в конце этого файла.

public function getGridUrl()
  {
      return $this->getUrl('*/*/grid', array('_current'=>true));
  }

Теперь добавьте, наконец, следующую функцию в:

app/code/local/[Name_Space]/[Module_Name]/controllers/Adminhtml/[Module_Name]Controller.php file.

public function gridAction()
     {
        $this->loadLayout();
        $this->getResponse()->setBody(
               $this->getLayout()->createBlock('[Module_Name]/adminhtml_[Module_Name]_grid')->toHtml()
        );
     }

Предоставлено: Нирав Кадия

13 голосов
/ 01 сентября 2012

Вы также можете добавить метод gridAction в свой контроллер администратора вместо создания макета xml

public function gridAction()
{
    $this->loadLayout();
    $this->getResponse()->setBody(
           $this->getLayout()->createBlock('{Namespace}/adminhtml_{Module}/grid')->toHtml()
    ); 
}

Предполагая, что:

Путь к блоку: /app/code/local/{Namespace}/{Module}/Block/Adminhtml/{Module}/Grid.php

4 голосов
/ 12 марта 2016

Nirav Kadiya почти работает для меня, но я создаю функцию gridAction, как это в Admin Controller:

public function gridAction()
     {
        $this->loadLayout();
        $this->getResponse()->setBody(
               $this->getLayout()->createBlock('[Module_Name]_Block_Adminhtml_[Model_Name]_Grid')->toHtml()
        );
     }

И включаю это в файл de Grid

public function getGridUrl()
    {
          return $this->getUrl('*/*/grid', array('_current'=>true));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...