Щоб додати фільтр за замовчуванням до мережі в Magento2?


12

Я створив один спеціальний модуль з атрибутом поля заголовка та статусу в сітці адміністратора.

Колекції сітки в module_test_grid_block.xml

        <arguments>
             <argument name="id" xsi:type="string">testGrid</argument>
             <argument name="dataSource" xsi:type="object">Namespace\Module\Model\ResourceModel\test\Collection</argument>
             <argument name="default_sort" xsi:type="string">id</argument>
             <argument name="default_dir" xsi:type="string">desc</argument>                             
             <argument name="grid_url" xsi:type="url" path="*/*/grid"><param name="_current">1</param></argument>
         </arguments>

Я хочу показати дані, які увімкнено. Чи є можливість додати фільтр за замовчуванням у колекції сітки адміністратора ?

EDIT

    <block class="Namespace\Module\Block\Adminhtml\Test\Grid" name="namespace_module_test.grid" as="grid">
       <arguments>
             <argument name="id" xsi:type="string">testGrid</argument>
             <argument name="dataSource" xsi:type="object">Namespace\Module\Model\ResourceModel\test\Collection</argument>
             <argument name="default_sort" xsi:type="string">id</argument>
             <argument name="default_dir" xsi:type="string">desc</argument>                             
             <argument name="grid_url" xsi:type="url" path="*/*/grid"><param name="_current">1</param></argument>
             <argument name="default_filter" xsi:type="array">
                  <item name="status" xsi:type="string">1</item>
             </argument>
         </arguments>
        .
        .
      </block>

У блоці - Grid.php

    namespace Namespace\Module\Block\Adminhtml\Test;

    use Magento\Backend\Block\Widget\Grid as WidgetGrid;

     class Grid extends WidgetGrid
        {
          public function _construct()
           {
            parent::_construct(); 
            if ($this->hasData('default_filter')) {
            // print_r($this->getData('default_filter'));die;
            $this->setDefaultFilter($this->getData('default_filter'));
           }
        }
      }

Я перейшов за цим посиланням, щоб створити адміністраторну сітку в magento 2

http://www.mage-world.com/blog/grid-and-form-in-magento-2-admin-panel-part-1.html

Відповіді:


12

Якщо ви визначаєте макет роздумів колекції сітки, тоді ви можете використовувати оновлення, щоб додати фільтр за замовчуванням.

<argument name="dataSource" xsi:type="object">
    Tutorial\SimpleNews\Model\Resource\News\Collection
    <updater>Tutorial\SimpleNews\Model\Resource\News\Collection\Updater</updater>
</argument>

і

<?php
namespace Tutorial\SimpleNews\Model\Resource\News\Collection;

class CollectionUpdater implements \Magento\Framework\View\Layout\Argument\UpdaterInterface
{

    /**
     * Update grid collection according to chosen order
     *
     * @param \Tutorial\SimpleNews\Model\Resource\News\Collection $argument
     * @return \Tutorial\SimpleNews\Model\Resource\News\Collection
     */
    public function update($argument)
    {
        $argument->addFieldToFilter('you_field', 'value');

        return $argument;
    }
}

або Розширити блок Grid

class Grid extends \Magento\Backend\Block\Widget\Grid
{
    protected function _prepareCollection()
    {
        if ($this->getCollection()) {
            foreach ($this->getDefaultFilter() as $field => $value) {
                $this->getCollection()->addFieldToFilter($field, $value);
            }
        }
        return parent::_prepareCollection();
    }   
}

Привіт Кенді, це не працює для мене. Не могли б ви допомогти мені розібратися ??
Vigna S

5
Кожен, хто знайде цю відповідь, зауважте, що вона стосується лише застарілих сіток. Не сітки на основі інтерфейсу.
Андре Кланг

Отже, як ми можемо застосувати цей тип фільтрів до сітки на основі ui-компонентів?
Knight017

Для сітки , що базується на користувальницькому інтерфейсі , це можна зробити за тим же підходом, що і цей magento.stackexchange.com/a/178663/55259
Torrey

5

вам потрібно додати це всередині тегу аргументів:

<argument name="default_filter" xsi:type="array">
    <item name="field_name_here" xsi:type="string">value here</item>
</argument>

якщо ваші аргументи містяться в цьому блоці

<block class="Magento\Backend\Block\Widget\Grid" name="some.name.here" as="grid">

вам потрібно створити власний клас, який розширюється Magento\Backend\Block\Widget\Gridтак:

<?php 
namespace Namespace\Module\Block\Adminhtml\Whatever;

class Grid extends \Magento\Backend\Block\Widget\Grid
{
    public function _construct()
    {
        parent::_construct(); 
        if ($this->hasData('default_filter')) {
            $this->setDefaultFilter($this->getData('default_filter'));
        }
    }
}

і змінити тег блоку вище в

 <block class="Namespace\Module\Block\Adminhtml\Whatever\Grid" name="some.name.here" as="grid">

якщо ви вже використовуєте власну сітку, а не за замовчуванням, Magento\Backend\Block\Widget\Gridвам не потрібно створювати клас.
Вам просто потрібно скопіювати _constructметод зверху у своєму класі.


Привіт @Marius, Дякую за відповідь У методі конструювання я отримав значення фільтра за замовчуванням. Але фільтрація не працює. Не надто отримайте всі рекорди
DRAJI

1
можливо, вам слід додати ще код, який у вас є, щоб отримати кращий огляд.
Маріус

Я оновив своє запитання з кодом фільтра, що я додав
DRAJI

Чудово. Я по-новому погляну і повернусь з результатом.
Маріус

Привіт Маріусе, я спробував це, але це не працює, ви знайшли рішення?
Vigna S

0

ось посилання на devdocs:

http://devdocs.magento.com/guides/v2.0/ui-components/ui-secondary-filter.html

Якщо вам потрібна додаткова інформація про це - ви можете створити запит на виклик або проблему на сторінці документів - просто натисніть посилання "Редагувати цю сторінку на GitHub". Документи постійно оновлюються та вдосконалюються.


1
Посилання, яке ви згадали, показує, як додати фільтри в сітку, яка використовує компоненти інтерфейсу. Я думаю, питання полягає у зміні сітки, яка розширюється Magento\Backend\Block\Widget\Grid. Але я можу помилятися.
Маріус

Привіт @EquinoxBlack Дякую за вашу відповідь Але це за допомогою компонента інтерфейсу
DRAJI

0

Спробувавши багато кодів, які не спрацьовують, нарешті знайти спосіб, який не потребує кодування - скористайтеся функцією збереження спеціальних представлень, яка може зберегти настройки фільтра та стовпця.

Конкретні кроки

Після встановлення параметрів фільтра та стовпчика натисніть на Default Viewкнопку з піктограмою очей, а потім натисніть, Save View As…щоб ввести ім'я для вашого перегляду. Тоді ви можете натискати спеціальний вид, коли хочете отримати сітку так, як вам подобається, і ви можете зберегти власні представлення стільки, скільки вам потрібно.

Ви також можете повернутися назад і скористатися піктограмою редагування, щоб перейменувати її або видалити пізніше або повернутися до подання за замовчуванням.

Я думаю, що це дуже гарна функція в Magento 2 :)

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.