Tunjukkan apakah ada komentar 'baru' tentang tampilan istilah?

7

Saya punya komentar tentang node yang dikategorikan berdasarkan istilah. Saya perlu menunjukkan tampilan persyaratan dan jika ada komentar baru di salah satu node yang ditandai dengan istilah.

Jadi jika saya memiliki yang berikut ini:

Term1
-NodeA (has new comments)
-NodeB (has new comments) 
Term2
-NodeC (no new comments) 
-NodeD (no new comments) 
Term3
-NodeE (no new comments) 
-NodeF (has new comments)
Term4

Saya perlu pandangan saya untuk terlihat seperti ini:

Term1  new comments!
Term2
Term3  new comments!
Term4

Pertama saya mencoba membuat pandangan komentar untuk memasukkan bidang komentar baru dan menggunakan hubungan untuk menunjukkan persyaratan. Namun jika suatu istilah tidak memiliki simpul atau komentar (Term4 dalam contoh saya) saya perlu istilah tersebut masih ditampilkan.

Jadi saya kemudian mencoba melihat ketentuan-ketentuannya. Saya menambahkan hubungan 'istilah Taksonomi: Konten dengan istilah' dan bidang 'Konten: Komentar baru' yang menggunakan hubungan ini. Ini memang menunjukkan jumlah komentar baru seperti yang diharapkan. Ini memberi saya hasil yang digandakan (yang mungkin dapat saya perbaiki dengan bidang pengelompokan) tetapi secara tak terduga juga menyembunyikan istilah yang tidak memiliki komentar atau node.

Apakah saya akan melakukan ini dengan cara yang benar dan jika demikian bagaimana saya bisa menghentikan istilah 'kosong' disembunyikan?

PEMBARUAN Ive memperbarui D core dan beberapa modul yang memiliki versi baru (tetapi tidak dilihat). Tampilan berfungsi dengan baik dengan hubungan 'Konfigurasikan Hubungan: Istilah taksonomi: Konten dengan istilah' ketika bidangnya adalah 'Konten: Judul (Judul)'. Namun ketika saya menambahkan bidang 'Konten: Komentar baru' maka istilah yang tidak memiliki komentar disembunyikan.

PEMBARUAN Saya sudah mencoba yang berikut ini di bidang tampilan:

if(intval($data->node_new_comments) > 0) {
  if(!array_key_exists($data->tid, $static)) {
    print "new comments !";
    $static[$data->tid] = 1;
  }
} else {
  print "here you do whatever you want when there's no new comment";
}

PEMBARUAN - oleh 'komentar baru' Maksud saya komentar yang belum dibaca pengguna yang masuk. Ini adalah bidang standar dalam tampilan. Saya membutuhkan ini daripada memotong tanggal sewenang-wenang. Maaf atas kebingungan.

Evans
sumber
Apakah istilah tersebut masih disembunyikan jika hubungan pandangan diatur ke tidak diperlukan?
David Thomas
Inilah hal-hal debugging yang akan saya teliti jika itu adalah saya, menjawabnya dapat membantu seseorang menjawab ini: 1) Apakah istilah tersebut muncul kembali saat menghapus bidang Komentar Baru, hubungan, dan / atau keduanya? 2) Apa yang terjadi ketika Anda menggunakan Nama Term sebagai bidang pengelompokan, atau, tambahkan Istilah Term dan menggunakannya sebagai bidang pengelompokan? 3) 2) Apakah bidang nama istilah pasti Taxonomy term: Term name dan tidak Content: -term vocabulary-(kesalahan mudah untuk membuat!) 4) Apakah Anda melihat hal yang sama jika Anda membuat tampilan Ketentuan Taksonomi baru dari awal dengan hanya hubungan, Taxonomy Term: Term Namedan Content: New Comments?
user56reinstatemonica8
Drupal versi apa yang Anda gunakan? dengan versi tampilan yang mana? Apakah Anda bekerja dengan hubungan karena alasan tertentu? apakah Anda mencoba opsi "group by"?
pasine
@ notme im menggunakan drupal dan modul terbaru. Karena saya memiliki pandangan istilah, saya perlu menggunakan hubungan untuk sampai ke bidang yang menunjukkan jika node memiliki komentar baru.
Evans
1
@ notme, jika tampilan adalah daftar node, sekali lagi - istilah yang tidak memiliki node terpasang tidak akan tersedia, sehingga masalah yang sama akan berlaku. jdln, bukan solusi yang sempurna, tetapi bagaimana dengan menambahkan lampiran baru ke tampilan Anda yang hanya menampilkan istilah yang tidak memiliki node dan melampirkan tampilan itu di bawah tampilan halaman biasa? Apakah itu akan berhasil? Maka istilah tanpa node akan selalu dicetak di bagian bawah, jadi menyortir tidak akan semudah itu - tapi mungkin itu pilihan.
Boriana Ditcheva

