Différence entre créer un nouveau nœud et modifier un nœud dans le formulaire
24
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 de modifier un 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 formulaire pour le formulaire de modification / création de nœud), 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;}
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 Nodeclasse) implémente la EntityInterface::isNew()méthode. Vérifier si un nœud est nouveau devient aussi simple que d'appeler $node->isNew(). Comme dans Drupal 8 il n'y en a $form_state['node']plus, 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.}}
Pourquoi les deux conditions sont-elles nécessaires?
digitgopher
Parce qu'il pourrait y avoir un module qui définisse l'ID de nœud pour le nouveau nœud, je suppose.
kiamlaluno
mieux utiliser !empty($node->is_new)comme isset($node->is_new)retours TRUEs'il est défini sur FALSE.
bloke_zero
@bloke_zero Je suppose que Drupal ne s'attend pas à ce qu'il soit défini sur FALSE. En effet, s'il existe des modules défectueux qui le définissent au FALSElieu de le désactiver, il est préférable de modifier le code en conséquence.
kiamlaluno
12
Oui, vous devez vérifier si l'ID de nœud existe ou non.
!empty($node->is_new)
commeisset($node->is_new)
retoursTRUE
s'il est défini surFALSE
.FALSE
. En effet, s'il existe des modules défectueux qui le définissent auFALSE
lieu de le désactiver, il est préférable de modifier le code en conséquence.Oui, vous devez vérifier si l'ID de nœud existe ou non.
la source
la source
Dans Drupal 8, vous aurez besoin de la
form_id
variable et elle sera différente dans chaque cas et elle l'inclura_edit_
si nous éditons un nœudla source
->isNew()
, voir drupal.stackexchange.com/a/223234/15055