หากต้องการเพิ่มตัวกรองเริ่มต้นในกริดใน 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>

ฉันต้องการแสดงข้อมูลที่เปิดใช้งาน มีตัวเลือกใด ๆเพื่อเพิ่มตัวกรองเริ่มต้นในคอลเลกชันกริดของผู้ดูแลระบบหรือไม่

แก้ไข

    <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

หากคุณกำหนดเค้าโครงความคิดของคอลเลกชันกริดกว่าที่คุณสามารถใช้ updater เพื่อเพิ่มตัวกรองเริ่มต้น

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

หรือขยายบล็อกกริด

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

สวัสดี KAndy มันไม่ทำงานสำหรับฉัน คุณช่วยฉันจัดเรียงมันได้หรือไม่?
Vigna S

5
สำหรับผู้ที่พบคำตอบนี้โปรดทราบว่าจะใช้ได้กับกริดแบบเดิมเท่านั้น ไม่ใช่กริดที่ใช้องค์ประกอบ UI
Andre Klang

ดังนั้นเราจะใช้ตัวกรองประเภทนี้กับกริดที่ใช้องค์ประกอบ ui ได้อย่างไร
Knight017

สำหรับกริดส่วนประกอบ UIสามารถทำได้ด้วยวิธีเดียวกันกับ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
บางทีคุณควรเพิ่มรหัสเพิ่มเติมที่คุณมีในคำถามเพื่อให้ได้ภาพรวมที่ดีขึ้น
Marius

ฉันมีการปรับปรุงคำถามของฉันด้วยรหัสกรองสิ่งที่ฉันเพิ่ม
DRAJI

ยิ่งใหญ่ ฉันจะดูใหม่และกลับมาพร้อมผลลัพธ์
Marius

สวัสดี Marius ฉันลองสิ่งนี้ แต่มันไม่ทำงานคุณพบวิธีแก้ปัญหาหรือไม่?
Vigna S

0

นี่คือการอ้างอิงใน devdocs:

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

หากคุณต้องการข้อมูลเพิ่มเติมเกี่ยวกับสิ่งนั้นคุณสามารถสร้างคำขอดึงหรือปัญหาผ่านหน้าเอกสารได้เพียงคลิกลิงก์ "แก้ไขหน้านี้ใน GitHub" เอกสารได้รับการปรับปรุงและปรับปรุงอยู่ตลอดเวลา


1
ลิงค์ที่คุณกล่าวถึงจะแสดงวิธีเพิ่มตัวกรองในกริดที่ใช้ส่วนประกอบ ui Magento\Backend\Block\Widget\Gridผมคิดว่าเป็นคำถามที่เกี่ยวกับการเปลี่ยนแปลงตารางที่ขยาย แต่ฉันอาจจะผิด
Marius

สวัสดี @EquinoxBlack ขอขอบคุณสำหรับการตอบกลับของคุณ แต่โดยใช้องค์ประกอบ UI
DRAJI

0

หลังจากลองใช้รหัสจำนวนมากซึ่งใช้งานไม่ได้ในที่สุดค้นหาวิธีที่ไม่จำเป็นต้องใช้รหัส - ใช้ประโยชน์จากฟังก์ชั่นการบันทึกมุมมองที่กำหนดเองซึ่งสามารถบันทึกการตั้งค่าตัวกรองและคอลัมน์

ขั้นตอนเฉพาะ

หลังจากตั้งค่าตัวกรองและการตั้งค่าคอลัมน์ให้คลิกที่Default Viewปุ่มที่มีไอคอนรูปตาแล้วคลิกSave View As…เพื่อป้อนชื่อสำหรับมุมมองของคุณ จากนั้นคุณสามารถคลิกมุมมองที่กำหนดเองเมื่อใดก็ตามที่คุณต้องการรับกริดในแบบที่คุณชอบและคุณสามารถบันทึกมุมมองที่กำหนดเองได้มากเท่าที่คุณต้องการ

คุณสามารถย้อนกลับและใช้ไอคอนแก้ไขเพื่อเปลี่ยนชื่อหรือลบในภายหลังหรือเพื่อกลับไปที่มุมมองเริ่มต้น

ฉันคิดว่านี่เป็นฟังก์ชั่นที่ดีมากใน Magento 2 :)

ป้อนคำอธิบายรูปภาพที่นี่

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.