J'ai une autre section pour un type de contenu particulier. Dans le formulaire, comment puis-je savoir s'il s'agit de créer un nouveau formulaire ou modifier le formulaire?
Avec dsm ($ form) depuis alter, je peux obtenir des résultats avec plusieurs différences entre eux. Quelle est la meilleure façon de les distinguer les uns des autres?
est-ce un bon moyen?
if(isset($form['nid']['#value']))
'means in edit form'
else
'means in create new from'
Si vous regardez le code de node_object_prepare () , qui est appelé depuis node_form () (le générateur de formulaires pour le formulaire de modification/création de nœuds), vous verrez qu'il contient le code suivant:
// 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;
}
Dans une implémentation de hook_form_BASE_FORM_ID_alter () , il suffit d'utiliser un code similaire au suivant.
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 le nœud est nouveau, le formulaire crée un nœud; si le nœud n'est pas nouveau, le formulaire modifie un nœud existant.
Dans Drupal 8, chaque classe implémentant EntityInterface
(qui inclut la classe Node
) implémente le EntityInterface::isNew()
. Vérifier si un nœud est nouveau devient aussi simple que d'appeler $node->isNew()
. Puisque dans Drupal 8 là n'est plus $form_state['node']
, le code devient le suivant:
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.
}
}
Oui, vous devez vérifier si l'ID de nœud existe ou non.
/**
* Implementation of hook_form_alter().
*/
function MY_MODULE_form_alter(&$form, $form_state, $form_id) {
if ($form['#node'] && $form['#node']->type .'_node_form' === $form_id) {
// Is node form.
if ($form['#node']->nid) {
// Is node edit form.
}
}
}
Dans Drupal 8 vous aurez besoin du form_id
variable et elle sera différente dans chaque cas et elle inclura le _edit_
dedans si nous éditons un nœud
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
}
}