Untuk menambahkan filter default ke kotak di Magento2?

12

Saya telah membuat satu modul khusus dengan atribut bidang status & status di kisi admin.

Koleksi kisi di 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>

Saya ingin menunjukkan data yang diaktifkan. Punya opsi untuk menambahkan filter default dalam koleksi admin grid ?

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>

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

Saya telah mengikuti tautan ini untuk membuat kisi admin di magento 2

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

DRAJI
sumber

Jawaban:

12

Jika Anda menetapkan tata letak pemikiran kumpulan grid daripada Anda dapat menggunakan updater untuk menambahkan filter default.

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

dan

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

atau Perpanjang blok Kotak

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
sumber
Hai KAndy, Ini tidak berfungsi untuk saya. Bisakah Anda membantu saya menyelesaikannya ??
Vigna S
5
Bagi siapa pun yang menemukan jawaban ini, harap perhatikan bahwa ini hanya berlaku untuk kisi lawas. Bukan grid berbasis komponen UI.
Andre Klang
Jadi, bagaimana kita bisa menerapkan jenis filter ini ke jaringan berbasis komponen ui?
Knight017
Untuk grid berbasis komponen UI , dapat dilakukan dengan pendekatan yang sama seperti magento.stackexchange.com/a/178663/55259
Torrey
5

Anda perlu menambahkan ini di dalam tag argumen:

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

jika argumen Anda terkandung dalam blok ini

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

Anda perlu membuat kelas Anda sendiri yang memanjang Magento\Backend\Block\Widget\Gridseperti ini:

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

dan ubah tag blok di atas menjadi

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

jika Anda sudah menggunakan kisi kustom dan bukan default Magento\Backend\Block\Widget\GridAnda tidak perlu membuat kelas.
Anda hanya perlu menyalin _constructmetode dari atas di kelas Anda.

Marius
sumber
Hai @Marius, Terima kasih atas tanggapan Anda. Dalam metode membangun saya mendapat nilai filter default. Tetapi penyaringan tidak berfungsi. Tidak terlalu mendapatkan semua catatan
DRAJI
1
mungkin Anda harus menambahkan lebih banyak kode ke pertanyaan untuk mendapatkan gambaran yang lebih baik.
Marius
Saya telah memperbarui pertanyaan saya dengan kode filter apa yang saya tambahkan
DRAJI
Bagus. Saya akan mengambil tampilan baru dan kembali dengan hasilnya.
Marius
Hai Marius, saya mencoba ini tetapi tidak berhasil, apakah Anda menemukan solusi?
Vigna S
0

di sini adalah referensi pada devdocs:

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

Jika Anda memerlukan info lebih lanjut tentang itu - Anda dapat membuat permintaan tarik atau masalah melalui halaman dokumen - cukup klik tautan "Edit halaman ini di GitHub". Documents terus diperbarui dan ditingkatkan.

EquinoxBlack
sumber
1
tautan yang Anda sebutkan menunjukkan cara menambahkan filter dalam kisi yang menggunakan komponen ui. Saya pikir pertanyaannya adalah tentang mengubah kisi yang memanjang Magento\Backend\Block\Widget\Grid. Tapi saya mungkin salah.
Marius
Hai @EquinoxBlack Terima kasih atas tanggapan Anda. Tetapi dengan menggunakan komponen UI
DRAJI
0

Setelah mencoba banyak kode yang tidak berfungsi, akhirnya menemukan cara yang tidak memerlukan pengkodean - manfaatkan fungsi simpan tampilan kustom yang dapat menyimpan pengaturan filter dan kolom.

Langkah spesifik

Setelah mengatur filter dan pengaturan kolom, klik Default Viewtombol dengan ikon mata, lalu klik Save View As…untuk memasukkan nama untuk tampilan Anda. Kemudian Anda bisa mengklik tampilan kustom kapan pun Anda ingin mendapatkan grid seperti yang Anda suka, dan Anda dapat menyimpan tampilan kustom sebanyak yang Anda suka.

Anda juga dapat kembali dan menggunakan ikon edit untuk mengganti nama atau menghapusnya nanti, atau untuk kembali ke tampilan default.

Saya pikir ini adalah fungsi yang sangat bagus di Magento 2 :)

masukkan deskripsi gambar di sini

Key Shang
sumber