2013-05-02 69 views
0

嘗試使用hook_filter_info()創建自定義過濾器時出現問題。 我必須根據當前查看節點的字段進行一些替換。我只是使用下面的代碼。在Drupal中使用hook_filter_info()的自定義過濾器

return str_replace('%people1%', 'REPLACING WORKING', $text); 

在這個過程中的回調,該代碼工作正常,但我不能讓當前節點ID(menu_get_item()arg())。另外,每當我做出一些更改時,我必須清除緩存('cache' => FALSE)。

在處理回調中處理數據有什麼我需要知道的嗎?

回答

1

menu_get_item()arg()當從輸入過濾器的進程回調中調用時不會返回不同的值;他們沒有返回您期望的值,可能是因爲輸入過濾器是在與您想象的不同的上下文中調用的。

輸入濾波器被調用時:

  • 的節點體需要呈現
  • 註釋體需要呈現
  • 其使用輸入格式甲實體字段需要渲染
  • 使用Views模塊創建的視圖使用輸入格式來呈現用戶輸入的文本
  • 模塊使用輸入格式呈現從用戶輸入的文本

即使在情況下,輸入濾波器被用於渲染節點的主體,有可能仍然是兩種情況:

  • 節點在頁面單獨呈現(例如http://example.com/node/2
  • 頁面顯示多於一個的節點(例如頭版,顯示提升到頭版節點的列表)

實現輸入濾波器不能瞭解哪個實體它被稱爲一個模塊,和當前頁面的路徑不一定會提供該信息。例如,我可以有一個模塊,它在mymodule/disclaimer中顯示ID等於2的節點的內容,或者我可以看到example_path/just_to_make_an_example顯示從符合我決定的某些條件的節點摘錄的摘錄。

如果您需要替換節點主體中的某些單詞,例如將%author%替換爲節點創建者的用戶名,則應該執行hook_node_view_alter()

+0

非常感謝澄清。 我有一系列基於其他自定義模塊的問題。 幫助我的模塊是http://drupal.org/project/devel_if。 再次非常感謝。 – hugronaphor 2013-05-03 20:24:25

+0

@CornelAndreev你能否讓我知道你是如何處理你的案子的,因爲我面臨類似的問題? – Selvam 2013-11-15 05:48:26