Como filtrar um modo de exibição por período (início, fim)?


18

No Drupal 7 com o módulo Views e Date ativado, era muito fácil filtrar um modo de exibição por Data: A interface do usuário apenas oferecia a opção de fazê-lo.

Em Drupal 8, no entanto, o campo de data e vistas fazem parte do núcleo, mas se você escolher uma data gama campo como filtro em vista que não lhe oferece opções de data mais, mas mostra só opções para campos de texto de filtragem:insira a descrição da imagem aqui

As opções específicas da data, no entanto, estão disponíveis para valores internos da data como 'Conteúdo: alterado' insira a descrição da imagem aqui

Como eu gostaria de mostrar apenas nós específicos, com uma data anterior ou posterior à data real, onde a data é especificada por um campo de período personalizado, isso não se adequa às minhas necessidades.

Como filtrar uma exibição no Drupal 8 por um campo de data com operações específicas de data?


Os filtros de visualizações apropriadas são um problema em andamento para os períodos. O patch funciona, mas o caminho da atualização é incrivelmente difícil.
mpdonadio

@mpdonadio Você poderia me ajudar com um link para o patch, por favor?
usar o seguinte comando

2
É drupal.org/node/2786577 , mas esteja avisado de que o caminho da atualização não foi totalmente testado. Use este patch por sua conta e risco.
mpdonadio

@ Pierre.Vriens não é uma duplicata. Trata-se de um campo com datas de início e de término e filtragem sobre elas. Não é apenas um campo de valor único.
precisa saber é o seguinte

@ Neograph734 OK, isso ajuda a entender melhor as diferenças (voto retraído). Mas o OPer edita melhor essa pergunta para incluir também na pergunta real (para evitar que outros a percebam como duplicada) ... Boa sorte!
precisa saber é o seguinte

Respostas:


14

Surpreendentemente, isso ainda não é possível com o Drupal 8. Mas há uma longa história de tentativas de fazê-lo funcionar: https://www.drupal.org/node/2786577 O último patch , encontrado neste post, parece funcionar. Você pode fazer o download e aplicá-lo, usando os seguintes comandos:

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

Se gitnão estiver disponível no seu servidor, tente:

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

Para aplicar os patches, você deve navegar coreprimeiro para a pasta. E lembre-se de que você deve reaplicar esse patch depois de realizar uma atualização principal. (Isso é péssimo!) Então, esperemos que os deuses Drupal entrem em detalhes em breve!


u pode me dizer como aplicar o patch não está funcionando para mim !! @ user5950
make-me-alive

O patch funcionou para mim Obrigado @ user5950
make-me-alive

Certifique-se de aplicar as atualizações do banco de dados:drush updatedb --entity-updates
Filipe Miguel Fonseca

Se você usar o compositor para aplicar patches, eles serão aplicados automaticamente quando você atualizar os módulos. Dito isto, este será incluído no 8.6 - o patch foi confirmado há alguns dias!
mortona42

5
Assim como um alerta, essa funcionalidade agora está no núcleo, começando com 8.6.0 #
Matt Fletcher

0

Eu tive que filtrar um tipo de conteúdo contendo as datas dos leilões em três grupos (agora on-line, disponível e pronto para se registrar). Como isso envolvia vários daterange, escrevi um plugin com base neste artigo: https://www.webomelette.com/creating-custom-views-filter-drupal-8

Basicamente, há três coisas: - Converta as datas no campo em data e hora local. - O filtro possui três configurações possíveis 'now online', 'coming' e 'other' - Com base nas configurações, ele adiciona as possíveis cláusulas where à consulta

Funciona e parece robusto para futuras atualizações.

    <?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 o plug-in de filtro de intervalo, você pode escolher dois campos a serem usados, respectivamente, como data mínima e máxima, isso introduz o conceito de intervalo. Em seguida, você pode filtrar as visualizações especificando uma data que deve estar contida ou não no intervalo.

Dê uma olhada em: https://github.com/barsan-ds/interval-filter para obter exemplos


0

Atualmente, o Views não está muito ciente dos períodos. Ele pode filtrar a data de início ou de término como filtros separados, mas não o período como um todo.

Para ativar a filtragem com base no intervalo de datas, criei o módulo Visualizações Filtros de intervalo de datas . Atualmente, ele possui 3 filtros adicionais para os campos do intervalo de data e hora:

Inclui

Filtra por períodos que incluem a data fornecida.

Sobreposições

Filtra por períodos que se sobrepõem ao período fornecido.

Termina em

Filtra por períodos que terminam na data fornecida. Equivalente a "Data final <= data fornecida". Útil para filtros agrupados ao usar "Data de início".


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.