web-dev-qa-db-ja.com

ノード編集フォームを変更せずにノード追加フォームを変更する方法

drupal 7を使用しています

私はこのようなカスタムのhook_form_alterを書いています

function mymodule_form_alter(&$form, &$form_state, $form_id){
    if($form_id == "rating_node_form")
        {
            // Do something
        }
}

ノード追加フォームとノード編集フォームの両方が同じフォームIDを使用しているようです。ノードを編集または追加している天気を判断し、それに応じてフォームを変更する方法があるかどうか疑問に思っています。それらは常に同じ形式でなければなりませんか?

5
user379468

node_object_prepare()node_form()(ノード編集フォームのフォームビルダー)から呼び出され、次のスニペットを実行して、ノードが追加または編集されているかどうかを確認します。

  // If this is a new node, fill in the default values.
  if (!isset($node->nid) || isset($node->is_new)) {
    foreach (array('status', 'promote', 'sticky') as $key) {
      // Multistep node forms might have filled in something already.
      if (!isset($node->$key)) {
        $node->$key = (int) in_array($key, $node_options);
      }
    }
    global $user;
    $node->uid = $user->uid;
    $node->created = REQUEST_TIME;
  }

あなたの場合、次のようなコードを使用できます:

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if ($form_id == "rating_node_form") {
    $node = $form_state['node'];
    if (!isset($node->nid) || isset($node->is_new)) {
      // The node is new.
    }
  }
}
10
kiamlaluno

または、2番目の引数arg(1) == 'add'

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if($form_id == 'rating_node_form' && arg(1) == 'add') {
        // Do something
  }
}
3
Nikolay Borisov