Como posso classificar uma exibição com base em um campo reescrito?

10

Tenho uma visualização de um tipo de conteúdo que contém dois campos de data diferentes (um com repetições de data e um com datas únicas com vários valores). Somente um campo de data é preenchido a qualquer momento. Na exibição da visualização, combinei os dois campos ocultando o primeiro campo de data e reescrevendo o segundo e incluindo o token de substituição do primeiro e do segundo. Existe alguma maneira de agora usar o campo reescrito para classificar a exibição em ordem crescente com base nesse campo de data combinado? Parece que o classifica com base no valor original do campo de data.

Eu fiz minha pesquisa e só encontrei tópicos antigos, um tanto relacionados, com becos sem saída.

visualizações classificando por campo reescrito?

A tabela não classifica no campo reescrito, mas no campo original

Exibições: campo personalizado para critérios de classificação

Classificar por global: texto personalizado. É possível?

Eu esperava que houvesse uma maneira nova ou sorrateira de fazer isso acontecer.

Nigel Waters
fonte
Existe alguma razão para você não poder usar a resposta de merlinofchaos? drupal.org/node/1260160#comment-4907526
Kari Kääriäinen
Na verdade, ele não fornece uma resposta sobre como usar o campo computado. Ele apenas recomenda usá-lo. Não me importo de tentar, mas não sei o que fazer com o módulo. Eu também esperava que poderia haver algo novo para experimentar desde que foi há 2 anos e para Drupal 6.
Nigel Waters
Sim, essa foi uma resposta curta. O princípio ainda é o mesmo. Veja minha resposta.
Kari Kääriäinen
O que você deseja fazer com esses campos de data? Escolha a próxima data a chegar?
Kari Kääriäinen
Quero classificar o tipo de conteúdo do evento pelos dois campos de data em ordem crescente.
Nigel Waters

Respostas:

4

Se você não quiser seguir a rota do módulo, esta é uma alternativa:

1) instale o módulo Campo computado
2) adicione um campo computado ao seu tipo de conteúdo
3) nas configurações do campo, na área de texto Código computado (PHP), você pode acessar os dados do campo.

Obtenha seus campos de data em sua linguagem atual para uma variável.

$repeating_dates = field_get_items($entity_type, $entity, 'field_repeating_date_example');
$multidates = field_get_items($entity_type, $entity, 'field_multidate_example');

Seus valores de data agora podem ser encontrados em

$repeating_dates[0]['value'],
$repeating_dates[1]['value'],
$repeating_dates[2]['value'], etc.

$multidates[0]['value'],
$multidates[1]['value'],
$multidates[2]['value'], etc.

Faça a lógica necessária com os campos de data e atribua o resultado a

$entity_field[0]['value']

Agora você tem um campo classificável que pode ser usado nas visualizações, mas primeiro é necessário atualizar todos os nós, pois o campo computado será computado e salvo apenas no banco de dados ao salvar o nó. Existem várias maneiras de fazer isso: uma é usando o Views Bulk Operations; oferece a opção de salvar novamente nós em admin / content.

Kari Kääriäinen
fonte
Não tenho certeza se isso funcionará com um campo de data com datas repetidas e outro campo com data única (com configuração de ilimitado). Isso pode funcionar no caso em que os dois campos são apenas valores únicos.
Nigel Waters
Eu editei minha resposta cobrindo esses casos. Usando dpm ($ entity), você pode ver qual é a estrutura dos seus campos de data. O dpm vem com o módulo Devel.
Kari Kääriäinen
Por favor, não recomende a [und]sintaxe. Use field_get_items.
Letharion 16/09
1

Eu acho que você pode fazer isso com o Views Natural Sort . Tem a opção de classificar os campos significa - Ativar classificação para campos específicos . Se você seguir este tutorial , terá uma idéia !!.

Bala
fonte
drupal.org/project/partial_date, ele tem a opção de integrar-se com visualizações
Bala
0

A única maneira sorrateira de fazer isso acontecer é que, se você não usar a paginação, poderá usar a classificação PHP em uma substituição de consulta personalizada que não depende do banco de dados.

De acordo com stevector ,

Paginação é o que realmente nos impede de classificar por campos computados, porque normalmente precisamos dizer "Banco de dados! Obtenha-me os resultados 21-30 ao classificar pela coluna nid".

Portanto, você não pode obter resultados 21-30 de forma confiável a partir do banco de dados se o banco de dados não souber definir o 21-30 (como no caso de um campo computado).

Portanto, a solução mais prática e confiável é usar o Campo Computado, conforme mencionado por Kari Kääriäinen.

beth
fonte
Parece que alguém me rebaixou depois que especifiquei o número da versão e corrigi um erro de copiar e colar. Há algo de errado com esta resposta?
beth
Votei anteriormente na abordagem do módulo, mas depois votei porque essa, como qualquer outra, inclusive a minha, não é uma resposta utilizável porque a pergunta em si ainda não está clara, pelo menos para mim.
Kari Kääriäinen
A pergunta parece clara para mim. Vou acrescentar alguns esclarecimentos à minha resposta.
beth
Não importa, percebi que o Views não se comporta exatamente como eu.
beth
0

Essa é uma maneira um tanto hacky de fazer isso, mas funciona e você não precisa de módulos adicionais.

Crie um rótulo para o campo que você deseja classificar e NÃO o exclua da exibição. Em vez disso, reescreva a exibição como "em branco" adicionando um <!---->comentário html vazio como valor de reescrita. Em seguida, adicione seu outro campo php / reescrito como filho desta coluna.

Isso exibirá o cabeçalho da tabela para a coluna correta para classificação.

slickrickulous
fonte