LIKE yan tümcesi kanca sorgusu değiştirmede çalışmıyor


9

Drupal 7'de bir LIKE yan tümcesi ile varsayılan aramayı değiştirmeye çalışıyorum. Varolan bir sorguya OR koşulu ekleme göre sorguyu değiştirmeye çalıştım :

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');
        }
      }
    }
  }
}

"Declaration" kelimesi ile arama, varsayılan drupal aramasıyla aynı sonuçları görüntüler, ancak "decl" ile arama yapmak herhangi bir sonuç bulamaz.

Kodumun neden çalışmadığına dair bir fikrin var mı?


1
drupal.org/project/fuzzysearch modülü sorununuzu çözmelidir. Bunu deneyebilirsiniz ..
Anil Sagar

Teşekkür ederim. Arama formu ve sonuç sayfası zaten ayarlanmış olarak hook_query_alter (mümkünse) ile bir çözüm tercih ederdim. Kodumun diğer kullanım durumları için neden çalışmadığını da bilmek isterim.
user9932 12:12

1
Görünüşe göre oradaki yolun% 90'ı gibisin ve çalışabilmesi için bu son parçaya ihtiyacın var, ama bence yanlış yola gidiyorsun. Her türlü kullanım durumu ile başa çıkmak için çok sayıda arama modülü var ve eminim ki kendinizinkini çözmek için bir tane bulacaksınız. Bu tür bir müdahalenin kullanılması büyük olasılıkla karışıklığa ve sürdürülemezliğe yol açacaktır.
Alan Dixon

$searchDeğişkenlerde taşınan şeyleri yazdırarak hiç denediniz mi? $ search = $ args [': db_condition_placeholder_1']; Görüşlerinden gitmek için hook_views_query_alter()basit olurdu.

Yanıtlar:


0

Kullandığınız kancayı değiştirmeyi denediniz MYMODULE_query_altermi?

Hook_query_TAG_alter () uyguluyorsunuz ve Arama sorgusunun bu şekilde nerede etiketlendiğini görmüyorum.

Başına Düğüm API :

Bu, 'node_access' ile etiketlenmiş sorgular için hook_query_alter () yöntemidir. 'Hesap' meta verileri (veya sağlanmamışsa global $ kullanıcısı) tarafından verilen kullanıcı hesabı, 'op' meta verileri (veya sağlanmamışsa 'görünüm') tarafından verilen bir işlem için düğüm erişimi denetimleri ekler. olası değerler "güncelleme" ve "sil" dir)


0
module_query_tagName_tag_alter(QueryAlterableInterface $query)

Bunu kullanın ve view->queryayara bir etiket adı girin . Bunu kullanarak görünümleri de farklılaştırabilirsiniz.


0

Yeni bir koşul eklemek için add_where ile yukarıdakileri de deneyebilirsiniz

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

Umarım bu aradığınız sonucu verir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.