Щоб додати фільтр за замовчуванням до мережі в 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.