Bagaimana saya bisa mengurutkan tampilan berdasarkan bidang yang ditulis ulang?

10

Saya memiliki pandangan tentang tipe konten yang berisi dua bidang tanggal yang berbeda (satu dengan tanggal berulang dan satu tanggal tunggal multinilai). Hanya satu bidang tanggal yang diisi pada waktu tertentu. Di tampilan tampilan, saya telah menggabungkan dua bidang dengan menyembunyikan bidang tanggal pertama dan menulis ulang yang kedua dan termasuk token pengganti yang pertama dan kedua. Apakah ada cara untuk sekarang menggunakan bidang yang ditulis ulang untuk mengurutkan tampilan dalam urutan menaik berdasarkan bidang tanggal gabungan ini? Tampaknya mengurutkannya berdasarkan nilai asli bidang tanggal.

Saya telah melakukan penelitian dan hanya menemukan utas yang lama, agak terkait, jalan buntu.

tampilan disortir berdasarkan bidang yang ditulis ulang?

Tabel tidak mengurutkan pada bidang yang ditulis ulang, tetapi pada bidang asli

Tampilan: bidang khusus untuk kriteria sortir

Urutkan berdasarkan global: teks khusus. Apa itu mungkin?

Saya berharap ada cara baru atau licik untuk mewujudkan hal ini.

Nigel Waters
sumber
Apakah ada alasan mengapa Anda tidak dapat menggunakan jawaban merlinofchaos? drupal.org/node/1260160#comment-4907526
Kari Kääriäinen
Dia tidak benar-benar memberikan jawaban tentang cara menggunakan bidang yang dihitung. Dia hanya merekomendasikan menggunakannya. Saya tidak keberatan mencobanya tetapi saya tidak tahu apa yang harus dilakukan dengan modul. Saya juga berharap mungkin ada sesuatu yang baru untuk dicoba sejak itu 2 tahun yang lalu dan untuk Drupal 6.
Nigel Waters
Ya, itu jawaban singkat. Prinsipnya masih sama. Lihat jawaban saya.
Kari Kääriäinen
Apa yang ingin Anda lakukan dengan bidang tanggal itu? Pilih tanggal berikutnya?
Kari Kääriäinen
Saya ingin mengurutkan jenis konten acara berdasarkan dua bidang tanggal dalam urutan menaik.
Nigel Waters

Jawaban:

4

Jika Anda tidak ingin menggunakan rute modul, ini adalah salah satu alternatif:

1) menginstal modul Bidang Dihitung
2) menambahkan bidang yang dikomputasi ke tipe konten Anda
3) dalam pengaturan bidang, dalam textarea kode Terkomputasi (PHP), Anda dapat mengakses data bidang.

Dapatkan bidang tanggal Anda di bahasa Anda saat ini ke variabel.

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

Nilai tanggal Anda sekarang dapat ditemukan di

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

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

Lakukan logika apa pun yang Anda perlukan dengan bidang tanggal Anda dan tetapkan hasilnya

$entity_field[0]['value']

Sekarang Anda memiliki bidang yang dapat diurutkan yang dapat Anda gunakan dalam tampilan, tetapi pertama-tama Anda harus memperbarui semua node karena bidang yang dihitung hanya akan dihitung dan disimpan ke database di node save. Ada banyak cara untuk melakukan ini, salah satunya menggunakan Operasi Tampilan Massal, ini memberi Anda pilihan untuk menyimpan kembali node di admin / konten.

Kari Kääriäinen
sumber
Saya tidak yakin ini akan bekerja dengan satu bidang tanggal dengan tanggal berulang dan bidang lain dengan tanggal tunggal (dengan pengaturan tidak terbatas). Ini dapat bekerja dalam kasus di mana kedua bidang hanya nilai tunggal.
Nigel Waters
Saya mengedit jawaban saya untuk kasus-kasus itu. Dengan menggunakan dpm ($ entitas) Anda dapat melihat apa struktur bidang tanggal Anda. dpm hadir dengan modul Devel.
Kari Kääriäinen
Tolong jangan rekomendasikan [und]sintaksisnya. Gunakan field_get_items sebagai gantinya.
Letharion
1

Saya pikir Anda bisa melakukannya dengan Views Natural Sort . Ini memiliki opsi untuk mengurutkan bidang berarti - Aktifkan Sortasi untuk Bidang Tertentu . Jika Anda mengikuti tutorial ini, Anda akan mendapatkan ide !!.

Bala
sumber
drupal.org/project/partial_date memiliki opsi untuk berintegrasi dengan tampilan
Bala
0

Satu-satunya cara licik untuk mewujudkan hal ini adalah jika Anda tidak menggunakan pagination, maka Anda dapat menggunakan pengurutan PHP dalam pengesampingan kueri khusus yang tidak bergantung pada database.

Menurut stevector ,

Pagination adalah apa yang benar-benar menghentikan kita dari pengurutan berdasarkan bidang yang dihitung karena biasanya kita perlu mengatakan "Database! Dapatkan saya hasil 21-30 saat mengurutkan berdasarkan kolom nid".

Jadi, Anda tidak dapat secara andal mendapatkan hasil 21-30 dari db jika db tidak tahu cara mendefinisikan 21-30 (seperti dalam kasus bidang yang dihitung).

Jadi solusi yang paling praktis dan dapat diandalkan adalah menggunakan Computed Field sebagaimana disebutkan oleh Kari Kääriäinen.

beth
sumber
Sepertinya seseorang menurunkan saya setelah saya menentukan nomor versi dan memperbaiki kesalahan salin. Apakah ada yang salah dengan jawaban ini?
beth
Saya memilih sebelumnya untuk pendekatan modul, tetapi kemudian turun karena ini, seperti yang lain, termasuk saya, bukan jawaban yang dapat digunakan karena pertanyaan itu sendiri masih belum jelas, setidaknya bagi saya.
Kari Kääriäinen
Pertanyaan itu tampak jelas bagi saya. Saya akan menambahkan beberapa klarifikasi untuk jawaban saya.
beth
Sudahlah, saya menyadari bahwa Views tidak berperilaku persis seperti yang saya pikirkan.
beth
0

Ini sedikit cara hacky untuk melakukannya, tetapi ini berhasil dan Anda tidak memerlukan modul tambahan.

Buat label untuk bidang yang ingin Anda urutkan dan JANGAN kecualikan dari tampilan. Sebagai gantinya, tulis ulang tampilan sebagai "kosong" dengan menambahkan <!---->komentar html kosong sebagai nilai penulisan ulang. Kemudian tambahkan bidang php / ditulis ulang Anda sebagai anak dari kolom ini.

Ini akan menampilkan header tabel untuk kolom yang benar untuk disortir.

licik
sumber