2009-07-01 12 views
3

追加/編集ノードフォームの表示を変更するモジュールを開発しています。私はモジュール開発の初心者です。drupal form alter

次のコードを記述しましたが、正しく動作しません。これに何が問題なのか教えてください。

function hook_form_alter(&$form, $form_state, $form_id) { 
    if ($form_id == 'node_form') {  
    drupal_set_message(t('some message.')); 
    } 
} 

これは、あなたが "hook_form_alter" あなたの関数を呼び出すのではなく、 "yourmodule_form_alter" べきではありませんDrupalの6

答えて

19

さらに、ノードの追加/編集フォームには、コンテンツタイプ固有IDがあります。その話のノードは次のようになります。

function mymodule_form_alter(&$form, $form_state, $form_id) { 
    if ($form_id == 'story_node_form') {  
    drupal_set_message(t('Editing a story node!')); 
    } 
} 

あなたはすべてのノード編集フォームをキャッチするために探している場合は、タイプに関係なく、これを試してみてください。

function mymodule_form_alter(&$form, $form_state, $form_id) { 
    if (isset($form['#node']) && $form_id == $form['#node']->type .'_node_form') { 
    drupal_set_message(t('Editing a node!')); 
    } 
} 
+0

おかげで、あなた、私は追加することができますよ既存のフィールドを変更または削除することはできません。 – Sharique

+1

これらのことはすべて実行できるはずです - ストーリーノードフォームを変更する他のモジュールの後でモジュールが実行されていることを確認してください。あなたのモジュールが変更を加えたら、CCK(例えば)は別のフィールドを追加します。あなたができることはあまりありません。 フォームで最後の亀裂を取得する必要がある場合は、他のすべてのモジュールがその作業を行った後、http://drupal.org/project/utilモジュールを確認してください。とりわけ、モジュールがフックを実行する順序を変更することができます。 – Eaton

+1

また、特定のタイプの関数名としてmymodule_form_story_node_form_alterを使用することもできます –

3

ためです。あなたのモジュールはあなたのモジュールファイルの名前でなければならないので、あなたのモジュールが "hello"と呼ばれる場合、関数名は "hello_form_alter"でなければなりません。

1

あなたはDrupalがあれば使用するフックシステムを理解する必要がありますあなたはモジュール開発をしたいと思っています。フックがDrupalのどこかに実装されているときは、hook_somethingと呼ばれます。これが動作する方法は、モジュールがフックを実装するたびに、 'hook'を 'modelname'に置き換える必要があることです。 Drupalは、それがそのフックのインスタンスであると知って、それをそのように呼びます。また、Drupalはテーマ層で同じシステムを使用しています。さまざまなテーマ機能を見てランク付けシステムに基づいて優先順位を付けるので、テーマによってモジュールがデータを出力する方法をオーバーライドすることができます。

0
function hook_form_alter(&$form, $form_state, $form_id) { 
    if ($form_id == 'node_form') {  
    drupal_set_message(t('some message.')); 
    } 
} 

あなたのモジュールキーワードに "フック" のキーワードなければならない最初の..あなたのモジュール名が、その後

function contact_us_form_alter(&$form, $form_state, $form_id) { 

"contact_us" であると仮定することができます今、この関数は3つの可変

  1. $を持っていますフォーム
  2. $ form_id
  3. $ form_state

フォームの変更中に最も重要な変数は、基本的にどのフォームがページ内のどのページに読み込まれるかをメモする$ form_idです。

function contact_us_form_alter(&$form, $form_state, $form_id) { 
    print_r($form_id);exit; // Used to find the form id 
} 

あなたはform_id

function contact_us_form_alter(&$form, $form_state, $form_id) { 
    if($form_id=='contact_us_form') 
     // Do your stuff 
} 

を見つけた後注:あなたが適切にカスタムモジュールを記述し、それを有効にしているチェック..も明らかキャッシュ