Magento2.1 uiグリッド、フィルターの問題の削除またはクリア(フィルターを削除した後、結果行はコレクション全体に適用されます)


13

私はmagento 2.1.0でuiグリッドを作成し、フィルターを削除するか、uiグリッドからすべてのフィルターをクリアする際に問題に直面しました。フィルターされた結果がグリッド全体を占めるということは、フィルターを削除した後、グリッド全体で同じ行が繰り返されることを意味します。

この問題が発生する理由はわかりますが、この問題を修正できません。

フィルターの削除またはすべてのフィルターのクリア中にmui / index / render getリクエストが発生しないため、問題が発生します。

実際、2つ以上のフィルターが適用されたときに機能し、それらを削除しましたが、最後に適用されたフィルターの場合はそうではありませんでした。


これは、最初にアクティブに適用されたフィルターの特別なキャッシュが原因で発生しています。この問題を解決するための提案を教えてください。
rajneesh gupta

回答:


21

前のソリューションに追加するだけです。具体的な修正は、「storageConfig」項目を追加することです。これがない場合、行データが重複する問題が発生します。

<item name="storageConfig" xsi:type="array">
    <item name="indexField" xsi:type="string">entity_id</item>
</item>

ここで、 'entity_id'はコレクションデータの主キーであり、以下で定義されているものと同じです。

<argument name="primaryFieldName" xsi:type="string">entity_id</argument>

そして、以下は完全に取り除くことができます。これは、「dataProvider」ノードですでに指定されている値を複製しているためです。

<argument name="data" xsi:type="array">
    <item name="js_config" xsi:type="array">
        <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
    </item>
</argument>

はい、あなたは正しいです、それは今働いています
rajneesh gupta 2016

あなたの解決策への乾杯:)私からの+1
Keyur Shah

13

私は同じ問題があり、ui_component xmlのこのコードで解決します:

<dataSource name="storelocator_store_listing_data_source">
    <argument name="dataProvider" xsi:type="configurableObject">
        <argument name="class" xsi:type="string">StoreGridDataProvider</argument>
        <argument name="name" xsi:type="string">storelocator_store_listing_data_source</argument>
        <argument name="primaryFieldName" xsi:type="string">store_id</argument>
        <argument name="requestFieldName" xsi:type="string">id</argument>
        <argument name="data" xsi:type="array">
            <item name="config" xsi:type="array">
                <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
                <item name="update_url" xsi:type="url" path="mui/index/render"/>
                <item name="storageConfig" xsi:type="array">
                    <item name="indexField" xsi:type="string">store_id</item>
                </item>
            </item>
        </argument>
    </argument>
    <argument name="data" xsi:type="array">
        <item name="js_config" xsi:type="array">
            <item name="component" xsi:type="string">Magento_Ui/js/grid/provider</item>
        </item>
    </argument>
</dataSource>

ノード名「DataProvider」を見てください。それが役に立てば幸い


2
はい、それは素晴らしい働きをしました、たくさんのトニーに感謝します:)
rajneesh gupta

おかげで@Tony uは私の作業時間を完全に節約できたので+投票
Nagaraju K

6

Magento 2.3でも同じ問題が発生し、で次のコードを使用して解決しましたui_component xml

<dataSource component="Magento_Ui/js/grid/provider" name="listing_data_source">
        <settings>
            <storageConfig>
                <param name="indexField" xsi:type="string">primary_id</param>
            </storageConfig>
            <updateUrl path="mui/index/render"/>
        </settings>
        ...
        ...
</dataSource>

どこで修正したか教えていただけますか?
Sander van Zuidam

1
@Aasim Goriya、私も同じ問題を抱えており、コードを追加しました。フィルターが正常に機能するようになりました。ありがとう、あなたは私の時間を節約しました。
バル

1
@DhadukMiteshデフォルトのフィルターとはどういう意味ですか?詳しく説明していただけますか?
Aasim Goriya

1
@DhadukMiteshは問題ありません。問題はフィルターをリセットしたときにグリッドがすべての値を正しく表示しないことですか?
Aasim Goriya

1
@DhadukMitesh Magentoのグリッドデータはui_bookmarkテーブルに保存され、データをフィルターするとui_bookmarkに保存されるため、ui_bookmarkテーブルでデータが変更されるまでフィルターをリセットできないため、これは可能ではないと思います。ページの読み込み中にui_bookmarkテーブルエントリを削除します。
Aasim Goriya
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.