Si observa el código de node_object_prepare () , que se llama desde node_form () (el generador de formularios para el nodo editar / crear formulario), verá que contiene el siguiente código:
// 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;
}
En una implementación de hook_form_BASE_FORM_ID_alter () , es suficiente usar un código similar al siguiente.
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.
}
}
Si el nodo es nuevo, entonces el formulario está creando un nodo; Si el nodo no es nuevo, el formulario está editando un nodo existente.
En Drupal 8, cada implementación de clase EntityInterface
(que incluye la Node
clase) implementa el EntityInterface::isNew()
método. Comprobar si un nodo es nuevo se vuelve tan fácil como llamar $node->isNew()
. Como en Drupal 8 ya no existe $form_state['node']
, el código se convierte en el siguiente:
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.
}
}