Crea contenido mediante programación

9

En Drupal 8, ¿cómo puedo crear contenido mediante programación? De la administración de "Drupal 8", creé un nuevo tipo "House" (contiene una descripción, una imagen, un campo de referencia para los usuarios ...). ¿Cómo puedo crear un tipo de entidad "Casa" desde un módulo personalizado?

En mi módulo personalizado, tengo un archivo de formulario (contiene una clase que extiende FormBase). En la devolución de llamada de envío, quiero crear una nueva "casa" y establecer valores y guardar la nueva entidad.

No encuentro ejemplos en la web, en el núcleo ...

matthieu lopez
fuente
Su segunda pregunta "¿Cómo puedo crear un tipo de entidad 'Casa'?" Es un poco confuso. Creo que la pregunta es "¿Cómo puedo crear un nodo del tipo de nodo" Casa "a partir de un módulo personalizado?" La ambigüedad se deriva del uso de "tipo de entidad" que tiene un significado muy específico en Drupal y la pregunta podría ser "¿Cómo puedo crear un tipo de entidad personalizada llamada 'Casa' desde un módulo personalizado?" o "¿Cómo puedo crear una entidad personalizada que use el paquete 'Casa'"?
mradcliffe

Respuestas:

15

Aquí hay un ejemplo simple de crear un nodo en Drupal 8.

$data = [
  'type' => 'article', 
  'title' => 'My new title', 
  'uid' => 1
];
$node = Drupal::entityTypeManager()
  ->getStorage('node')
  ->create($data);
$node->save();

Actualizado para eliminar la función obsoleta según los comentarios de @mradcliffe. ¡Gracias!

Para su información, para probar pequeños fragmentos de código como este, el drush core-clicomando funciona muy bien. Ver: http://www.drushcommands.com/drush-7x/core/core-cli

cuchilla de carnicero
fuente
1
Antes de guardar, con entityManager, ¿es posible saber para cada campo: qué tipo de datos se deben configurar? (texto para campo de texto, fid para archivo, etc.)
matthieu lopez
La única manera que sé en este momento es usar otro método obsoleto, EntityManager :: getDefinitions (), pero creo que si crea una instancia de EntityDataDefinition a través del método de creación estática, puede llamar a getPropertyDefinitions (). Ambos devolverán definiciones para cada propiedad, como el título o un campo. También está el getFieldStorageDefinitions () que devuelve lo mismo, pero de la entidad de almacenamiento (consulte getStorage ('nodo') más arriba). Sin embargo, esto puede no estar disponible para controladores que no sean SQL.
mradcliffe
0

A partir de Drupal, 8 nodos ahora se tratan como entidades. Simplemente puede crear un nodo con el siguiente código

$new_page_values = array();
$new_page_values['type'] = 'my_content_type';
$new_page_values['title'] = $form_state['values']['page_title'];
$new_page_values['path'] = $new_page_path;

$new_page = entity_create('node', $new_page_values);
$new_page->save();
Shabir A.
fuente
2
entity_create () es un método obsoleto que debemos evitar usar. Inyectar EntityManager en la clase Form o usar \ Drupal :: entityManager son las formas estándar de administrar entidades.
mradcliffe