2012-06-08 66 views
1

我創建了一個名爲protocol的新內容類型。問題是,當你定義一個內容類型時,這意味着你還要說明如何在表單中添加和編輯內容,比如將會有哪些表單元素。Drupal,覆蓋自定義內容類型的添加/編輯表單形式

的協議是存儲標題,摘要和指令的內容類型。我想通過一個textarea添加標題/說明/摘要,在這裏你可以像這樣標記文本部分:

[標題]這是一個標題[/ title] [abstract]這是一個摘要。 [/摘要] [指令]這些是我的指示。[/指令]

然後,該文本被處理並且每個標籤之間的內容可被挑選出來,並存儲在其然後應當被存儲爲內容類型的可變就像它通過添加/編輯內容表單中的單獨字段/ textarea添加的一樣。

這是可能的嗎?我應該閱讀什麼樣的東西? drupal代碼中的哪些函數/函數描述了當您爲標準添加內容表單的新內容類型推「保存」時會發生什麼?(我只想讀取它,不會更改任何內容)

回答

0

不確定這完全符合你想要做的事情,但從基本意義上說,它應該讓你朝着目標前進。我寫了一個背書呼籲的Drupal 6模塊,提供了一個自定義窗體餵養提交的數據到一個新的節點:

http://drupal.org/project/endorse

這裏的形式定義:

http://drupalcode.org/project/endorse.git/blob/refs/heads/master:/endorse.module#l136

一些基本的驗證如下然後實際節點保存發生在提交功能的頂部,此處直到行231:

http://drupalcode.org/project/endorse.git/blob/refs/heads/master:/endorse.module#l206

該函數的其餘部分是無關緊要的,除了感謝和重定向在提交函數的最後。如果你在D7中這樣做,它會改變一點(請參閱api.drupal.org以獲取函數定義和其他內容),但它應該看起來差不多。

0

解決問題的步驟。

  1. 創建一個模塊。用您的自定義添加頁面實現hook_menu
  2. 創建使用FORM API,這是會顯示在你的新頁面自定義表單。
  3. 在你hook_form_submit從變量形式狀態得到你的價值觀。
  4. 分析文本,並創建和保存一個新的節點(這裏片斷)。

    $newNode = (object) NULL; 
    $newNode->type = 'protocol'; 
    $newNode->title = $parsed_title; 
    $newNode->uid = 1; 
    $newNode->created = strtotime("now"); 
    $newNode->changed = strtotime("now"); 
    $newNode->status = 1; 
    $newNode->comment = 0; 
    $newNode->promote = 0; 
    $newNode->moderate = 0; 
    $newNode->sticky = 0; 
    
    // add CCK field data 
    $newNode->field_{YOUR_CUSTOM_FIELD_1}[0]['value'] = $parsed_data1; 
    $newNode->field_{YOUR_CUSTOM_FIELD_2}[0]['value'] = $parsed_data2; 
    
    // save node 
    node_save($newNode); 
    

這些是基本步驟。如果您還有其他問題,請詢問。

提示:安裝devel模塊和使用功能的DPM()的時候,你需要知道的一些變量的內容。當你正在實現hook_form_validate或者hook_form_submit來知道變量$ form_state中的內容時,你可能會需要它。

所以只是做:

dpm($form_state); //this will give you the variables inside the array with a krumo view. 
+0

幸運的是,我已經做好了所有的步驟,直到步驟4。它可以創建一個新的節點,但我似乎無法插入域數據。這是部分的外觀: $ newNode->字段_ { '抽象'} [0] [ '值'] = $ P [ '抽象']; $ newNode-> field _ {'usage'} [0] ['value'] = $ p ['usage']; $ newNode->字段_ { 'expected_outcome'} [0] [ '值'] = $ P [ '預期結果']; 我檢查,以便$ P [「抽象」]實際上包含了我的分析值,所以我不認爲這是問題。 另外我不太明白這些陳述是做什麼的。 – numfar

+0

我想出了什麼是錯的,但現在我在設置預告片時遇到問題。我試過這樣做:$ newNode-> teaser = $ p ['usage']; 但它沒有奏效。你知道你是如何設定的嗎? ($ p ['usage']返回一個字符串) – numfar

+0

預告片也是一個字段。使用dpm函數檢查字段的名稱並設置它。 –

相關問題