1

コンテンツを編集するときに、form_alterを使用して送信機能を編集しています。カスタム関数で、タイトル名を使用して画面へのカスタムメッセージを編集したいと思います。これができる方法は次のようなものだと思いました

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

タイトルは「一部のテキスト」に結合されていません

form_alterで次の行を使用して関数を呼び出しています。

$form['#submit'][] = 'mymodule_myfunction';
4

3 に答える 3

1

$form は hook_form_alter などのすべての調整後の最終的なフォーム配列であり、$form_state は他の値の中でも送信された値を含み、クリーンアップされ、範囲がチェックされています。 . (たとえば、選択ボックスに 3 つの項目がある場合、$form_state['values'] のデータは、その入力の値が 3 つの有効な値のいずれかであることを既に確認しています。)

通常、$form['#post'] は使用しないでください。これは公開されている値を取得する方法の一部ではなく、FAPI の問題を処理するためにコアを更新すると、コードが壊れる可能性があります。

これを試して:

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

t()関数の正しい使用法に注意してください。この関数の目的は、他のユーザーがテキストを翻訳できるようにすることです。そのため、翻訳者は「Some Message @title」を使用することで、何が起こっているのかをより詳しく知ることができます。さらに、この方法で t 関数を介して供給されるテキストは、check_plain()を介して供給されるという利点も得られます。これにより、誰かが入力に対して悪意のあることを行うのを防ぐことができます。

于 2010-09-08T16:20:22.887 に答える
0

DKinzerは、dsm($form) を使用して変数を表示することを推奨しています。ノードのタイトルは入力されていません。これは Post 配列にあります。次の行により、私がやりたいことができました。

drupal_set_message(t('Some Text '.$form['#post']['title']));
于 2010-09-08T16:12:36.090 に答える
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.');
}
}
于 2010-09-08T15:52:49.633 に答える