Объединение нескольких типов контента в один результат поиска с Drupal 6 и Views 2 - PullRequest
1 голос
/ 16 апреля 2010

Мне нужно создать несколько продвинутых функций поиска для моего сайта Drupal 6. У меня есть отношение «один ко многим» между двумя типами контента, и мне нужно искать их, соблюдая эти отношения.

Чтобы было понятнее ...

У меня есть типы контента TypeX и TypeY. TypeY имеет поле CCK ссылки на узел, которое связывает его с одним узлом TypeX. Таким образом, многие узлы TypeY ссылаются на один и тот же узел TypeX.

Я хочу использовать Views 2 для создания страницы поиска для этих узлов. Я хочу, чтобы каждый результат поиска был узлом TypeX вместе со всеми узлами TypeY, которые ссылаются на него. Я знаю, что могу просто разделить отдельные результаты по темам и использовать представление, чтобы добавить узлы TypeY к одному узлу TypeX ... но это не позволит пользователям на самом деле искать TypeY ... он будет только искать TypeX и просто отображать некоторые узлы TypeY вместе с ним.

В любом случае можно ли выполнить поиск для учета контента в узлах обоих типов контента, но объединить результаты TypeY с «родительским» узлом TypeX?

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

Спасибо за любую помощь, которую я могу получить !!!

'**** EDIT' ****

Чтобы убедиться, что это понятно, вот наглядный пример того, что я пытаюсь сделать ...

_____________________________________________________________________________________
|Type X Node                           |Type Y Node                                  |
|                                      |                                             |
| Content in node of TypeX that gets   |Has a node reference that points to the node |
| searched by the view...              |of TypeX. This content gets searched too!    |
|                                      |_____________________________________________|
|                                      |Type Y Node                                  |
|                                      |                                             |
|                                      |Another TypeY node with a node reference to  |
|                                      |to the TypeX node. This gets searched too!   |
--------------------------------------------------------------------------------------

Это будет единственный результат поиска. Их содержимое во всех трех узлах будет учитываться фильтром поиска: термины в представлении. Поэтому, если бы я искал «Это тоже ищут!», Я бы получил вышеуказанный результат. Или, если бы я искал "Содержимое в узле TypeX", я бы получил тот же результат поиска выше.

Я знаю, что мог бы искать TypeX и загружать узлы TypeY в отображении результатов, используя другое представление, но он не будет искать содержимое в узлах TypeY.

Есть какие-нибудь идеи ... если не считать моих собственных функций поиска (не то, чем я хотел бы сейчас заняться)?

Ответы [ 2 ]

1 голос
/ 18 апреля 2010

Ух ты, просто вау. Я наконец нашел элегантное решение этой проблемы. Я не могу поверить, как все просто получается !!!

Я не буду брать кредит за решение ... Я наткнулся на большое сообщение в блоге, которое полностью ответило на этот вопрос (даже не смотрел больше!). Статья написана парнем по имени Дэви, и он мой новый герой .

Статья здесь: http://www.drupalcoder.com/story/667-improving-search-results-when-working-with-node-references-in-drupal

Он также написал следующую статью, которая еще больше упрощает процесс !! http://www.drupalcoder.com/story/696-a-better-alternative-for-improving-search-results-when-working-with-node-references-in-dru

Оказывается, хорошие люди, которые написали CCK, уже думали об индексации содержимого ссылочного узла. В разделе «Отображение полей» для редактирования типа контента нажмите на параметр «Поиск»! Это позволяет вам определить, как ссылочный узел должен индексироваться, когда родительский узел индексируется ... и вы можете установить его на полный узел. Это будет индексировать все содержимое ссылочного узла как часть индексации родительского узла. Единственное, что остается сделать (что объясняет Дэви), это убедиться, что родительский узел переиндексируется при каждом изменении содержимого ссылочного узла.

0 голосов
/ 16 апреля 2010

При условии, что вы можете получить свое представление в точке, где он ищет оба типа контента, я думаю, что это действительно становится проблемой темы. Вы можете переопределить различные шаблоны темы для представления и организовать возвращенный массив узлов определенным образом. Вы также можете просто пропустить тип содержимого Y из списка во время вывода и задать тему для узла типа X, чтобы вывести список узлов из поля ссылки на узел CCK (это будет похоже на то, что вы упомянули, но вы все равно оставите тип содержимого Y запрос просмотра и пропустить его во время вывода). Может быть некоторое влияние на производительность в зависимости от количества узлов типа контента Y на количество узлов типа контента X.

Я думаю, что независимо от того, что вы в конечном итоге делаете, это будет тема, хотя и сложная.

...