2010-04-16 38 views
1

我需要爲Drupal 6網站創建一些高級的搜索功能。我有兩種內容類型之間的一對多關係,需要搜索它們,尊重這種關係。將多種內容類型合併到Drupal 6和Views 2的單個搜索結果中2

爲了使事情更清楚...

我有內容類型TypeX和TypeY。 TypeY有一個節點引用CCK字段,它將它與TypeX的單個節點相關聯。所以,TypeY的許多節點引用TypeX的同一個節點。

我想使用視圖2爲這些節點創建搜索頁面。我希望每個搜索結果都是TypeX的一個節點,以及所有引用它的TypeY節點。我知道我可以主題單獨的結果並使用視圖將TypeY的節點添加到TypeX的單個節點,但不允許用戶實際搜索TypeY ...它只會搜索TypeX並僅顯示連同它的一些TypeY節點。

有沒有辦法讓搜索來解釋這兩種內容類型的節點中的內容,但是將TypeY結果合併到TypeX的「父」節點中?

在數據庫方面,似乎我需要做一個連接,然後按搜索條件進行篩選。但我無法弄清楚如何在Views中做到這一點。

感謝您的任何幫助,我可以得到!

「****編輯」 ****

要確保這是明確的,這裏有什麼,我試圖做一個視覺例子...

_____________________________________________________________________________________ 
|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節點中的內容。

任何想法...缺少滾動我自己的搜索功能(不是我想要做的事情)?

回答

1

哇,只是哇。我終於找到了一個優雅的解決方案,我簡直不敢相信這是多麼的簡單!

我不會採取信貸的解決方案...我在一個偉大的博客文章完全回答了這個問題絆倒(即使不是在尋找了!)。這篇文章是由一個男人的名字戴維,他的我的新英雄

的文章是在這裏: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的好人已經想到索引引用節點的內容。在編輯內容類型的顯示字段部分,點擊搜索選項!它可以讓您確定在對父節點建立索引時應該如何索引所引用的節點...並且可以將其設置爲完整節點。這將索引所引用節點的全部內容作爲索引父節點的一部分。剩下要做的事情(Davy解釋)是確保父節點在引用的節點內容發生變化時得到重新索引。

+0

鏈接似乎不再工作 – 2014-03-06 15:37:02

+0

很遺憾,帖子內容似乎無法在Google的緩存或其他地方使用 – Jaibuu 2016-01-27 03:48:55

0

假設您可以將您的視圖轉換爲搜索這兩種內容類型的點,我認爲這實際上確實成爲一個主題問題。您可以覆蓋視圖的各種主題模板,並以特定方式組織返回的節點數組。您也可以在輸出期間簡單地忽略列表中的內容類型Y,並設置內容類型X節點來列出CCK節點引用字段中的節點(這與您提到的類似,但您仍然會將內容類型Y留在查看查詢並在輸出期間省略它)。根據每個內容類型X節點的內容類型Y節點的數量,可能會有一些性能影響。

我認爲不管你最終做什麼這將是一個主題問題,儘管是一個複雜的問題。

+0

所以基本上你說,讓它搜索這兩種內容類型並返回結果,因爲它通常會(Y節點和X節點是單獨的結果)。然後在我的主題中,處理合並各種結果的功能,如上所示? – Chaulky 2010-04-16 18:51:30

+0

我對「搜索:條款」過濾器並不完全熟悉,所以也許會在其中引入一個扳手,但我認爲該視圖有兩個過濾器:「搜索:術語」和「內容類型是內容類型X之一或內容類型Y「。提交時,它將返回內容類型爲x和內容類型爲y的節點,並且可以在主題/預處理端使用某個PHP foo輸出所需內容(例如,僅輸出內容類型x,然後自定義內容類型x的主題模板顯示內容類型y,類似於您提出的內容,或從視圖中入侵節點列表並重新排列它)。 – CalebD 2010-04-16 19:16:46

+0

那麼,我真的希望有一個更優雅的解決方案,使用視圖功能合併結果。但它似乎不會發生。我想我必須讓它返回兩種內容類型(過濾器內容類型是......之一),因爲那麼搜索:術語過濾器應該適用於這兩種類型。在視圖結果的模板中,我將不得不手動查找屬於每個返回的TypeX節點的TypeY節點併合並它們。這是相當黑客,但它可能會工作。 如果有人知道如何在視圖中做到這一點...請讓我知道。 – Chaulky 2010-04-16 21:52:34

相關問題