Як відфільтрувати перегляд за діапазоном дат (початок, кінець)?


18

В Drupal 7 з перегляду Дати модуль з підтримкою, це було досить легко фільтрувати подання за датою: Інтерфейс просто дав вам можливість зробити це.

Однак у Drupal 8 поле дати та представлення є частиною основної, але якщо ви вибрали поле діапазону дат як фільтр у представленнях, воно більше не пропонує вам конкретні параметри дати, а показує лише параметри фільтрації для текстових полів:введіть тут опис зображення

Однак параметри конкретної дати доступні для внутрішніх значень дати, таких як "Зміст: Змінено" введіть тут опис зображення

Оскільки я хотів би показати лише конкретні вузли, з датою до або після фактичної дати, де дата визначена спеціальним полем діапазону дат, це не відповідає моїм потребам.

Як я можу відфільтрувати представлення даних у Drupal 8 за полем дати за певними датами?


Фільтри власних представлень - це проблема, що випускається для діапазонів дат. Патч працює, але шлях оновлення шалено важкий.
mpdonadio

@mpdonadio Чи можете ви мені допомогти з посиланням на патч?
user5950

2
Це drupal.org/node/2786577 , але будьте попереджені, шлях оновлення перевірений не повністю. Використовуйте цей пластир на свій страх і ризик.
mpdonadio

@ Pierre.Vriens це не дублікат. Йдеться про поле з датами початку та закінчення та фільтрацію на них. Не лише одне поле значення.
Neograph734

@ Neograph734 Гаразд, це допомагає краще зрозуміти відмінності (відкликання голосів). Але 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папки. І майте на увазі, що вам доведеться повторно застосувати цей виправлення, зробивши основне оновлення. (Це відстійно!) Тож сподіваємось, що друпальські боги незабаром отримають це в основі!


Ви можете, будь ласка, скажіть мені, як застосувати патч, він не працює для мене !! @ user5950
make-me-

патч -p1 <покращити_the_views_integration_for_daterange_fields-2786577-60.patch працював на мене Спасибі @ user5950
make-me-

Обов’язково застосуйте оновлення бази даних:drush updatedb --entity-updates
Філіпе Мігель Фонсека

Якщо ви використовуєте композитор для нанесення патчів, вони автоматично застосовуються під час оновлення модулів. Це означає, що цей номер буде включено в 8.6 - виправлення було зроблено кілька днів тому!
mortona42

5
Ця функціональність, як головна робота, тепер є основою, починаючи з 8.6.0
Метт Флетчер

0

Мені довелося фільтрувати тип вмісту, що містить дати аукціонів, у три групи (зараз онлайн, майбутні та готові до реєстрації). Оскільки це стосувалося декількох діапазонів дат, я написав плагін на основі цієї статті: https://www.webomelette.com/creating-custom-views-filter-drupal-8

В основному це три речі: - Перетворення дат у полі на локальну дату та час. - Фільтр має три можливі налаштування "зараз онлайн", "майбутнє" та "інше".

Це працює і здається надійним для майбутніх оновлень.

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

Використовуючи плагін інтервального фільтра, ви можете вибрати два поля, які будуть використовуватися відповідно як мінімальна та максимальна дата, це вводить поняття діапазону. Потім ви можете відфільтрувати представлення даних, вказавши дату, яка повинна містити або не містити в діапазоні.

Подивіться на: https://github.com/barsan-ds/interval-filter для прикладів


0

В даний час перегляди не дуже відомі діапазонам дат. Він може фільтрувати дату початку або кінця як окремі фільтри, але не діапазон дат у цілому.

Щоб увімкнути фільтрацію на основі діапазону дат, я створив модуль " Фільтри переглядів фільтрів дат" . Наразі у нього є 3 додаткові фільтри для полів діапазону дат:

Включає

Фільтрує за діапазонами дат, які включають надану дату.

Перекриття

Фільтри за діапазонами дат, які перетинаються з наданим діапазоном дат.

Закінчується

Фільтри за діапазонами дат, які закінчуються на надану дату. Еквівалентно "Дата закінчення <= дата доставки". Корисно для згрупованих фільтрів при використанні "Дата початку".


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.