Bir Görünümü Tarih Aralıkına göre filtreleme (başlangıç, bitiş)?


18

İle Drupal 7 Görünümler bir tarihi modülü etkinleştirilmiş, bu tarihi bir görünüm filtrelemek için oldukça kolaydı: UI sadece bunun için gereken seçeneği verdi.

Bununla birlikte, Drupal 8'de tarih alanı ve görünümler çekirdeğin bir parçasıdır, ancak görünümlerde filtre olarak bir tarih aralığı alanı seçerseniz , artık tarihe özel seçenekler sunmaz, ancak yalnızca metin alanları için filtreleme seçeneklerini gösterir:resim açıklamasını buraya girin

Ancak tarihe özgü seçenekler, ´İçerik: Değişti´ gibi dahili tarih değerleri için kullanılabilir resim açıklamasını buraya girin

Tarihin özel bir tarih aralığı alanı ile belirtildiği, gerçek tarihten önce veya sonra bir tarih içeren yalnızca belirli düğümleri göstermek istediğim için, bu benim ihtiyaçlarıma uymuyor.

Drupal 8'deki bir görünümü tarihe özgü işlemlerle tarih alanına göre nasıl filtreleyebilirim?


Doğru görünüm filtreleri, tarih aralıkları için işlemde bir konudur. Yama çalışır, ancak güncelleme yolu inanılmaz derecede zordur.
mpdonadio

@mpdonadio Düzeltme ekinin bağlantısı konusunda bana yardımcı olabilir misiniz, lütfen?
user5950

2
Bu drupal.org/node/2786577 , ancak güncelleme yolunun tam olarak test edilmediği konusunda uyarılmalıdır. Bu yamayı kendi sorumluluğunuzda kullanın.
mpdonadio

@ Pierre.Vriens bu bir kopya değil. Bu, başlangıç ​​ve bitiş tarihleri ​​ve bunlara filtre uygulayan bir alanla ilgilidir. Sadece tek bir değer alanı değil.
Neograph734

@ Neograph734 Tamam, bu farkların daha iyi anlaşılmasına yardımcı oluyor (oy geri çekildi). Ama OPer bu soruyu gerçek soruya da dahil etmek için daha iyi düzenler (başkalarının bunu yinelemesini önlemek için) ... İyi şanslar!
Pierre.Vriens

Yanıtlar:


14

Şaşırtıcı bir şekilde bu Drupal 8 ile henüz mümkün değil. Ama işe yaramaya çalışmanın uzun bir tarihi var: https://www.drupal.org/node/2786577 Bu yayında bulduğunuz son yama işe yarıyor gibi görünüyor. Aşağıdaki komutları kullanarak indirip uygulayabilirsiniz:

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

Eğer gitsunucunuzda mevcut değildir, denemek:

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

Yamaları uygulamak için önce coreklasöre gitmelisiniz. Ve temel bir güncelleme yaptıktan sonra bu yamayı tekrar uygulamanız gerektiğini unutmayın. (Bu berbat!) Diyelim ki, Drupal Tanrıları bunu yakında özüne taşıyacak!


u bana yama çalışmıyor nasıl söyleyebilir lütfen benim için çalışmıyor !! @ user5950
Make-me-alive

yama -p1 <improve_the_views_integration_for_daterange_fields-2786577-60.patch benim için çalıştı Thanks @ user5950
make-me-alive

Veritabanı güncellemelerini uyguladığınızdan emin olun:drush updatedb --entity-updates
Filipe Miguel Fonseca

Yamaları uygulamak için besteci kullanırsanız, modülleri güncellediğinizde bunlar otomatik olarak uygulanır. Bununla birlikte, bu 8.6'ya dahil edilecek - yama birkaç gün önce işlendi!
mortona42 13:18

5
Tıpkı kafa vuruşu gibi, bu işlevsellik artık 8.6.0 ile başlıyor
Matt Fletcher

0

Açık artırmaların tarihlerini içeren bir içerik türünü üç gruba (şimdi çevrimiçi, yaklaşan ve kaydolmaya hazır) filtrelemek zorundaydım. Bu birden fazla tarih aralığı içerdiğinden, bu makaleye dayanan bir eklenti yazdım: https://www.webomelette.com/creating-custom-views-filter-drupal-8

Temelde üç şey yapar: - Alandaki tarihleri ​​yerel tarih ve saate dönüştürün. - Filtrenin 'şimdi çevrimiçi', 'yaklaşmakta olan' ve 'diğer' olmak üzere üç olası ayarı vardır - Ayarlara bağlı olarak, sorguya olası nerede cümleleri ekler

Çalışıyor ve gelecekteki güncellemelere karşı sağlam görünüyor.

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

Aralık filtre eklentisini kullanarak sırasıyla minimum ve maksimum tarih olarak kullanılacak iki alan seçebilirsiniz, bu aralık kavramını tanıtır. Ardından, aralıkta bulunması veya bulunmaması gereken bir tarih belirterek görünümlere filtre uygulayabilirsiniz.

Örnekler için bakınız: https://github.com/barsan-ds/interval-filter örnekler


0

Şu anda Views, tarih aralıklarının pek farkında değil. Başlangıç ​​veya bitiş tarihini ayrı filtreler olarak filtreleyebilir, ancak bir bütün olarak tarih aralığını filtreleyemez.

Tarih aralığına göre filtrelemeyi etkinleştirmek için Görüntüleme Tarih Aralığı Filtreleri modülünü oluşturdum . Şu anda Datetime Range alanları için 3 ek filtre var:

İçerir

Sağlanan tarihi içeren tarih aralıklarına göre filtreler.

Çakışmaları

Sağlanan tarih aralığıyla çakışan tarih aralıklarına göre filtreler.

Bitiş tarihi:

Belirtilen tarihle biten tarih aralıklarına göre filtreler. "Bitiş tarihi <= verilen tarih" e eşdeğerdir. "Başlangıç ​​tarihi" kullanılırken gruplandırılmış filtreler için kullanışlıdır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.