¿Cómo filtrar una vista por rango de fechas (inicio, fin)?


18

En Drupal 7 con el módulo Vistas una fecha habilitado, fue bastante fácil filtrar una vista por Fecha: la interfaz de usuario solo le dio la opción de hacerlo.

Sin embargo, en Drupal 8, el campo de fecha y las vistas son parte del núcleo, pero si elige un campo de rango de fechas como filtro en las vistas, ya no le ofrece opciones específicas de fecha, sino que le muestra solo opciones de filtrado para campos de texto:ingrese la descripción de la imagen aquí

Sin embargo, las opciones específicas de fecha están disponibles para valores de fecha internos como "Contenido: modificado" ingrese la descripción de la imagen aquí

Como me gustaría mostrar solo nodos específicos, con una fecha anterior o posterior a la fecha real, donde la fecha se especifica mediante un campo de intervalo de fechas personalizado, esto no se ajusta a mis necesidades.

¿Cómo puedo filtrar una vista en Drupal 8 por un campo de fecha con operaciones específicas de fecha?


Los filtros de vistas adecuadas son un problema en proceso para los rangos de fechas. El parche funciona, pero la ruta de actualización es increíblemente difícil.
mpdonadio

@mpdonadio ¿Podría ayudarme con un enlace al parche, por favor?
user5950

2
Es drupal.org/node/2786577 , pero tenga en cuenta que la ruta de actualización no está completamente probada. Use este parche bajo su propio riesgo.
mpdonadio

@ Pierre.Vriens no es un duplicado. Se trata de un campo con fechas de inicio y finalización y filtrado en ellas. No solo un campo de valor único.
Neograph734

@ Neograph734 OK, eso ayuda a comprender mejor las diferencias (voto retraído). Pero OPer edita mejor esta pregunta para incluirla también en la pregunta real (para evitar que otros la perciban como un duplicado) ... ¡Buena suerte!
Pierre.Vriens

Respuestas:


14

Sorprendentemente, esto no es posible con Drupal 8 todavía. Pero hay una larga historia de intentar hacer que funcione: https://www.drupal.org/node/2786577 El último parche , que se encuentra en esta publicación, parece funcionar. Puede descargarlo y aplicarlo, utilizando los siguientes comandos:

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

Si gitno está disponible en su servidor, intente:

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

Para aplicar los parches coreprimero debe navegar a la carpeta. Y tenga en cuenta que debe volver a aplicar este parche después de realizar una actualización principal. (¡Esto apesta!) ¡Así que esperemos que los Dioses Drupal lo entiendan pronto!


¿Puedes decirme cómo aplicar el parche no funciona para mí! @ user5950
make-me-alive

parche -p1 <mejorar_la_vista_integración_para_campo_de_actualización-2786577-60.patch funcionó para mí Gracias @ user5950
make-me-alive

Asegúrese de aplicar las actualizaciones de la base de datos:drush updatedb --entity-updates
Filipe Miguel Fonseca

Si usa Composer para aplicar parches, se aplicarán automáticamente cuando actualice los módulos. Dicho esto, este se incluirá en 8.6: ¡el parche se envió hace unos días!
mortona42

55
Solo como un aviso, esta funcionalidad ahora está en el núcleo comenzando con 8.6.0
Matt Fletcher

0

Tuve que filtrar un tipo de contenido que contenía las fechas de las subastas en tres grupos (ahora en línea, próximo y listo para registrarse). Como esto involucraba múltiples fechas, escribí un complemento basado en este artículo: https://www.webomelette.com/creating-custom-views-filter-drupal-8

Básicamente se hace tres cosas: - Convertir las fechas en el campo a la fecha y hora local. - El filtro tiene tres configuraciones posibles 'ahora en línea', 'próximo' y 'otro' - En función de la configuración, agrega las posibles cláusulas where a la consulta

Funciona y parece robusto para futuras actualizaciones.

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

Usando el complemento de filtro de intervalo, puede elegir dos campos para usar respectivamente como fecha mínima y máxima, esto introduce el concepto de rango. Luego puede filtrar las vistas especificando una fecha que debe estar contenida o no en el rango.

Eche un vistazo a: https://github.com/barsan-ds/interval-filter para ver ejemplos


0

Actualmente, Views no conoce los intervalos de fechas. Puede filtrar la fecha de inicio o finalización como filtros separados, pero no el rango de fechas en su conjunto.

Para habilitar el filtrado basado en el rango de fechas, creé el módulo Vistas Filtros de rango de fechas . Actualmente tiene 3 filtros adicionales para los campos de Rango de fecha y hora:

Incluye

Filtra por rangos de fechas que incluyen la fecha suministrada.

Solapamientos

Filtra por rangos de fechas que se superponen con el rango de fechas proporcionado.

Termina por

Filtra por rangos de fechas que finalizan en la fecha provista. Equivalente a "Fecha final <= fecha suministrada". Útil para filtros agrupados cuando se usa "Fecha de inicio".


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.