Làm cách nào để lọc Chế độ xem theo Phạm vi ngày (bắt đầu, kết thúc)?


18

Trong Drupal 7 với chế độ Xem một mô-đun Ngày được bật, khá dễ dàng để lọc chế độ xem theo Ngày: Giao diện người dùng chỉ cung cấp cho bạn tùy chọn để làm như vậy.

Tuy nhiên, trong Drupal 8, trường ngày và chế độ xem là một phần cốt lõi, nhưng nếu bạn chọn trường phạm vi ngày làm bộ lọc trong chế độ xem thì nó không cung cấp cho bạn các tùy chọn cụ thể theo ngày nữa mà chỉ hiển thị cho bạn các tùy chọn lọc cho trường văn bản:nhập mô tả hình ảnh ở đây

Tuy nhiên, các tùy chọn cụ thể về ngày có sẵn cho các giá trị ngày bên trong như ´Content: Thay đổi nhập mô tả hình ảnh ở đây

Như tôi muốn chỉ hiển thị các nút cụ thể, với một ngày trước hoặc sau ngày thực tế, trong đó ngày được chỉ định bởi trường phạm vi ngày tùy chỉnh, điều này không phù hợp với nhu cầu của tôi.

Làm cách nào tôi có thể lọc chế độ xem trong Drupal 8 theo trường ngày với các hoạt động cụ thể theo ngày?


Bộ lọc chế độ xem phù hợp là một vấn đề trong quy trình cho phạm vi ngày. Bản vá hoạt động, nhưng đường dẫn cập nhật cực kỳ khó khăn.
mpdon Arena

@mpdonadio Bạn có thể giúp tôi với một liên kết đến các bản vá, xin vui lòng?
dùng5950

2
Đó là drupal.org/node/2786577 , nhưng được cảnh báo đường dẫn cập nhật chưa được kiểm tra đầy đủ. Sử dụng bản vá này có nguy cơ của riêng bạn.
mpdon Arena

@ Pierre.Vriens nó không phải là một bản sao. Đây là về một lĩnh vực có ngày bắt đầu và ngày kết thúc và lọc trên đó. Không chỉ là một trường giá trị duy nhất.
Neograph734

@ Neograph734 OK, điều đó giúp hiểu rõ hơn về sự khác biệt (rút lại phiếu). Nhưng OPer tốt hơn nên chỉnh sửa câu hỏi này để đưa nó vào câu hỏi thực tế (để tránh những người khác sẽ coi nó là một bản sao) ... Chúc may mắn!
Pierre.Vriens

Câu trả lời:


14

Đáng ngạc nhiên là điều này là không thể với Drupal 8. Nhưng có một lịch sử lâu dài về việc cố gắng làm cho nó hoạt động: https://www.drupal.org/node/2786577 Bản vá cuối cùng , bạn tìm thấy trong bài đăng này, dường như hoạt động. Bạn có thể tải xuống và áp dụng nó, sử dụng các lệnh sau:

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

Nếu gitkhông có sẵn trên máy chủ của bạn, hãy thử:

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

Để áp dụng các bản vá bạn phải điều hướng đến corethư mục đầu tiên. Và lưu ý rằng bạn phải áp dụng lại bản vá này, sau khi thực hiện cập nhật cốt lõi. (Điều này thật tệ!) Vì vậy, chúng ta hãy hy vọng, các vị thần Drupal sẽ sớm đưa điều này vào cốt lõi!


Bạn có thể vui lòng cho tôi biết làm thế nào để áp dụng các bản vá không hoạt động cho tôi !! @ user5950
làm cho tôi sống động vào

patch -p1 <Cải_the_view_integration_for_daterange_fields-2786577-60.patch đã làm việc cho tôi Cảm ơn @ user5950
make-me-

Đảm bảo bạn áp dụng các cập nhật cơ sở dữ liệu:drush updatedb --entity-updates
Filipe Miguel Fonseca

Nếu bạn sử dụng trình soạn thảo để áp dụng các bản vá, chúng sẽ tự động áp dụng khi bạn cập nhật các mô-đun. Điều đó nói rằng, cái này sẽ được bao gồm trong 8.6 - bản vá đã được cam kết vài ngày trước!
mortona42

5
Giống như một phần đầu, chức năng này hiện đang ở trong lõi bắt đầu với 8.6.0
Matt Fletcher

0

Tôi đã phải lọc một loại nội dung chứa ngày đấu giá thành ba nhóm (hiện trực tuyến, sắp tới và sẵn sàng đăng ký). Vì điều này liên quan đến nhiều vấn đề, tôi đã viết một plugin dựa trên bài viết này: https://www.webomelette.com/creating-custom-view-filter-drupal-8

Về cơ bản là thực hiện ba điều: - Chuyển đổi ngày trong trường thành ngày và giờ địa phương. - Bộ lọc có ba cài đặt có thể 'hiện trực tuyến', 'sắp tới' và 'khác' - Dựa trên các cài đặt, nó sẽ thêm các mệnh đề có thể vào truy vấn

Nó hoạt động và có vẻ mạnh mẽ để cập nhật trong tương lai.

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

Sử dụng plugin bộ lọc khoảng thời gian, bạn có thể chọn hai trường được sử dụng tương ứng là ngày tối thiểu và tối đa, điều này giới thiệu khái niệm về phạm vi. Sau đó, bạn có thể lọc các chế độ xem bằng cách chỉ định ngày phải được chứa hoặc không chứa trong phạm vi.

Hãy xem: https://github.com/barsan-ds/interval-filter để biết ví dụ


0

Hiện tại Lượt xem không được biết nhiều về phạm vi ngày. Nó có thể lọc vào ngày bắt đầu hoặc ngày kết thúc dưới dạng các bộ lọc riêng biệt nhưng không phải là toàn bộ phạm vi ngày.

Để bật tính năng lọc dựa trên phạm vi ngày tôi đã tạo mô-đun Chế độ xem Phạm vi ngày . Hiện tại, nó có 3 bộ lọc bổ sung cho các trường Phạm vi thời gian:

Bao gồm

Bộ lọc theo phạm vi ngày bao gồm ngày được cung cấp.

Chồng chéo

Bộ lọc theo phạm vi ngày trùng với phạm vi ngày được cung cấp.

Kết thúc bởi

Bộ lọc theo phạm vi ngày kết thúc vào ngày được cung cấp. Tương đương với "Ngày kết thúc <= ngày cung cấp". Hữu ích cho các bộ lọc được nhóm khi sử dụng "Ngày bắt đầu".


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.