Jeśli spojrzysz na kod node_object_prepare () , który jest wywoływany z node_form () (konstruktora formularzy do edycji / tworzenia węzłów), zobaczysz, że zawiera on następujący kod:
// 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.}}
Jeśli węzeł jest nowy, wówczas formularz tworzy węzeł; jeśli węzeł nie jest nowy, formularz edytuje istniejący węzeł.
W Drupal 8 każda implementacja klasy EntityInterface(która obejmuje Nodeklasę) implementuje EntityInterface::isNew()metodę. Sprawdzanie, czy węzeł jest nowy, staje się tak proste, jak dzwonienie $node->isNew(). Ponieważ w Drupal 8 nie ma $form_state['node']już tego kodu, kod wygląda następująco:
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.}}
Ponieważ może istnieć moduł, który ustawia identyfikator węzła dla nowego węzła.
kiamlaluno
lepiej użyć !empty($node->is_new)jako isset($node->is_new)zwrotów, TRUEjeśli jest ustawiony na FALSE.
bloke_zero
@bloke_zero Biorę, że Drupal nie oczekuje, że zostanie ustawiony na FALSE. Rzeczywiście, jeśli istnieją złe moduły, które ustawiają go na FALSEzamiast go wyłączać, lepiej odpowiednio zmienić kod.
kiamlaluno
12
Tak, musisz sprawdzić, czy identyfikator węzła istnieje, czy nie.
!empty($node->is_new)
jakoisset($node->is_new)
zwrotów,TRUE
jeśli jest ustawiony naFALSE
.FALSE
. Rzeczywiście, jeśli istnieją złe moduły, które ustawiają go naFALSE
zamiast go wyłączać, lepiej odpowiednio zmienić kod.Tak, musisz sprawdzić, czy identyfikator węzła istnieje, czy nie.
źródło
źródło
W Drupal 8 będziesz potrzebować
form_id
zmiennej, która będzie różna w każdym przypadku i będzie zawierać_edit_
ją, jeśli edytujemy węzełźródło
->isNew()
zobacz drupal.stackexchange.com/a/223234/15055