Unterschied zwischen neu erstellen und Knoten in Form ändern bearbeiten
24
Ich habe einen Änderungsabschnitt für einen bestimmten Inhaltstyp. Wie kann ich im Formular ändern herausfinden, ob es sich um das Erstellen eines neuen Formulars oder das Bearbeiten eines Formulars handelt ?
Mit dsm ($ form) in von alter kann ich Ergebnisse mit mehreren Unterschieden zwischen ihnen erhalten. Was ist der beste Weg, diese voneinander zu unterscheiden?
ist das ein guter weg
if(isset($form['nid']['#value']))'means in edit form'else'means in create new from'
// 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.}}
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 NodeKlasse 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.}}
Da es ein Modul geben könnte, das die Knoten-ID für den neuen Knoten festlegt, denke ich.
kiamlaluno
Besser !empty($node->is_new)als isset($node->is_new)Rückgabe verwenden, TRUEwenn es auf gesetzt ist FALSE.
bloke_zero
@bloke_zero Ich nehme an, Drupal erwartet nicht, dass es auf gesetzt wird FALSE. In der Tat FALSEist es besser, den Code entsprechend zu ändern , wenn es einige fehlerhafte Module gibt, die ihn auf setzen, anstatt ihn zu deaktivieren.
Kiamlaluno
12
Ja, Sie müssen prüfen, ob die Node-ID existiert oder nicht.
!empty($node->is_new)
alsisset($node->is_new)
Rückgabe verwenden,TRUE
wenn es auf gesetzt istFALSE
.FALSE
. In der TatFALSE
ist es besser, den Code entsprechend zu ändern , wenn es einige fehlerhafte Module gibt, die ihn auf setzen, anstatt ihn zu deaktivieren.Ja, Sie müssen prüfen, ob die Node-ID existiert oder nicht.
quelle
quelle
In Drupal 8 benötigen Sie die
form_id
Variable und sie ist in jedem Fall anders. Sie enthält die Variable_edit_
, wenn Sie einen Knoten bearbeitenquelle
->isNew()
siehe drupal.stackexchange.com/a/223234/15055