Стаття LIKE не працює в зміні запиту на гачок


9

Я намагаюся замінити пошук за замовчуванням на пункт LIKE в Drupal 7. Я намагався змінити запит відповідно до Додавання умови АБО до існуючого запиту :

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

Пошук за допомогою слова "заява" відображає ті ж результати, що і пошук за друком за замовчуванням, але пошук за допомогою "decl" не знайде результатів.

Будь-які ідеї, чому мій код не працює?


1
модуль drupal.org/project/fuzzysearch повинен вирішити вашу проблему. Ви можете спробувати ..
Аніл Сагар

Дякую. Я б віддав перевагу рішення, що має за допомогою гачки_query_alter (якщо можливо), оскільки форма пошуку та сторінка результатів вже налаштовані. Я також хотів би знати, чому мій код не працює для інших випадків використання.
user9932

1
Може здатися, що ви 90% шляху там і просто потрібен цей фінальний твір, щоб він працював, але я думаю, ви йдете на нього неправильним шляхом. Існує багато пошукових модулів для вирішення всіх випадків використання, і я впевнений, що ви знайдете такий, щоб вирішити ваш. Використання подібного роду втручання, ймовірно, призведе до плутанини та незручності.
Алан Діксон

Ви коли-небудь намагалися надрукувати те, що переноситься $searchзмінною? $ search = $ args [': db_condition_placeholder_1']; Якщо це з точки зору, піти на hook_views_query_alter()це було б просто.

Відповіді:


0

Ви намагалися змінити гачок, який ви використовуєте MYMODULE_query_alter?

Ви реалізовуєте mower_query_TAG_alter (), і я не бачу, де пошуковий запит позначений як такий.

За API вузла :

Це прив'язка_query_alter () для запитів із тегом "node_access". Він додає перевірки доступу до вузлів для облікового запису користувача, наданого мета-даними "акаунт" (або глобальним користувачем $, якщо він не передбачений), для операції, заданої мета-даними "op" (або "view", якщо вони не передбачені; інше можливі значення "оновлення" та "видалити")


0
module_query_tagName_tag_alter(QueryAlterableInterface $query)

Скористайтеся цим і введіть ім'я тегу в view->queryналаштування. Використовуючи це, ви також можете диференціювати погляди.


0

Щоб додати нову умову, ви також можете спробувати вищезгадане з add_where

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

Сподіваюся, це дасть результат, який ви шукаєте.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.