Bagaimana saya bisa membuat pemrograman dengan bidang tanggal dan gambar?
Saya tahu saya bisa melakukannya di Drupal 7 dengan kode berikut.
global $user;
$node = new stdClass();
$node->title = "YOUR TITLE";
$node->type = "YOUR_NODE_TYPE";
node_object_prepare($node); // Sets some defaults. Invokes hook_prepare() and hook_node_prepare().
$node->language = LANGUAGE_NONE; // Or e.g. 'en' if locale is enabled
$node->uid = $user->uid;
$node->status = 1; //(1 or 0): published or not
$node->promote = 0; //(1 or 0): promoted to front page
//image field
$existing_filepath = "/home/nzcodarnoc/sites/default/files/imported/picture.jpg"
$new_filepath = "public://picture.jpg"
// Create the file object
$drupal_file = file_save_data(file_get_contents($existing_filepath), $new_filepath);
$drupal_file->alt = $node->title;
$drupal_file->title = $node->title;
// Assign the file object to the node, as an array
$node->field_my_file[$node->language][0] = get_object_vars($drupal_file);
//date field
$node->birth_date[LANGUAGE_NONE][0]['value'] = time();
$node = node_submit($node); // Prepare node for saving
node_save($node);
Apa kode yang setara untuk Drupal 8?
Jawaban:
Kode berikut akan membantu Anda menyimpan gambar di simpul baru.
Untuk informasi lebih lanjut, lihat http://realityloop.com/blog/2015/10/10/programmatically-attach-files-node-drupal-8 .
sumber
Dalam drupal 8 entitas adalah objek dan dengan demikian, membuat entitas adalah dengan membuat instance dari kelas tipe entitas. Jika Anda mengetahui kelas entitas maka Anda dapat menggunakan kata kunci baru atau fungsi buat.
IE
$foo = new Foo();
atau$foo = Foo::create();
Jika Anda tidak tahu kelas entitas (hanya nama mesin) maka Anda dapat menggunakan permintaan kelas Penyimpanan seperti:
\Drupal::entityTypeManager()->getStorage($entity_type_id)->create();
Untuk mengisi bidang suatu entitas Anda dapat menggunakan
$entity->set($key, $value)
metode pada objek entitas atau meneruskankey=>value
array ke konstruktor entitas. Dengan demikian:Untuk menyimpan entitas, Anda hanya perlu memanggil
$entity->save()
metode pada objek entitas.Karena file dalam drupal 8 juga merupakan entitas, Anda harus memberikan id entitas file, atau entitas file yang sebenarnya, sebagai nilainya.
Berikut adalah kode untuk skenario spesifik Anda:
sumber
Saya pikir cara berorientasi objek lebih mudah, bukan?
sumber
Jika Anda ingin melakukannya dengan cara yang paling bersih (dapat diuji), gunakan
entity_type.manager
layanan:Masalah dengan
Node::create
fungsi, itu adalah panggilan statis, dan itulah mengapa Anda tidak dapat benar-benar menguji kelas Anda lagi. Hindari melakukan panggilan statis kapan pun memungkinkan. Ini akan membuat kode Anda lebih mudah dibaca (karena dependensi akan lebih jelas).sumber
Cara lain untuk membuat simpul dengan gambar adalah:
sumber
Kode berikut berfungsi untuk saya
sumber
$form_state
hanya tersedia dalam konteks tertentu; jika tidak, Anda tidak dapat mengaksesnya.sumber