Настройка автоматической ссылки на узел Drupal для поиска по двум отдельным полям - PullRequest
2 голосов
/ 26 августа 2010

Простая обратная сторона моего вопроса: мне нужно справочное поле узла CCK для поиска по двум различным полям в узле.Какой лучший способ сделать это?

Немного предыстории

Я запускаю календарь для программы физиотерапии.У каждой лекции есть список чтения.Чтения являются их собственным типом контента, и у лекции есть поле ссылки на самосовершенствующийся узел, которое в настоящее время только ищет заголовок чтения.Мне это нужно также для поиска на дополнительном поле cck, автор чтений.

Я попытался сделать это в пользовательском представлении, но мне нужен очень простой поиск по названию ИЛИ по автору, и мы немного застряли с AND.Есть ли обходной путь?Нужно ли создавать небольшой модуль для этого?Если так, то где хорошее место, чтобы начать учиться, как это сделать?(Ранее я делал пользовательские модули, но ни один из них не связан с интерфейсами views / cck).Я не совсем уверен, куда идти с этим прямо сейчас.

Спасибо за помощь!

1 Ответ

1 голос
/ 27 августа 2010

На самом деле нет изящного способа сделать это, потому что поиск только по названию - это «особенность» модуля Node Reference (который является частью CCK). Однако вы можете создать пользовательское представление, чтобы предоставить результаты для автозаполнения, и использовать hook_views_query_alter(), чтобы изменить запрос, который выполняет представление. Вид, который вы создаете, должен быть выбран на странице конфигурации поля.

Ниже приведен пример реализации, которая изменяет запрос для поиска как заголовка, так и тела узлов. Возможно, вам придется немного его настроить, чтобы получить именно то, что вы хотите.

function mymodule_views_query_alter(&$view, &$query) {

    if ($view->name == 'my_custom_view' && $view->current_display == 'content_references_1') {

        // Remove the original title constraint
        unset($query->where[0]['clauses'][2]);

        // Duplicate the argument (keyword to search for), so
        // it is passed to both the title and the other field
        $query->where[0]['args'][] = $query->where[0]['args'][1];

        // Add the custom where clause
        $view->query->add_where(0, "(node.title LIKE '%%%s%%' OR node_revisions.body LIKE '%%%s%%')");

    }

}
...