Diferença entre criar novo e editar nó no formulário alter
24
Eu tenho uma seção de alteração para um tipo de conteúdo específico. No formulário alter, como posso descobrir se é criar um novo formulário ou editar um formulário ?
Com dsm ($ form) no alter, posso obter resultados com várias diferenças entre eles. Qual é a melhor maneira de distinguir um do outro?
este é um bom caminho?
if(isset($form['nid']['#value']))'means in edit form'else'means in create new from'
Se você observar o código de node_object_prepare () , chamado de node_form () (o construtor de formulários para o nó editar / criar formulário), verá que ele contém o seguinte 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;}
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.}}
Se o nó for novo, o formulário estará criando um nó; se o nó não for novo, o formulário estará editando um nó existente.
No Drupal 8, toda classe de implementação EntityInterface(que inclui a Nodeclasse) implementa o EntityInterface::isNew()método. Verificar se um nó é novo torna-se tão fácil quanto chamar $node->isNew(). Como no Drupal 8 não existe $form_state['node']mais, o código se torna o seguinte:
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.}}
Como pode haver um módulo que defina o ID do nó para o novo nó, eu acho.
Kiamlaluno
melhor usar !empty($node->is_new)como isset($node->is_new)retornos TRUEse estiver definido como FALSE.
Bloquei
@bloke_zero Tomo Drupal não está esperando que seja definido como FALSE. De fato, se existem alguns módulos defeituosos que o definem em FALSEvez de desmarcá-lo, é melhor alterar o código de maneira adequada.
Kiamlaluno
12
Sim, você deve verificar se o ID do nó existe ou não.
!empty($node->is_new)
comoisset($node->is_new)
retornosTRUE
se estiver definido comoFALSE
.FALSE
. De fato, se existem alguns módulos defeituosos que o definem emFALSE
vez de desmarcá-lo, é melhor alterar o código de maneira adequada.Sim, você deve verificar se o ID do nó existe ou não.
fonte
fonte
No Drupal 8, você precisará da
form_id
variável e ela será diferente em cada caso e incluirá a_edit_
mesma se estivermos editando um nófonte
->isNew()
consulte drupal.stackexchange.com/a/223234/15055