2010-07-19 1 views
1

Я создаю сайт захвата идеи из профиля установки Shift в Drupal, и я пытаюсь создать аналогичный поиск для входа, когда пользователь начинает создавать новую идею. Есть ли способ, который я могу обнаружить, когда пользователь вводит текст в поле заголовка формы создания новой идеи (новый тип содержимого, который я создал в cck), а затем, используя ajax, создайте динамический раскрывающийся список всех других опубликованных идей, которые аналогичны на основе пользовательских запросов sql, которые я создаю? Я видел это во многих сторонних инструментах COTS для захвата идеи, не говоря уже здесь, в Stackoverflow, и я надеюсь сделать то же самое в drupal. Прямо сейчас, единственные способы, которые я могу придумать, - это взломать модуль cck, который, как я знаю, не является хорошей идеей или каким-то образом каким-то образом связан с этой формой. Я не знаю, как это сделать. Использовать hook_form_alter()? Я использую drupal 6.16 и CCK 6.x-2.7. Благодарю.Как подключиться к полю на странице создания контента в Drupal?

ответ

1

Я решил свою проблему. Вот что я сделал:

  • создал drupal.behavior из OnChange для названия TextField
  • сделал вызов Ajax внутри этого OnChange обработчика
  • подключен Аякс вызова пути, который соответствует функции обратного вызова Я создал в пользовательском модуле
  • Критический: мне пришлось отключить и снова включить этот настраиваемый модуль, чтобы вызывающая функция вызывалась (тот, который определен в hook_menu())
  • сделал запрос sql в функции обратного вызова, которая искала похожие идеи в db
  • сделал результаты распечатки в элементе разметки, который я разместил чуть ниже текстового поля заголовка. Я завернул результаты в теги, которые ссылаются на их соответствующие страницы идей.

И вуаля, он работает как очарование сейчас! Мне пришлось собрать около 10 уроков, чтобы понять это.

+0

Это, как правило, знак того, что у вас есть хороший материал для написания учебника;) – Grayside

+0

Любая возможность обмена некоторыми из кода для этого? –

0

Понятия не имею, если это похоже на то, что вы хотите, но вы можете иметь поле CCK с вводом freetext, которое открывает созданное AJAX поле «drop down» с возможными совпадениями. AFAIK это работает только с узлами, таксономией и, возможно, с некоторыми другими интегрированными типами Drupal. Нет возможности использовать пользовательский запрос.

Если вам нужно создать что-то собственное, посмотрите на источник этого поля «freetext» в источнике и адаптируйте его к вашим потребностям и/или создайте собственное поле CCK для этого специального типа.

+0

Мне действительно не нужна автозаполнение, потому что я не хочу, чтобы подобные идеи появлялись в текстовом поле. Вместо этого я хочу, чтобы он появлялся под текстовым полем, просто отображался на экране в своем собственном контейнере div, где пользователь мог щелкнуть ссылки похожих идей, которые уже были отправлены, чтобы проверить, что идея, которую они собирались разместить, isn ' t уже ответил, как на этом сайте. Мне нужно каким-то образом создать обработчик событий, который срабатывает всякий раз, когда пользователь вводит что-то в поля заголовка или тела. –

+0

Я хотел бы взять текст, который они набирают, в поле и использовать это как часть инструкции LIKE для SQL-запроса, чтобы я мог выполнять поиск в нескольких разных местах: теги, заголовки и тела других узлов и т. Д. –

1

В Drupal есть очень хороший autocomplete system, но это не очень хорошо документировано, если вы хотите полностью покинуть проторенную дорожку.

Я хорошо использовал модуль Autocomplete Widgets. Вы создаете выделенное поле CCK Text, используя это как виджет, а затем используйте фрагмент PHP для установки допустимых значений. Разрешенные значения используются для генерации параметров автозаполнения.

Я просто сбросил вызов функции PHP в области фрагмента. Функция PHP, которую я определил в пользовательском модуле, запросил удаленную базу данных и вернул результаты с помощью drupal_json().

+0

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

+0

Вы хотите использовать «Автозаполнение для списка допустимых значений». Если вам необходимо устранить эту проблему, я предлагаю перейти в очередь проектов. – Grayside

+0

Использование этой опции работает. Когда я попробовал это в первый раз, я попробовал вариант существующих значений. Благодарю. Но теперь, как я могу получить эти работы автозаполнения? Это то, что мне действительно нужно делать. –