2010-05-08 22 views
0

我知道這不是一個drupal論壇,但由於我沒有得到任何答覆,我決定在這裏給它一個鏡頭。如何讓drupal知道提交自定義內容

我正在創建一個網站,接受來自用戶的自定義內容。所以,對於這個問題,這個網站有一個表單和一個自定義模塊。此表單不是使用管理主題,而是放置在自定義模板中,該模板創建時與其餘頁面具有統一的外觀。因此,通過hook_form創建表單元素是毫無疑問的。這是我的問題所在。由於此表單使用自定義主題,因此我不確定如何讓drupal知道用戶在提交表單時提交了新的內容數據?

  • 我會需要使用的內容提交頁面相同的查詢字符串管理頁面一樣 - ?Q =節點/添加/頁面的HTML表單的action屬性? (OR)

  • 唯一的方法是將url映射到我的自定義函數並調用其中的某種鉤子?

感謝

回答

3

你可以從字面上創建你想爲你的任何形式的標記,所有你需要做的就是使用#theme屬性,當你定義表單。有了它,您可以爲表單本身和任何元素設置主題功能。

這是一個不好主意,不要用Drupal的FAPI。它爲你解決了很多問題,如果你想在你的網站上打開一個安全漏洞,那麼不使用它會是第一步。像Drupal這樣的開發框架沒有太大價值,如果你不使用它的API。

編輯:
首先要做的,就是去Drupal的FAPI reference。您可以在那裏瞭解幾乎所有關於FAPI的信息。

你可以使用模板,如果你想,只是基本的Drupal主題,但我會建議反對它。如果您爲所有元素創建了主題化函數並使用它們,那麼您可以循環遍歷所有元素並像Drupal一樣渲染它們,而不必編輯模板文件,而每個模板文件都需要更改形成。現在可能只是更多的工作,但是對這項工作有獎勵:更清潔和更易維護的代碼。

在代碼中,它看起來是這樣的:

$form['item'] = array(
    ... 
    '#theme' => 'theme_function', 
); 

這樣做,元素將使用「theme_function」被渲染。你可以看到這樣一個theme function for textfields的例子。

+0

是否可以使用模板而不是函數?因爲我的表單相當複雜,它有40多個元素,我可能需要在將來添加更多元素。如果你能給我一個指向你建議的參考的指針,我會很高興,因爲我在drupal站點找到的參考並沒有告訴我很多關於#主題的內容。 – Andrew 2010-05-08 18:59:04