Come posso ordinare una vista in base a un campo riscritto?


10

Ho una visione di un tipo di contenuto che contiene due diversi campi di date (uno con ripetizioni di data e uno di singole date multivalore). Viene compilato un solo campo di data alla volta. Nella visualizzazione della vista, ho combinato i due campi nascondendo il primo campo della data e riscrivendo il secondo e includendo il token di sostituzione del primo e del secondo. Esiste un modo per utilizzare ora il campo riscritto per ordinare la vista in ordine crescente in base a questo campo data combinato? Sembra che lo ordina in base al valore originale del campo data.

Ho fatto le mie ricerche e ho trovato solo vecchi thread, in qualche modo correlati, con vicoli ciechi.

ordinamento visualizzazioni per campo riscritto?

La tabella non viene ordinata per campo riscritto, ma per campo originale

Visualizzazioni: campo personalizzato per i criteri di ordinamento

Ordina per globale: testo personalizzato. È possibile?

Speravo che ci fosse un modo nuovo o subdolo per farlo accadere.


C'è qualche motivo per cui non puoi usare la risposta di merlinofchaos? drupal.org/node/1260160#comment-4907526
Kari Kääriäinen

In realtà non fornisce una risposta su come utilizzare il campo calcolato. Raccomanda solo di usarlo. Non mi dispiace provarlo ma non so cosa fare con il modulo. Speravo anche che ci potesse essere qualcosa di nuovo da provare da quando era 2 anni fa e per Drupal 6.
Nigel Waters,

Sì, questa è stata una risposta breve. Il principio è sempre lo stesso. Vedi la mia risposta
Kari Kääriäinen,

Che cosa vuoi fare con quei campi data? Scegli la prossima data in arrivo?
Kari Kääriäinen,

Voglio ordinare il tipo di contenuto dell'evento in base ai due campi data in ordine crescente.
Nigel Waters,

Risposte:


4

Se non vuoi seguire il percorso del modulo, questa è un'alternativa:

1) installa il modulo Campo Computato
2) aggiungi un campo calcolato al tuo tipo di contenuto
3) nelle impostazioni del campo, nell'area di testo Codice calcolato (PHP), puoi accedere ai dati del campo.

Porta i campi della data nel tuo linguaggio corrente in una variabile.

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

I valori della tua data ora possono essere trovati in

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

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

Fai la logica di cui hai bisogno con i campi della data e assegna il risultato a

$entity_field[0]['value']

Ora hai un campo ordinabile che puoi usare nelle viste, ma prima devi aggiornare tutti i nodi poiché il campo calcolato verrà calcolato e salvato nel database solo al salvataggio del nodo. Esistono molti modi per farlo, uno sta usando Views Bulk Operations, ti dà la possibilità di salvare nuovamente i nodi in admin / content.


Non sono sicuro che funzionerà con un campo data con date ripetute e un altro campo con data singola (con impostazione illimitata). Questo potrebbe funzionare nel caso in cui entrambi i campi siano solo valori singoli.
Nigel Waters,

Ho modificato la mia risposta relativa a quei casi. Usando dpm ($ entity) puoi vedere qual è la struttura dei tuoi campi data. dpm viene fornito con il modulo Devel.
Kari Kääriäinen,

Si prega di non raccomandare la [und]sintassi. Utilizzare invece field_get_items.
Letharion,


0

L'unico modo subdolo per far sì che ciò avvenga è se non si utilizza l'impaginazione, quindi è possibile utilizzare l'ordinamento PHP in una sostituzione di query personalizzata che non si basa sul database.

Secondo Stevector ,

La paginazione è ciò che ci impedisce davvero di ordinare per campi calcolati perché normalmente dobbiamo dire "Database! Ottieni risultati 21-30 quando si ordina per colonna nid".

Quindi non è possibile ottenere in modo affidabile i risultati 21-30 dal db se il db non sa come definire il 21-30 (come nel caso di un campo calcolato).

Quindi la soluzione più pratica e affidabile è utilizzare il campo calcolato come indicato da Kari Kääriäinen.


Sembra che qualcuno mi abbia sottovalutato dopo aver specificato il numero di versione e corretto un errore di copia incolla. C'è qualcosa di sbagliato in questa risposta?
Bet,

Ho votato prima per l'approccio del modulo, ma successivamente ho annullato il voto perché questa, proprio come qualsiasi altra, compresa la mia, non è una risposta utilizzabile perché la domanda in sé non è ancora chiara, almeno per me.
Kari Kääriäinen,

La domanda mi sembra chiara. Aggiungerò alcuni chiarimenti alla mia risposta.
Beth,

Non importa, ho capito che Views non si comporta esattamente come pensavo.
Bet,

0

Questo è un po 'un modo bizzarro per farlo, ma funziona e non hai bisogno di moduli aggiuntivi.

Creare un'etichetta per il campo che si desidera ordinare e NON escluderlo dalla visualizzazione. Invece, riscrivi il display come "vuoto" aggiungendo un <!---->commento HTML vuoto come valore di riscrittura. Quindi aggiungi l'altro tuo campo php / riscritto come figlio di questa colonna.

Ciò visualizzerà l'intestazione della tabella per la colonna corretta per l'ordinamento.

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.