SUKA klausa yang tidak berfungsi dalam perubahan permintaan kait


9

Saya mencoba mengganti pencarian default dengan klausa LIKE di Drupal 7. Saya mencoba mengubah kueri sesuai dengan Menambahkan kondisi ATAU ke kueri yang ada :

function MYMODULE_query_node_access_alter(QueryAlterableInterface $query) {
  foreach ($query->getTables() as $table) {
    // LIKE for search results.
    if ($table['table'] == 'search_index') {
      // Get the query args and then the search term
      $args =& $query->getArguments();
      $search = $args[':db_condition_placeholder_1'];

      // Get a reference to the existing query conditions.
      $conditions =& $query->conditions();

      // Save the former conditions
      $former_conditions = $conditions;

      // Reset the condition array. It needs a default #conjunction for which AND is fine
      $conditions = array('#conjunction' => array_shift($former_conditions));

      // Replace the search condition in the query
      foreach ($former_conditions as $key => $condition) {
        if ($key != 1) {
          $query->condition($condition['field'], $condition['value'], $condition['operator']);
        }
        else {
          $query->condition('i.word', '%' . db_like($search) . '%', 'LIKE');
        }
      }
    }
  }
}

Pencarian dengan kata "deklarasi" menampilkan hasil yang sama dengan pencarian drupal default, tetapi pencarian dengan "decl" tidak menemukan hasil apa pun.

Adakah ide mengapa kode saya tidak berfungsi?


1
Modul drupal.org/project/fuzzysearch harus menyelesaikan masalah Anda. Anda dapat mencobanya ..
Anil Sagar

Terima kasih. Saya lebih suka solusi dengan hook_query_alter (jika mungkin) karena form pencarian dan halaman hasil sudah disiapkan. Saya juga ingin tahu mengapa kode saya tidak berfungsi untuk kasus penggunaan lainnya.
user9932

1
Mungkin Anda seperti 90% dari perjalanan ke sana dan hanya perlu bagian terakhir ini untuk membuatnya bekerja, tapi saya pikir Anda melakukannya dengan cara yang salah. Ada banyak modul pencarian untuk menangani semua jenis kasus penggunaan, dan saya yakin Anda akan menemukannya untuk menyelesaikan masalah Anda. Menggunakan intervensi semacam ini kemungkinan akan menyebabkan kebingungan dan ketidakteraturan.
Alan Dixon

Pernahkah Anda mencoba dengan mencetak apa yang dibawa dalam $searchvariabel? $ search = $ args [': db_condition_placeholder_1']; Jika itu dari tampilan pergi untuk hook_views_query_alter()itu akan mudah.

Jawaban:


0

Sudahkah Anda mencoba mengubah pengait yang Anda gunakan MYMODULE_query_alter?

Anda menerapkan hook_query_TAG_alter (), dan saya tidak melihat di mana permintaan pencarian ditandai.

Per Node API :

Ini adalah hook_query_alter () untuk kueri yang ditandai dengan 'node_access'. Ia menambahkan pemeriksaan akses simpul untuk akun pengguna yang diberikan oleh meta-data 'akun' (atau pengguna $ global jika tidak disediakan), untuk operasi yang diberikan oleh meta-data 'op' (atau 'tampilan' jika tidak disediakan; lainnya nilai yang mungkin adalah 'pembaruan' dan 'hapus')


0
module_query_tagName_tag_alter(QueryAlterableInterface $query)

Gunakan ini dan letakkan nama tag di view->querypengaturan. Dengan menggunakan ini, Anda juga dapat membedakan tampilan.


0

Untuk menambahkan kondisi baru, Anda juga dapat mencoba yang di atas dengan add_where

$query->add_where(1,'i.word', '%' . db_like($search) . '%', 'LIKE');

Saya harap ini akan memberikan hasil yang Anda cari.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.