日付範囲(開始、終了)でビューをフィルタリングする方法は?


18

ビュー日付モジュールを有効にしたDrupal 7では、日付ビューをフィルター処理するのは非常に簡単でした。UIは、そうするためのオプションを提供しました。

ただし、Drupal 8では、日付フィールドとビューはコアの一部ですが、日付範囲フィールドをビューのフィルターとして選択すると、日付固有のオプションは提供されなくなりますが、テキストフィールドのフィルターオプションのみが表示されます。ここに画像の説明を入力してください

ただし、「コンテンツ:変更」などの内部日付値には、日付固有のオプションを使用できます ここに画像の説明を入力してください

特定のノードのみを表示したいので、日付が実際の日付の前後にあり、日付はカスタム日付範囲フィールドで指定されているため、これは私のニーズに合いません。

日付固有の操作を含む日付フィールドでDrupal 8のビューをフィルターするにはどうすればよいですか?


適切なビューフィルターは、日付範囲の処理中の問題です。パッチは機能しますが、更新パスはめちゃくちゃ難しいです。
mpdonadio

@mpdonadioパッチへのリンクを教えてください。
-user5950

2
それはだdrupal.org/node/2786577が、更新パスが完全にテストされていないと警告します。このパッチは自己責任で使用してください。
mpdonadio

@ Pierre.Vriensそれは複製ではありません。これは、開始日と終了日、およびそれらのフィルタリングを含むフィールドに関するものです。単一の値フィールドだけではありません。
Neograph734

@ Neograph734 OK、それは違いをよりよく理解するのに役立ちます(投票は撤回されました)。しかし、OPerはこの質問を実際の質問にも含めるように編集します(他の人がそれを重複として認識しないようにするため)。
-Pierre.Vriens

回答:


14

驚いたことに、これはまだDrupal 8では不可能です。しかし、それを動作させるためにしようとしての長い歴史があります:https://www.drupal.org/node/2786577 最後のパッチ、あなたがこの記事で見つけるには、仕事に思えます。次のコマンドを使用して、ダウンロードして適用できます。

wget https://www.drupal.org/files/issues/improve_the_views-2786577-76-core.patch
git apply improve_the_views-2786577-76-core.patch

gitサーバーで使用できない場合は、次を試してください。

patch -p1 < improve_the_views-2786577-76-core.patch

パッチを適用するには、core最初にフォルダーに移動する必要があります。また、コアアップデートをコミットした後、このパッチを再適用する必要があることに注意してください。(これはうんざりです!)だから、Drupal Godsがこれをすぐにコアにすることを期待しましょう!


パッチを適用する方法を教えてもらえますか?@ user5950
make-me-alive

patch -p1 <Improvement_the_views_integration_for_daterange_fields-2786577-60.patchは私のために働きましたありがとう@ user5950
make-me-alive

必ず、データベースの更新を適用してください:drush updatedb --entity-updates
フィリペ・ミゲル・フォンセカ

composerを使用してパッチを適用する場合、モジュールを更新すると自動的に適用されます。とはいえ、これは8.6に含まれる予定です-パッチは数日前にコミットされました!
mortona42

5
ヘッズアップのように、この機能は8.6.0からコアになりました
マットフレッチャー

0

オークションの日付を含むコンテンツタイプを3つのグループ(現在はオンライン、近日中、登録準備完了)にフィルターする必要がありました。これには複数の日付範囲が含まれていたため、この記事に基づいてプラグインを作成しました:https ://www.webomelette.com/creating-custom-views-filter-drupal-8

基本的には3つのことを行います。-フィールドの日付をローカルの日付と時刻に変換します。-フィルターには、「現在オンライン」、「近日中」、および「その他」の3つの可能な設定があります-設定に基づいて、可能なwhere句をクエリに追加します

