drupal 8 – ¿Cómo crear programáticamente un título para un nuevo nodo?

Pregunta:

Quiero que el campo de título de cada nuevo nodo del tipo de contenido de Agenda se construya automáticamente a partir de un campo de fecha en ese mismo nodo.

He tratado de diversas maneras estableciendo el #default_value y #value en la $form array en hook_form_FORM_ID_alter() pero sin efecto.

¿Cómo puedo conseguir esto?

Respuesta:

A continuación, se explica cómo hacerlo con una devolución de llamada del generador de entidades.

<?php

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

//Implements hook_form_FORM_ID_alter()
function agenda_form_node_form_alter(&$form, FormStateInterface $form_state, $form_id) {

    $form['title']['#access'] = FALSE;
    $form['#entity_builders'][] = 'agenda_node_builder';

}

function agenda_node_builder($entity_type, NodeInterface $node, $form, FormStateInterface $form_state)
{

    $date_of_meeting = $node->field_date_of_meeting->date->format('Y-m-d');
    $node->setTitle('Agenda for meeting on '.$date_of_meeting);

}    

Notas:

  1. Descubrí que la devolución de llamada tenía que configurarse en hook_form_BASE_FORM_ID_alter() lugar de hook_form_FORM_ID_alter en cuyo caso no se llamó.
    No llegué al fondo de esto, pero probablemente tenga algo que ver con el hecho de que los ganchos hook_form_alter() se llaman en el siguiente orden: hook_form_alter() , hook_form_BASE_FORM_ID_alter() , hook_form_FORM_ID_alter() .

  2. Node #entity_builders Node ofrecen un objeto de entidad de Node para su modificación antes de ser almacenado cuando finalmente se envía el formulario.

Gracias a @Berdir por los consejos.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım