回答:
あなたがのコードを見れば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;
}
hook_form_BASE_FORM_ID_alter()の実装では、次のようなコードを使用するだけで十分です。
function mymodule_form_node_form_alter(&$form, &$form_state) {
$node = $form_state['node'];
if (!isset($node->nid) || isset($node->is_new)) {
// This is a new node.
}
else {
// This is not a new node.
}
}
ノードが新しい場合、フォームはノードを作成しています。ノードが新規でない場合、フォームは既存のノードを編集しています。
Drupal 8では、実装するすべてのクラスEntityInterface(クラスを含むNode)がEntityInterface::isNew()メソッドを実装します。ノードが新しいかどうかの確認は、を呼び出すのと同じくらい簡単になります$node->isNew()。Drupal 8には$form_state['node']もうないので、コードは次のようになります。
function mymodule_form_node_form_alter(&$form, &$form_state) {
$node = $form_state->getFormObject()->getEntity();
if ($node->isNew()) {
// This is a new node.
}
else {
// This is not a new node.
}
}
!empty($node->is_new)、isset($node->is_new)戻り値として使用する方が適切です。TRUEFALSE
FALSE。実際、設定FALSEを解除するのではなく設定する不良モジュールがいくつかある場合は、それに応じてコードを変更することをお勧めします。
Drupal 8あなたが必要となるform_id変数を、それがそれぞれのケースで異なるだろうし、それが含まれます_edit_、我々はノードを編集している場合は、それに
function MODULENAME_form_alter(&$form, &$form_state, $form_id) {
if($form_id == '"node_article_edit_form"'){
//edit form
}
if($form_id == 'node_article_form') {
//create form
}
}
->isNew()、drupal.stackexchange.com