Come filtrare un intervallo di visualizzazione per data (inizio, fine)?


18

In Drupal 7 con il modulo Views an Date abilitato, è stato abbastanza semplice filtrare una vista per Data: l'interfaccia utente ti ha appena dato la possibilità di farlo.

In Drupal 8, tuttavia, il campo e le viste della data fanno parte del core, ma se si sceglie un campo dell'intervallo di date come filtro nelle viste, non offre più opzioni specifiche per la data, ma mostra solo le opzioni di filtro per i campi di testo:inserisci qui la descrizione dell'immagine

Le opzioni specifiche della data, tuttavia, sono disponibili per i valori di data interni come "Contenuto: modificato" inserisci qui la descrizione dell'immagine

Poiché vorrei mostrare solo nodi specifici, con una data precedente o successiva alla data effettiva, in cui la data è specificata da un campo dell'intervallo di date personalizzato, ciò non soddisfa le mie esigenze.

Come posso filtrare una vista in Drupal 8 per un campo data con operazioni specifiche della data?


I filtri delle viste appropriate sono un problema in corso per gli intervalli di date. La patch funziona, ma il percorso di aggiornamento è incredibilmente difficile.
mpdonadio

@mpdonadio Potresti aiutarmi con un link alla patch, per favore?
user5950,

2
È drupal.org/node/2786577 , ma tieni presente che il percorso di aggiornamento non è stato testato completamente. Utilizzare questa patch a proprio rischio.
mpdonadio

@ Pierre.Vriens non è un duplicato. Si tratta di un campo con date di inizio e fine e filtro su quelle. Non solo un singolo campo valore.
Neograph734,

@ Neograph734 OK, aiuta a comprendere meglio le differenze (votazione ritirata). Ma OPer modifica meglio questa domanda per includerla anche nella domanda reale (per evitare che gli altri la percepiscano come una copia) ... Buona fortuna!
Pierre.Vriens,

Risposte:


14

Sorprendentemente questo non è ancora possibile con Drupal 8. Ma c'è una lunga storia di tentativi di farlo funzionare: https://www.drupal.org/node/2786577 L' ultima patch , che trovi in ​​questo post, sembra funzionare. Puoi scaricarlo e applicarlo, usando i seguenti comandi:

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

Se gitnon è disponibile sul tuo server, prova:

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

PER applicare le patch devi prima passare alla corecartella. E tieni presente che devi riapplicare questa patch, dopo aver eseguito un aggiornamento di base. (Fa schifo!) Quindi speriamo che gli dei Drupal lo mettano presto al centro!


puoi per favore dirmi come applicare la patch non funziona per me !! @utente5950
make-me-alive

patch -p1 <Improve_the_views_integration_for_daterange_fields-2786577-60.patch ha funzionato per me Grazie @ user5950
make-me-alive

Assicurati di applicare gli aggiornamenti del database:drush updatedb --entity-updates
Filipe Miguel Fonseca,

Se usi compositore per applicare le patch, queste si applicheranno automaticamente quando aggiorni i moduli. Detto questo, questo verrà incluso in 8.6 - la patch è stata impegnata pochi giorni fa!
mortona42,

5
Proprio come un avvertimento, questa funzionalità è ora al centro a partire da 8.6.0
Matt Fletcher,

0

Ho dovuto filtrare un tipo di contenuto contenente le date delle aste in tre gruppi (ora online, in arrivo e pronto per la registrazione). Dato che ciò ha comportato molteplici problemi, ho scritto un plug-in basato su questo articolo: https://www.webomelette.com/creating-custom-views-filter-drupal-8

Fondamentalmente fa tre cose: - Convertire le date nel campo in data e ora locali. - Il filtro ha tre possibili impostazioni 'now online', 'coming' e 'other' - In base alle impostazioni aggiunge le possibili clausole where alla query

Funziona e sembra robusto agli aggiornamenti futuri.

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

Utilizzando il plug-in filtro intervallo è possibile scegliere due campi da utilizzare rispettivamente come data minima e massima, questo introduce il concetto di intervallo. Quindi è possibile filtrare le viste specificando una data che deve essere contenuta o non contenuta nell'intervallo.

Dai un'occhiata a: https://github.com/barsan-ds/interval-filter per esempi


0

Attualmente Views non è a conoscenza degli intervalli di date. Può filtrare la data di inizio o fine come filtri separati ma non l'intervallo di date nel suo insieme.

Per abilitare il filtro in base all'intervallo di date, ho creato il modulo Viste Intervallo di filtri di date . Attualmente ha 3 filtri aggiuntivi per i campi Intervallo datetime:

include

Filtra per intervalli di date che includono la data fornita.

Le sovrapposizioni

Filtra per intervalli di date che si sovrappongono all'intervallo di date fornito.

Termina da

Filtra per intervalli di date che terminano per la data fornita. Equivalente a "Data di fine <= data fornita". Utile per i filtri raggruppati quando si utilizza "Data di inizio".


-3

Data popup Questo modulo serve allo scopo.


Il modulo è buono, ma sostituisce solo i componenti dell'interfaccia utente e non consente di gestire il tipo di valore.
milkovsky
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.