기간별로보기를 필터링하는 방법 (시작, 종료)?


18

날짜 보기 모듈을 사용 하는 Drupal 7에서는 날짜 별로보기를 필터링하기가 매우 쉽습니다. UI에서 방금 옵션을 제공했습니다.

그러나 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먼저 폴더 로 이동해야합니다 . 또한 핵심 업데이트를 커밋 한 후에이 패치를 다시 적용해야합니다. Drupal Gods가 이것을 핵심으로 곧 가져올 것입니다.


패치를 적용하는 방법을 알려주십시오. @ user5950
make-me-alive

patch -p1 <enhance_the_views_integration_for_daterange_fields-2786577-60.patch 나를 위해 일했습니다 Thanks @ user5950
make-me-alive

데이터베이스 업데이트를 적용하십시오 :drush updatedb --entity-updates
Filipe Miguel Fonseca

composer를 사용하여 패치를 적용하면 모듈을 업데이트 할 때 자동으로 적용됩니다. 즉, 이것은 8.6에 포함될 예정입니다-패치는 며칠 전에 완결되었습니다!
mortona42

5
그냥 헤드 업으로,이 기능은 8.6.0로 시작하는 핵심에 지금
매트 플레처

0

경매 날짜가 포함 된 컨텐츠 유형을 세 그룹 (현재 온라인, 곧 예정된 등록 준비)으로 필터링해야했습니다. 이것은 여러 날짜 범위와 관련되어 있으므로이 기사를 기반으로 플러그인을 작성했습니다 : https://www.webomelette.com/creating-custom-views-filter-drupal-8

기본적으로 세 가지 작업이 수행됩니다.-필드의 날짜를 현지 날짜 및 시간으로 변환합니다. -필터에는 '지금 온라인', '다가오는'및 '기타'의 세 가지 가능한 설정이 있습니다.-설정에 따라 쿼리에 가능한 where-clauses를 추가합니다.

작동하며 향후 업데이트에 강력 해 보입니다.

    <?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 개의 추가 필터가 있습니다.

포함

제공된 날짜가 포함 된 날짜 범위별로 필터링합니다.

오버랩

제공된 날짜 범위와 겹치는 날짜 범위를 기준으로 필터링합니다.

에 의해 끝남

제공된 날짜로 끝나는 날짜 범위를 기준으로 필터링합니다. "종료일 <= 제공된 날짜"와 같습니다. "시작 날짜"를 사용할 때 그룹화 된 필터에 유용합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.