2011-07-14 35 views
0

我有一個自定義搜索正在我正在Drupal中建立的網站之一進行。當「在每個頁面上重建主題註冊表」時,搜索工作完好無損。在主題配置頁面上選中複選框。但是,當我取消選中(用於製作)時,搜索不再起作用,同一頁面會在點擊搜索按鈕時重新加載。在查看最近的日誌條目時,我發現錯誤: preg_match()期望參數2是字符串,數組在671行的/var/www/devel_sites/SITENAME/docroot/modules/search/search.module中給出。Drupal - 搜索顯示preg_match錯誤

有人有任何想法,爲什麼我的搜索將取決於主題註冊表,以及如何解決這個問題?我有一個用於搜索的自定義模塊,部分功能位於template.php中。

任何提示表示讚賞,謝謝。

+0

如果你有主題開發者或啓用devel軟件包,禁用它們,然後再試一次 – Laxman13

+0

我沒有讓他們安裝和它顯示錯誤。事實上,我只是安裝他們認爲我可以從他們那裏得到一些幫助,但到目前爲止沒有運氣 – Navneet

回答

0

我(終於)能夠解決這個問題,併發布了下面的解決方案,以防其他人面臨相同的問題。

我開始通過移動從template.php文件所有的功能邏輯,我的自定義模塊(我應該做反正它,它看起來像它可能是一個問題),但它並沒有解決它。我不得不挖掘我的自定義模塊代碼,這就是我發現問題的地方。我用的是以下獲得輸入的關鍵字:

$form_state['values']['processed_keys']

事實證明,重建主題註冊表選項是關閉的,上面的陣列值由主題註冊表覆蓋,並正在由一個空的更換時數組,因此導致搜索模塊的行671中的錯誤,期望將字符串作爲第二個參數,而不是數組。更換上面下面的解決了這個問題對我來說:

$form['basic']['inline']['processed_keys']['#post']['keys']

0

沒有張貼代碼(因爲代碼是自定義的),我不認爲任何人都可以令人滿意的回答你的問題。但是,如果你不介意修改模塊代碼,只需做一個is_array條件線671之前,如果是,implode條款(或檢查它,擺脫任何垃圾。)傳遞到行線671

+0

感謝您的提示,我其實只是爲了測試目的而去那條路線。我做了print_r($ keys)($ key是第671行中preg_match的第二個參數),它實際上只是一個空數組。因此,只有當'每頁上的重建主題註冊表'選項關閉時,$ keys變量會(可能會調用它)損壞並作爲空數組傳遞,當該選項打開時,$ keys返回類型化搜索關鍵字和一切都很好。也許,有一些方法可以排除搜索依賴於主題註冊表? – Navneet

+0

'$ keys'從哪裏來?在主題註冊表中的某處是否有一個名爲'$ keys'的變量?不知怎的,'$ keys'正在被覆蓋。 – wanovak

+0

$ keys是search.module中使用的變量,並且(看起來像)它從我的自定義搜索模塊中獲取它的值。我使用devel模塊(在/ devel/theme/registry頁面)檢查了主題註冊表,但是在那裏我沒有看到任何$ keys變量/數組。這基本上是發生了什麼,來自我的自定義模塊的搜索值被覆蓋,被一個空的數組替換,並以某種方式與主題註冊表相關,並在第671行(通過$鍵)引用,但我應該如何檢查/確認並更重要的是找出它發生的地方? – Navneet