Como incorporar o NID de um nó no título de um nó?

8

Eu sei que o módulo Automatic Nodetitles existe, mas é apenas para o Drupal 7.

Existe um método para atribuir automaticamente o título ao NID ao clicar em enviar? Eu sei que o NID não existe até que o botão enviar seja pressionado. Como alguém incorporaria o NID no título?

Que gancho alguém usaria?

Patoshi パ ト シ
fonte
Você já tentou o Auto EntityLabel para D8? Existe um ramo de desenvolvimento. Você também já experimentou o Rules?
Kevin
@ Kevin, infelizmente, as Regras 8 são MIA.
precisa saber é o seguinte

Respostas:

5

Você precisa executar duas etapas:

Etapa 1: gerar automaticamente o título e o formulário oculto. use hook_field_widget_form_alter () com código

function MY_MODULE_field_widget_form_alter(&$element, \Drupal\Core\Form\FormStateInterface $form_state, $context) {
  $field_definition = $context['items']->getFieldDefinition();
  $bundle = $form_state->getFormObject()->getEntity()->bundle();
  // You can check with other bundle
  if ($field_definition->getName() == 'title' && $bundle == 'page' && $element['value']['#default_value'] == '') {
    $element['#required'] = FALSE;
    //hidden title  
    $element['#type'] = 'hidden';
    $element['value']['#required'] = FALSE;
    // Set default value
    $element['value']['#default_value'] = 'Default Title';
  }
}

Na etapa um, você pode cruzar o formulário de envio.

Etapa 2: Substituir novo título pelo valor padrão. Use hook_node_insert ()

function MY_MODULE_node_insert(Drupal\node\NodeInterface $node) {
  if ($node->bundle() == 'page') {
    $new_title = 'New title ' . $node->id();
    $node->setTitle($new_title);
    $node->setNewRevision(FALSE);
    $node->save();  
  }
}
MrD
fonte
2
Se tiver o nid, que é a única informação disponível apenas após o salvamento, esse é o caminho certo. Qualquer outra coisa, como a data ou algo assim, seria possível a partir do gancho de pré-gravação, o que seria mais rápido, pois você não precisaria salvar novamente duas vezes. Se você realmente precisar disso, adicione também uma verificação para garantir que o título não seja o padrão.
Berdir 27/08/16
1

Você pode usar o módulo Hook Post Action

Portanto, este módulo apresenta vários novos ganchos Drupal para superar essa limitação

  • hook_entity_postsave
  • hook_entity_postinsert
  • hook_entity_postupdate
  • hook_entity_postdelete
  • hook_node_postsave
  • hook_node_postinsert
  • hook_node_postupdate
  • hook_node_postdelete

e um que você tem instalado, você pode usar o hook_node_postsave()gancho

Na página do módulo Nodetitles automáticos , diz:

Esteja ciente de que existe uma alternativa melhor mantida disponível: https://www.drupal.org/project/auto_entitylabel

Adrian Cid Almaguer
fonte
0

Este pode ser um problema antigo, mas aqui está minha opinião. Digamos que você precise disso para adicionar artigo ao nó.

<?php

use Drupal\Core\Form\FormStateInterface;
use Drupal\node\NodeInterface;

function MYMODULE_form_node_article_form_alter(&$form, FormStateInterface $form_state, $form_id) {

    // Hide title field to avoid confusion
    $form['title']['#access'] = FALSE;
    // Set a temporary title because it's always required on node save.
    $form['title']['widget'][0]['value']['#default_value'] = 'Dummy title';

}

function MYMODULE_node_insert(NodeInterface $node) {
  if ($node->bundle() == 'article') {
    $new_title = 'Title ' . $node->id();
    $node->setTitle($new_title);
    $node->setNewRevision(FALSE);
    $node->save();
  }
}
JF Kiwad
fonte