Để thêm bộ lọc mặc định vào lưới trong Magento2?


11

Tôi đã tạo một mô-đun tùy chỉnh với thuộc tính trường tiêu đề & trạng thái trong lưới quản trị.

Các bộ sưu tập lưới trong 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>

Tôi muốn hiển thị dữ liệu được kích hoạt. Có bất kỳ tùy chọn để thêm bộ lọc mặc định trong bộ sưu tập lưới quản trị ?

BIÊN TẬP

    <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>

Trong Khối - 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'));
           }
        }
      }

Tôi đã theo liên kết này để tạo lưới quản trị trong magento 2

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

Câu trả lời:


12

Nếu bạn xác định bố cục bộ sưu tập lưới hơn bạn có thể sử dụng trình cập nhật để thêm bộ lọc mặc định.

<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;
    }
}

hoặc Mở rộng khối lưới

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();
    }   
}

Xin chào KAndy, nó không làm việc cho tôi. Bạn có thể giúp tôi sắp xếp nó ra ??
Vigna S

3
Đối với bất cứ ai tìm thấy câu trả lời này, xin lưu ý rằng nó chỉ áp dụng cho lưới di sản. Không phải lưới dựa trên thành phần UI.
Andre Klang

Vậy, làm thế nào chúng ta có thể áp dụng loại bộ lọc này cho lưới dựa trên thành phần ui?
Knight017

5

bạn cần thêm cái này vào trong thẻ argument:

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

nếu đối số của bạn được chứa trong khối này

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

bạn cần tạo lớp riêng của mình kéo dài Magento\Backend\Block\Widget\Gridnhư thế này:

<?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'));
        }
    }
}

và sửa đổi thẻ khối ở trên thành

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

nếu bạn đã sử dụng lưới tùy chỉnh và không phải mặc định, Magento\Backend\Block\Widget\Gridbạn không cần tạo lớp.
Bạn chỉ cần sao chép _constructphương thức từ trên trong lớp của bạn.


Xin chào @Marius, Cảm ơn bạn đã phản hồi. Trong phương thức xây dựng tôi có giá trị bộ lọc mặc định. Nhưng lọc không hoạt động. Không quá nhận được tất cả các hồ sơ
DRAJI

1
có lẽ bạn nên thêm nhiều mã bạn có vào câu hỏi để có cái nhìn tổng quan hơn.
Marius

Tôi đã cập nhật câu hỏi của mình với mã bộ lọc những gì tôi đã thêm
DRAJI

Tuyệt quá. Tôi sẽ có một cái nhìn mới và trở lại với một kết quả.
Marius

Xin chào Marius, tôi đã thử cách này nhưng nó không hoạt động, bạn đã tìm được giải pháp nào chưa?
Vigna S

0

đây là tài liệu tham khảo về devdocs:

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

Nếu bạn cần thêm thông tin về điều đó - bạn có thể tạo yêu cầu kéo hoặc sự cố thông qua trang tài liệu - chỉ cần nhấp vào "Chỉnh sửa trang này trên liên kết GitHub". Tài liệu được cập nhật liên tục và cải thiện.


1
liên kết bạn đã đề cập cho thấy cách thêm bộ lọc trong lưới sử dụng các thành phần ui. Tôi nghĩ rằng câu hỏi là về việc thay đổi một lưới kéo dài Magento\Backend\Block\Widget\Grid. Nhưng tôi có thể sai.
Marius

Xin chào @EquinoxBlack Cảm ơn bạn đã phản hồi. Nhưng nó bằng cách sử dụng thành phần UI
DRAJI

0

Sau khi thử nhiều mã không hoạt động, cuối cùng cũng tìm ra cách không cần mã hóa - hãy sử dụng chức năng lưu chế độ xem tùy chỉnh có thể lưu cài đặt bộ lọc và cột.

Các bước cụ thể

Sau khi cài đặt bộ lọc và cài đặt cột, nhấp vào Default Viewnút có biểu tượng con mắt, sau đó nhấp Save View As…để nhập tên cho chế độ xem của bạn. Sau đó, bạn có thể nhấp vào chế độ xem tùy chỉnh bất cứ khi nào bạn muốn lấy lưới theo cách bạn muốn và bạn có thể lưu chế độ xem tùy chỉnh bao nhiêu tùy thích.

Bạn cũng có thể quay lại và sử dụng biểu tượng chỉnh sửa để đổi tên hoặc xóa nó sau này hoặc để trở về chế độ xem mặc định.

Tôi nghĩ rằng đây là một chức năng rất tốt trong Magento 2 :)

nhập mô tả hình ảnh ở đây

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.