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.


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.


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


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.


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.

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.