[英]Drupal Custom Node Form
我想為注冊用戶創建一個輸入表單,與管理員的內容創建表單分開。 每次提交都將創建多個節點。 為了說明這種情況,我將使用內容類型Project和Review。
項目 : 標題 , 描述 , 所有者 , 評級 。
評論 : 標題 , 評論者 , 項目 , 難度
我使用CCK模塊設置了內容類型及其字段。 我想為注冊成員創建一個輸入表單(非管理員)。 其字段包括項目名稱 , 描述 , 所有者 , 評級 , 評論 , 難度 。
提交表單后,“ 項目名稱” ,“ 描述” ,“ 所有者 ”和“ 評級”值將進入新的“ 項目”節點,其余部分將進入新的“ 審閱”節點。
我想做的另一個定制是評級和難度輸入字段使用星級評分輸入 。
實現這一目標的最佳方法是什么? 我應該創建自定義模塊和自定義表單(任何人都可以指出我如何做到這一點)? 或者我可以使用任何模塊嗎?
謝謝
做這件事有很多種方法:
從頭開始做一切:這就是theraravelers建議 (+1)歸結為 - 自己構建表單,添加自己的驗證和提交處理程序,然后提交,構建兩個節點對象並保存它們。 你將擁有完全的控制/靈活性,但這是相當多的工作,你需要很好地理解Drupals內部工作才能使它正確。
使用另一個所需的字段“重載”您的一個內容類型並調整“重載”內容類型提交(和部分編輯/顯示)邏輯以從其他字段創建其他內容類型,同時將其隱藏在“重載”上'一個展出和編輯。 您可以在此處找到描述此方法的文章 。 這是比#1更容易的方法,但我認為它有點'hackish',因為內容類型定義與顯示不匹配。
#2的較少“hackish”變體是正常設置內容類型,只需通過hook_form_alter()
操作編輯和提交過程。 您可以使用與方法#2相同的方法,但不是“預先加載”一個節點和其他字段,而是直接在hook_form_alter
它們插入到編輯表單中(從頭開始或通過加載在后台編輯另一個節點的表單並從中復制相關的字段定義。 在表單提交時,您在使用它們構建其他節點時刪除這些附加字段。 這需要比#2更多的工作和知識,但應該比這更穩定,更容易調整/維護,因為您不必處理內容類型定義與顯示不匹配。
此外,您沒有指定如何處理現有節點的編輯 - 我建議將節點引用添加到其中一個節點以跟蹤它們的關聯。 這樣,如果需要,您還可以添加邏輯以從一個表單編輯兩個節點,以及同步刪除。
這對我來說聽起來像是一份定制工作。 您可以使用模塊中的Form API來創建表單。 查看幾乎任何其他模塊,以查看Form API如何工作的示例。 然后,您將要從這些字段的所有值創建$ node對象,並使用node_submit()和node_save()來實際創建不同的節點。
我建議可能會查看Webform模塊以使用Form API並劫持提交過程以使其創建這兩種節點類型。
選項#3,使用其中一個年輕的解決方案創建可以指向不存在的節點的CCK節點參考字段,並在提交時創建它。
節點參考Create看起來像這些項目中更穩定的一個。
節點參考自動創建和節點參考字段似乎具有更多的附加值,用於確定新節點中的值。
這在構建模塊之間的節點引用方面具有次要優勢,您可以使用它們在呈現時集成節點,創建視圖等。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.