Crea contenuto a livello di codice


9

In Drupal 8, come posso creare contenuti a livello di codice? Dall'amministrazione "Drupal 8", ho creato un nuovo tipo "House" (contiene una descrizione, un'immagine, un campo di riferimento per gli utenti ...). Come posso creare un tipo di entità "House" da un modulo personalizzato?

Nel mio modulo personalizzato, ho un file di modulo (contiene una classe che estende FormBase). Nel callback di invio, voglio creare una nuova "casa" e impostare valori e salvare la nuova Entità.

Non trovo esempi sul web, nel core ...


La tua seconda domanda "Come posso creare un tipo di entità 'Casa'?" è un po 'confuso. Penso che la domanda sia "Come posso creare un nodo del tipo di nodo" House "da un modulo personalizzato?" L'ambiguità deriva dall'uso del "tipo di entità" che ha un significato molto specifico in Drupal e la domanda potrebbe essere "Come posso creare un tipo di entità personalizzato chiamato 'House' da un modulo personalizzato?" o "Come posso creare un'entità personalizzata che utilizza il bundle 'House'"?
mradcliffe,

Risposte:


15

Ecco un semplice esempio di creazione di un nodo in Drupal 8.

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

Aggiornato per rimuovere la funzione obsoleta come da commenti da @mradcliffe. Grazie!

Cordiali saluti, per testare piccoli frammenti di codice come questo, il drush core-clicomando funziona alla grande. Vedi: http://www.drushcommands.com/drush-7x/core/core-cli


1
Prima del salvataggio, con entityManager, è possibile sapere per ogni campo: quale tipo di dati deve essere impostato? (testo per campo di testo, fid per file ecc ...)
matthieu lopez,

L'unico modo che conosco al momento è usare un altro metodo deprecato, EntityManager :: getDefinitions (), ma penso che se si crea un'istanza di EntityDataDefinition tramite il metodo di creazione statica, è possibile chiamare getPropertyDefinitions (). Entrambi restituiranno definizioni per ogni proprietà come titolo o campo. Esiste anche getFieldStorageDefinitions () che restituisce la stessa cosa, ma dall'entità di archiviazione (vedere getStorage ('nodo') sopra). Tuttavia, questo potrebbe non essere disponibile per i driver non SQL.
mradcliffe,

0

A partire da Drupal 8 i nodi sono ora trattati come entità. Puoi semplicemente creare un nodo con il seguente codice

$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();

2
entity_create () è un metodo deprecato che dovremmo evitare di usare. L'iniezione di EntityManager nella classe Form o l'utilizzo di \ Drupal :: entityManager sono i metodi standard di gestione delle entità.
mradcliffe,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.