我想覆蓋comment_save函數。有沒有辦法來覆蓋它,所以我可以添加我的功能?如何覆蓋另一個模塊中存在的函數
是創建一個觸發如http://drupal.org/node/375833的最佳方式?這似乎不是很可靠,因爲它發生在事實之後。
順便說一句,這是在D6。
我想覆蓋comment_save函數。有沒有辦法來覆蓋它,所以我可以添加我的功能?如何覆蓋另一個模塊中存在的函數
是創建一個觸發如http://drupal.org/node/375833的最佳方式?這似乎不是很可靠,因爲它發生在事實之後。
順便說一句,這是在D6。
這是棘手。首先,我建議你去看看你是否可以通過使用hook_comment來管理你需要的東西(http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_comment/6)。這真的是更多的這是需要的。
如果你真的需要重寫comment_save,那麼通常一個好的選擇是環顧一下什麼東西叫它。對於這種情況,你很幸運 - comment_save只能在comment_form_submit內部的comment.module的第1542行的一個地方被調用。
現在,comment_form_submit是一個表單提交函數 - 我們可以替代替換comment_save來創建自己的自定義版本的comment_form_submit(爲了參數的緣故,我們假設我們正在使用'custom_module'模塊) - 所以我會做的是創建一個名爲custom_module_comment_form_submit新功能,它要求comment_save的變種,我感興趣的使用,然後用hook_form_alter()(http://api.drupal.org/api/drupal/developer--hooks--core.php/function/hook_form_alter/6)設置$形式[「#提交」]更換值'comment_form_submit'和'custom_module_comment_form_submit'。
這是不完美的 - 如果你安裝使用comment_save另一個模塊,那麼你就需要找到一個類似的解決辦法。如果在Drupal中發現一個錯誤或安全漏洞,並且在您正在這裏工作的部分中修復了這個漏洞,那麼您將無法在代碼中修復該安全漏洞。但是,如果您絕對必須替換comment_save,這幾乎是實現它的唯一方法。
你不能「越權」的comment_save功能,但你可以實現一個自定義模塊中的hook_comment。
參見主題drupal.org's文檔。
所討論的兩個$老年退休金計劃,這將是得心應手,爲您將是:
希望這有助於
雖然肯定不理想,有時我創建自己的自定義模塊與修改後的功能,然後註釋掉原來的(並添加足夠的意見告訴別人爲什麼這樣做)。這樣,如果你忘了並且將具有原始功能的模塊升級到道路上時,它會拋出錯誤,說明已聲明該功能,提醒您重新評估或至少重新評論它。掛鉤當然是最好的做法,但在這種情況下,至少會給你提供比在現有模塊中實際編輯功能更好的東西。在少數情況下,我發現有必要讓某些模塊在一起很好地玩。
同意。當需要'重寫'核心或其他模塊行爲時,我會堅持使用hook_comment和hooks。 – 2010-12-01 22:45:18