Wenn Sie sich den Code von node_object_prepare () ansehen , der von node_form () (dem Formular- Generator für das Formular zum Bearbeiten / Erstellen von Knoten) aufgerufen wird, sehen Sie, dass er den folgenden Code enthält:
// 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;
}
In einer Implementierung von hook_form_BASE_FORM_ID_alter () ist es ausreichend, Code ähnlich dem folgenden zu verwenden.
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.
}
}
Wenn der Knoten neu ist, erstellt das Formular einen Knoten. Wenn der Knoten nicht neu ist, bearbeitet das Formular einen vorhandenen Knoten.
In Drupal 8 implementiert jede Klassenimplementierung EntityInterface
(die die Node
Klasse enthält) die EntityInterface::isNew()
Methode. Das Prüfen, ob ein Knoten neu ist, ist so einfach wie das Aufrufen $node->isNew()
. Da es in Drupal 8 keinen $form_state['node']
mehr gibt, sieht der Code folgendermaßen aus:
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.
}
}