回答:
あなたがのコードを見れば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)
戻り値として使用する方が適切です。TRUE
FALSE
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