2010-09-08 88 views
1

我在編輯內容時使用form_alter編輯提交功能。在我的自定義函數中,我希望編輯自定義消息到標題名稱的屏幕。我想到了一個辦法,我能做到這一點的東西如下Drupal 6從提交表格獲取節點標題

function mymodule_myfunction(&$form) { 
    drupal_set_message(t('Some text ' . $form['#node']->title)); 
} 

標題沒有被加入到「一些文本」

我用下面一行在我form_alter呼喚我的功能:

$form['#submit'][] = 'mymodule_myfunction'; 
+0

檢查$ form模塊的外觀。如果你已經安裝了devel模塊,你可以使用類似dsm($ form)的方法來查看該變量。 – dkinzer 2010-09-08 16:00:37

回答

0

可試試改變你的

function mymodule_myfunction(&$form) { 
    drupal_set_message(t('Some text ' . $form['#node']->title)); 
} 

要簽名:

function mymodule_myfunction($form, &$form_state) { 
    drupal_set_message(t('Some text ' . $form['#node']->title)); 
} 

也可以嘗試安裝devel模塊,所以你可以做這樣的事情

dsm($form); 
dsm($form_state); 

,看看到底是什麼,你正在處理。另外,如果你想要做的只是在創建一個'X'類型的新節點時給出消息,更好的方法是使用hook_nodeapi;

它可能看起來像這樣;

function modulename_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { 

if ($op == 'insert' && $node->type == 'my node type') { 
    drupal_set_message($node-title . ' is cool.'); 
} 
} 
+0

drupal_set_message(t('PRISK Project'。$ form-> title));似乎沒有工作。將更新問題與我如何調用我的功能。 – Linda 2010-09-08 15:58:23

0

DKinzer推薦使用dsm($ form)來查看變量。節點標題未填充。它可以在Post數組中找到。下面這行允許我做我想做的事。

drupal_set_message(t('Some Text '.$form['#post']['title'])); 
+0

這是t()函數的不當使用。有關使用@title佔位符的詳細信息,請參閱上面的John Fiala的回答。 – jhedstrom 2010-09-08 16:46:53

1

所有提交的功能得到傳遞給他們兩個參數:$形式,這是最終的形式排列畢竟對於hook_form_alter之類的調整,和$ form_state哪些其他值中包含提交的值,已經清理並檢查範圍。 (例如,如果在選擇框中有三個項目,$ form_state ['values']中的數據已經確保該輸入的值是三個合法值之一。)

通常,您不應該使用$ form ['#post'] - 它不是公開獲取值的一部分,並且核心處理某些問題的更新可能會破壞您的代碼。

試試這個:

function mymodule_myfunction($form, &$form_state) { 
    drupal_set_message(t('Some Message @title'), 
    array('@title' => $form_state['values']['title']))); 
} 

注意t()功能的修正使用 - 該功能的目的是讓其他用戶的翻譯文本,所以通過翻譯知道用「有的留言@title」更多關於正在發生的事情。此外,您還可以獲得以這種方式通過t函數發送的文本的優點,通過check_plain()可以防止某人對輸入進行惡意操作。

+0

什麼是使用被調用的@符號。我不是一個本地的PHP開發人員,所以如果我知道正確的術語,我可以做更多的關於這個主題的閱讀。 – Linda 2010-09-09 07:35:04

+0

好吧,查看我從上面的t()函數中獲得的鏈接 - 鏈接到t()的api頁面,其中聲明我們稱之爲「佔位符」。 – 2010-09-13 16:17:10