Buat konten secara terprogram


9

Di Drupal 8, bagaimana saya bisa membuat konten secara terprogram? Dari administrasi "Drupal 8", saya membuat tipe baru "House" (berisi deskripsi, gambar, bidang referensi untuk pengguna ...). Bagaimana saya bisa membuat tipe entitas "Rumah" dari modul khusus?

Dalam modul khusus saya, saya memiliki file formulir (berisi kelas yang memperluas FormBase). Dalam mengirim panggilan balik, saya ingin membuat "rumah" baru dan menetapkan nilai dan menyimpan Entitas baru.

Saya tidak menemukan contoh di web, pada intinya ...


Pertanyaan kedua Anda, "Bagaimana saya bisa membuat tipe entitas 'Rumah'?" sedikit membingungkan. Saya pikir pertanyaannya adalah "Bagaimana saya bisa membuat simpul dari tipe simpul" Rumah "dari modul khusus?" Ambiguitas berasal dari penggunaan "tipe entitas" yang memiliki arti sangat spesifik dalam Drupal dan pertanyaannya adalah "Bagaimana saya bisa membuat tipe entitas kustom yang disebut 'Rumah' dari modul khusus?" atau "Bagaimana saya bisa membuat entitas kustom yang menggunakan bundel 'Rumah'"?
mradcliffe

Jawaban:


15

Berikut adalah contoh sederhana membuat simpul di Drupal 8.

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

Diperbarui untuk menghapus fungsi yang sudah usang sesuai komentar dari @mradcliffe. Terima kasih!

FYI, untuk menguji potongan kecil kode seperti ini, drush core-cliperintahnya bekerja dengan baik. Lihat: http://www.drushcommands.com/drush-7x/core/core-cli


1
Sebelum penyimpanan, dengan entitasManager, apakah mungkin untuk mengetahui setiap bidang: tipe data apa yang harus ditetapkan? (teks untuk bidang teks, fid untuk file dll ...)
matthieu lopez

Satu-satunya cara yang saya tahu saat ini adalah dengan menggunakan metode lain yang sudah usang, EntityManager :: getDefinitions (), tapi saya pikir jika Anda instantiate EntityDataDefinition melalui metode pembuatan statis Anda dapat memanggil getPropertyDefinitions (). Keduanya akan mengembalikan definisi untuk setiap properti seperti judul atau bidang. Ada juga getFieldStorageDefinitions () yang mengembalikan hal yang sama, tetapi dari entitas penyimpanan (lihat getStorage ('node') di atas). Namun ini mungkin tidak tersedia untuk driver non-SQL.
mradcliffe

0

Pada Drupal 8 node sekarang diperlakukan sebagai entitas. Anda dapat dengan mudah membuat simpul dengan kode berikut

$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
entitas_create () adalah metode usang yang harus kita hindari menggunakan. Menyuntikkan EntityManager ke dalam kelas Formulir atau menggunakan \ Drupal :: entityManager adalah cara standar mengelola entitas.
mradcliffe
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.