Jawaban:

1

Ini bekerja untuk saya. Saya memiliki tampilan istilah yang menunjukkan bidang nama istilah dan kode saya menambahkan bendera komentar baru setelah nama istilah.

Kode masuk dalam modul khusus.

Anda perlu mengubah ke VIEW_NAME ke nama tampilan Anda dan TAXONOMY_FIELD_NAME ke nama bidang Anda (seperti misalnya field_tags).

/**
 * Implements hook_views_pre_render().
 */
function MYMODULE_views_pre_render(&$view) {
  global $user;
  if ($view->name == 'VIEW_NAME' && $user->uid) {
    // Get all the tids of the views results.
    $tids = array();
    foreach ($view->result as $result) {
      $tids[] = $result->tid;
    }

    // Get all the tids that have recent comments.
    // Only return terms that relate to nodes that have not been viewed by
    // the current user since the last comment.
    $query = db_query("SELECT t.TAXONOMY_FIELD_NAME_tid
                         FROM {node_comment_statistics} c
              LEFT OUTER JOIN {history} h ON c.nid = h.nid AND h.uid = :uid
                   INNER JOIN {field_data_TAXONOMY_FIELD_NAME} t ON t.entity_id = c.nid
                        WHERE c.comment_count > 0
                          AND t.TAXONOMY_FIELD_NAME_tid IN (:tids)
                          AND (h.timestamp IS NULL OR h.timestamp < c.last_comment_timestamp)",
               array(':uid' => $user->uid, ':tids' => $tids));
    $commented_terms = $query->fetchCol();

    // Loop through the results and add the new comments flag where necessary.
    foreach ($view->result as &$result) {
      if (in_array($result->tid, $commented_terms)) {
        $result->taxonomy_term_data_name .= ' new comments!';
      }
    }
  }
}
jorok
sumber
Yang dimaksud dengan komentar 'baru' adalah komentar yang belum dilihat oleh pengguna yang masuk. Ini adalah bidang standar dalam tampilan. Apakah kode Anda menggunakan ini, atau itu nilai tanggal yang berubah-ubah? Dari komentar kode Anda sepertinya yang terakhir?
Evanss
Selain komentar @ jdln di atas, historytabel berisi data node baca oleh uid.
AyeshK
Itu menggunakan waktu akses terakhir pengguna, jadi itu akan menampilkan komentar tertulis sejak pengguna terakhir masuk. Untuk pengguna yang sudah keluar, ia menggunakan periode tetap 2 minggu. Saya sekarang telah mengubahnya sehingga hanya berfungsi untuk pengguna yang masuk dan didasarkan pada saat pengguna terakhir melihat node yang komentarnya aktif.
rooby
0

Menambahkan bidang 'Konten: Komentar baru' menambahkan INNER JOINtabel ke node_comment_statistics, yang berpotensi menjadi sumber masalah yang Anda alami. (Misalnya, jika tidak ada entri untuk NodeC, NodeD dan NodeE di node_comment_statistics karena beberapa alasan, istilah tidak akan ditampilkan karena JOINmenjadi INNERsatu.)

Apakah membangun kembali node_comment_statistics membantu?

jamix
sumber
Alasan saya mendapatkan hasil tambahan adalah saya mendapatkan hasil untuk setiap node, karena setiap node memiliki nilai angka untuk jumlah komentar baru. Itu menjengkelkan bahwa saya tidak bisa hanya memiliki hasil untuk setiap istilah dan nilai ya / tidak untuk jika ada komentar baru pada salah satu node untuk istilah itu, namun saya tidak berpikir ini adalah bug, itu dengan desain.
Evanss
0

Berikut ini sketsa jawaban yang akan membuat Anda hampir sampai di sana, saya pikir. Mulailah dengan membuat tampilan node, lalu tambahkan taksonomi dan waktu komentar terbaru sebagai bidang.