これは機能し、将来のアップデートに対して堅牢なようです。

    <?php

    /**
     * @file
     * Definition of Drupal\d8views\Plugin\views\filter\NodeTitles.
     */

    namespace Drupal\d8views\Plugin\views\filter;

    use Drupal\views\Plugin\views\filter\FilterPluginBase;
    use Drupal\views\Plugin\views\filter\InOperator;
    use Drupal\views\Plugin\views\filter\ManyToOne;
    use Drupal\views\ViewExecutable;
    use Drupal\views\Views;
    /**
     * Filters by given list of node title options.
     *
     * @ingroup views_filter_handlers
     *
     * @ViewsFilter("d8views_node_titles")
     */
    class NodeTitles extends FilterPluginBase {
        // exposed filter options
        protected $alwaysMultiple = TRUE;

        /**
         * Provide simple equality operator
         */
        public function operatorOptions() {
            return [
                'nu_online' => $this->t('Nu online'),
                'binnenkort' => $this->t('Binnenkort'),
                'anders' => $this->t('Anders'),
            ];
        }


        public function query() {
            //Get the current domain.  
            //$domain = domain_get_domain();
            $nu_in_utc = new \DateTime('now', new \DateTimezone('UTC'));
            $nu_in_utc_in_iso = $nu_in_utc->format('Y-m-d\TH:i:s');
            $nu_date = $nu_in_utc->format('Y-m-d');
            /* 
            * Voeg relatie met datum veiling toe
            */
            $configuration = [
                'table'      => 'node__field_datum_veiling',
                'left_table' => 'node_field_data',
                'left_field' => 'nid',
                'field'      => 'entity_id',
                'type'       => 'LEFT',
                'extra_operator'   => 'AND',
            ];
            $join = Views::pluginManager('join')->createInstance('standard', $configuration);
            $this->query->addRelationship('node__field_datum_veiling', $join, 'node_field_data');

            /* 
            * Voeg relatie met online datum van de veiling
            */
            $configuration = [
                'table'      => 'node__field_datum_online',
                'left_table' => 'node_field_data',
                'left_field' => 'nid',
                'field'      => 'entity_id',
                'type'       => 'LEFT',
                'extra_operator'   => 'AND',
            ];

            $join = Views::pluginManager('join')->createInstance('standard', $configuration);
            $this->query->addRelationship('node__field_datum_online', $join, 'node_field_data');
            switch($this->operator) {
                case 'nu_online':
                    /* 
                    * Condities voor 'Nu online'
                    */
                    //dpm('Nu online');
                    $this->query->addWhere('AND', 'node__field_datum_veiling.field_datum_veiling_end_value', $nu_in_utc_in_iso, '>');
                    $this->query->addWhere('AND', 'node__field_datum_online.field_datum_online_value', $nu_date, '<=');
                    break;
                case 'binnenkort':
                    /* 
                    * Condities voor 'Binnenkort'
                    */
                    //dpm('Binnenkort');
                    $this->query->addWhere('AND', 'node__field_datum_veiling.field_datum_veiling_end_value', $nu_in_utc_in_iso, '>');
                    $this->query->addWhere('AND', 'node__field_datum_online.field_datum_online_value', $nu_date, '>');
                    break;
                case 'anders':
                    /* 
                    * Condities voor 'Anders' (dwz online, binnenkort, maar nog niet geweest)
                    */
                    $this->query->addWhere('AND', 'node__field_datum_veiling.field_datum_veiling_end_value', $nu_in_utc_in_iso, '>');
                    break;
            }
        }
    }

0

interval-filterプラグインを使用すると、最小日付と最大日付としてそれぞれ使用する2つのフィールドを選択できます。これにより、範囲の概念が導入されます。次に、範囲に含める必要のある日付または含めない日付を指定して、ビューをフィルター処理できます。

以下をご覧くださいhttps : //github.com/barsan-ds/interval-filter


0

現在、ビューは日付範囲をあまり認識していません。開始日または終了日を個別のフィルターとしてフィルターできますが、日付範囲全体はフィルターできません。

日付範囲に基づいてフィルタリングを有効にするために、ビューViews Date Range Filtersモジュールを作成しました。現在、日時範囲フィールド用の3つの追加フィルターがあります。

含む

指定された日付を含む日付範囲でフィルターします。

重複

指定された日付範囲と重複する日付範囲でフィルターします。

〜で終わる

指定された日付で終わる日付範囲でフィルターします。「終了日<=提供日」と同等です。「開始日」を使用するときにグループ化されたフィルターに便利です。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.