Bagaimana cara memfilter Tampilan berdasarkan Rentang Tanggal (mulai, akhir)?

18

Di Drupal 7 dengan modul Views a Date diaktifkan, cukup mudah untuk memfilter tampilan berdasarkan Tanggal: UI hanya memberi Anda opsi untuk melakukannya.

Di Drupal 8, bagaimanapun, bidang tanggal dan tampilan adalah bagian dari inti, tetapi jika Anda memilih bidang rentang tanggal sebagai filter dalam tampilan, itu tidak menawarkan Anda opsi spesifik tanggal lagi, tetapi menunjukkan Anda hanya memfilter opsi untuk bidang teks:masukkan deskripsi gambar di sini

Namun, opsi spesifik tanggal tersedia untuk nilai tanggal internal seperti ´Content: Changed´ masukkan deskripsi gambar di sini

Karena saya hanya ingin menunjukkan node tertentu, dengan tanggal sebelum atau setelah tanggal aktual, di mana tanggal tersebut ditentukan oleh bidang rentang tanggal khusus, ini tidak sesuai dengan kebutuhan saya.

Bagaimana saya bisa memfilter tampilan di Drupal 8 berdasarkan bidang tanggal dengan operasi spesifik tanggal?

pengguna5950
sumber
Filter tampilan yang benar adalah masalah dalam proses untuk rentang tanggal. Patch berfungsi, tetapi jalur pembaruan sangat sulit.
mpdonadio
@mpdonadio Bisakah Anda membantu saya dengan tautan ke tambalan?
user5950
2
Ini drupal.org/node/2786577 , tetapi berhati-hatilah jalur pembaruan tidak sepenuhnya diuji. Gunakan tambalan ini dengan risiko Anda sendiri.
mpdonadio
@ Pierre.Vriens itu bukan duplikat. Ini tentang bidang dengan tanggal mulai dan berakhir dan memfilternya. Bukan hanya bidang nilai tunggal.
Neograph734
@ Neograph734 OK, itu membantu untuk lebih memahami perbedaan (suara ditarik kembali). Tapi OPer lebih baik mengedit pertanyaan ini untuk memasukkan bahwa dalam pertanyaan yang sebenarnya juga (untuk menghindari orang lain akan menganggapnya sebagai duplikat) ... Semoga beruntung!
Pierre.Vriens

Jawaban:

14

Anehnya ini belum memungkinkan dengan Drupal 8. Tapi ada sejarah panjang mencoba untuk membuatnya bekerja: https://www.drupal.org/node/2786577 The patch terakhir , Anda menemukan dalam posting ini, tampaknya pekerjaan. Anda dapat mengunduh dan menerapkannya, menggunakan perintah berikut:

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

Jika gittidak tersedia di server Anda, coba:

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

UNTUK menerapkan tambalan, Anda harus menavigasi ke corefolder terlebih dahulu. Dan ketahuilah bahwa Anda harus mengajukan permohonan kembali tambalan ini, setelah melakukan pembaruan inti. (Ini menyebalkan!) Jadi, mari kita berharap, para Dewa Drupal akan segera mendapatkan inti ini!

pengguna5950
sumber
dapatkah Anda memberi tahu saya cara menerapkan tambalan yang tidak berfungsi untuk saya !! @ user5950
make-me-hidup
patch -p1 <boost_the_views_integration_for_daterange_fields-2786577-60.patch bekerja untuk saya Terima kasih @ user5950
make-me-
Pastikan Anda menerapkan pembaruan basis data:drush updatedb --entity-updates
Filipe Miguel Fonseca
Jika Anda menggunakan komposer untuk menerapkan tambalan, tambalan itu akan berlaku secara otomatis saat Anda memperbarui modul. Yang mengatakan, ini akan dimasukkan dalam 8.6 - patch dilakukan beberapa hari yang lalu!
mortona42
5
Sama seperti kepala-up, fungsi ini sekarang pada intinya dimulai dengan 8.6.0
Matt Fletcher
0

Saya harus memfilter tipe konten yang berisi tanggal lelang ke dalam tiga grup (sekarang online, akan datang dan siap mendaftar). Karena ini melibatkan banyak daterange, saya menulis sebuah plugin berdasarkan artikel ini: https://www.webomelette.com/creating-custom-views-filter-drupal-8

Pada dasarnya adalah melakukan tiga hal: - Mengkonversi tanggal di lapangan ke tanggal dan waktu setempat. - Filter memiliki tiga kemungkinan pengaturan 'sekarang online', 'akan datang' dan 'lainnya' - Berdasarkan pengaturan itu menambahkan kemungkinan klausa mana ke kueri

Ini berfungsi dan tampaknya kuat untuk pembaruan di masa mendatang.

    <?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;
            }
        }
    }
Coert
sumber
0

Menggunakan plugin interval-filter Anda dapat memilih dua bidang yang akan digunakan masing-masing sebagai tanggal minimum dan maksimum, ini memperkenalkan konsep kisaran. Kemudian Anda bisa memfilter tampilan dengan menentukan tanggal yang harus dimuat atau tidak terkandung dalam rentang.

Lihatlah: https://github.com/barsan-ds/interval-filter untuk contoh

Barsan-md
sumber
0

Tampilan saat ini tidak terlalu mengetahui rentang tanggal. Itu dapat memfilter pada tanggal mulai atau berakhir sebagai filter terpisah tetapi bukan rentang tanggal secara keseluruhan.

Untuk mengaktifkan pemfilteran berdasarkan rentang tanggal, saya membuat modul Tampilan Rentang Tanggal Filter . Saat ini ia memiliki 3 filter tambahan untuk bidang Rentang Datetime:

Termasuk

Filter menurut rentang tanggal yang mencakup tanggal yang disediakan.

Tumpang tindih

Filter menurut rentang tanggal yang tumpang tindih dengan rentang tanggal yang disediakan.

Berakhir oleh

Filter menurut rentang tanggal yang diakhiri oleh tanggal yang disediakan. Setara dengan "Tanggal akhir <= tanggal yang disediakan". Berguna untuk filter yang dikelompokkan saat menggunakan "Tanggal mulai".

saya bersih
sumber
-3

Munculan tanggal Modul ini melayani tujuan.

Nikhil Valand
sumber
Modul ini baik, tetapi hanya menggantikan komponen UI, dan tidak memungkinkan untuk mengelola jenis nilai.
milkovsky