Sekarang aktifkan agregasi untuk tampilan, dan atur agregasi untuk bidang taksonomi menjadi "hasil kelompok bersama", pada kolom "tid".

Ubah pengaturan agregasi untuk bidang waktu komentar menjadi "Maksimum".

Anda sekarang harus memiliki pandangan yang mencantumkan semua istilah taksonomi Anda (setidaknya yang memiliki konten) dengan tanggal komentar terakhir. Langkah terakhir adalah mengolah cap waktu komentar di kait pandangan atau bertema untuk membuatnya ditampilkan sesuai kebutuhan, yang seharusnya relatif sederhana.

Alfred Armstrong
sumber
Bagaimana saya melakukan langkah terakhir 'Ubah pengaturan agregasi untuk bidang waktu komentar menjadi "Maksimum".' ?
Evanss
Setelah Anda mengaktifkan pengaturan agregasi, setiap bidang dalam daftar di bawah Fields harus memiliki tautan pengaturan agregasi di sebelahnya. Klik itu dan Anda akan melihat pull-down berlabel "tipe agregasi". Maksimum adalah salah satu opsi.
Alfred Armstrong
Saya sudah melakukan ini tetapi tidak mengelompokkan hasil per istilah taksonomi. Saya masih memiliki hasil untuk setiap node.
Evanss
Apakah Anda menetapkan agregasi untuk bidang taksonomi menjadi "hasil grup bersama", pada kolom "tid", sesuai jawaban saya? Saya telah menguji metode ini jadi saya cukup yakin itu berhasil.
Alfred Armstrong
1
Saya mencoba pendekatan ini pada tes instalasi dan mendapatkan hasil seperti yang dijelaskan sehingga harus ada perbedaan dengan apa yang telah kita lakukan masing-masing. Apakah Anda menghapus bidang judul simpul? Anda tidak membutuhkannya dan itu akan mengacaukan hasilnya.
Alfred Armstrong
0

Anda harus membuat kueri lain terlebih dahulu, untuk mengambil istilah yang memiliki node dengan konten baru.

Saya telah dibantu oleh utas ini .

Seperti yang saya katakan, saya meletakkan semua ini di bidang php; jika Anda punya waktu, akan lebih baik untuk meletakkannya di modul, di views_query_alter atau yang lain.

  1. Tambahkan bidang php , dan dalam kode pengaturan , ambil daftar istilah tids 'yang memiliki konten baru:

    $query = db_select('node_comment_statistics', 'c')
      ->condition('c.last_comment_timestamp', 'history_user.timestamp', '>');
    $query->join('field_data_YOURTERMREFERENCEFIELD', 't', 't.entity_id=c.nid');
    $query->fields('t', array('YOURTERMREFERENCEFIELD_tid'))
      ->groupBy('t.YOURTERMREFERENCEFIELD_tid');
    
    $static = $query->execute()->fetchCol();
  2. Sekarang dalam kode output , periksa apakah term Anda ada dalam array ini:

    if (in_array($data->tid, $static)) {
      print 'new comments !';
    }

Ini adalah yang paling ringan yang saya lihat, walaupun permintaannya bisa sangat berat jika Anda memiliki banyak node dan komentar.

EDIT: Saya harus ingat bahwa menempatkan php di sql dengan views php BUKAN praktik yang baik , saya mengundang Anda untuk meletakkan semua itu dalam modul khusus di hook_views_query_alter sesegera mungkin.

Gregory Kapustin
sumber
Saya khawatir itu tidak berfungsi. Setiap istilah memiliki bidang 'komentar baru!' meskipun hanya beberapa yang benar-benar memiliki komentar baru pada konten mereka. Satu-satunya pengecualian adalah istilah yang tidak memiliki node sama sekali.
Evanss
@kiamlaluno mengedit kode. Apakah ini berfungsi sekarang? Itu cocok untuk saya :)
Gregory Kapustin
Saya tidak mengubah kode; Saya hanya memformat ulang teks. :) Jika itu tidak berhasil untuk @jdln, tetapi itu bekerja untuk Anda, maka ada kemungkinan Anda menerapkan kode secara berbeda, atau istilah taksonomi diambil dari kosakata yang berbeda (misalnya tag taksonomi).
kiamlaluno