Tạo nội dung theo chương trình


9

Trong Drupal 8, làm cách nào để tạo nội dung theo chương trình? Từ quản trị "Drupal 8", tôi đã tạo một loại "Nhà" mới (chứa mô tả, hình ảnh, trường tham chiếu cho người dùng ...). Làm cách nào tôi có thể tạo loại thực thể "Nhà" từ mô-đun tùy chỉnh?

Trong mô-đun tùy chỉnh của tôi, tôi có một tệp biểu mẫu (chứa một lớp mở rộng FormBase). Trong phần gọi lại, tôi muốn tạo một "ngôi nhà" mới và đặt các giá trị và lưu Thực thể mới.

Tôi không tìm thấy các ví dụ trên web, trong lõi ...


Câu hỏi thứ hai của bạn "Làm cách nào tôi có thể tạo loại thực thể 'Nhà'?" hơi khó hiểu Tôi nghĩ câu hỏi là "Làm thế nào tôi có thể tạo một nút của loại nút" House "từ một mô-đun tùy chỉnh?" Sự mơ hồ bắt nguồn từ việc sử dụng "loại thực thể" có ý nghĩa rất cụ thể trong Drupal và câu hỏi có thể là "Làm cách nào tôi có thể tạo loại thực thể tùy chỉnh được gọi là 'Nhà' từ mô-đun tùy chỉnh?" hoặc "Làm cách nào tôi có thể tạo một thực thể tùy chỉnh sử dụng gói 'Nhà'"?
mradcliffe

Câu trả lời:


15

Đây là một ví dụ đơn giản về việc tạo một nút trong Drupal 8.

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

Đã cập nhật để xóa chức năng không dùng theo nhận xét từ @mradcliffe. Cảm ơn!

FYI, để thử nghiệm các đoạn mã nhỏ như thế này, drush core-clilệnh hoạt động rất tốt. Xem: http://www.drushcommands.com/drush-7x/core/core-cli


1
Trước khi lưu, với thực thể Trình quản lý, có thể biết cho từng trường: loại dữ liệu nào phải được đặt không? (văn bản cho trường văn bản, fid cho tệp, v.v.)
matthieu lopez

Cách duy nhất tôi biết vào lúc này là sử dụng một phương thức không dùng nữa, EntityManager :: getDefDefs (), nhưng tôi nghĩ rằng nếu bạn khởi tạo EntityDataDefDef thông qua phương thức tạo tĩnh, bạn có thể gọi getPropertyDefDefs (). Cả hai sẽ trả về các định nghĩa cho từng thuộc tính như tiêu đề hoặc một trường. Ngoài ra còn có getFieldStorageDefDefs () trả về cùng một thứ, nhưng từ thực thể lưu trữ (xem getStorage ('nút') ở trên). Tuy nhiên, điều này có thể không có sẵn cho trình điều khiển không phải SQL.
mradcliffe

0

Kể từ Drupal 8 nút hiện được coi là các thực thể. Bạn có thể đơn giản tạo một nút bằng mã sau

$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 () là một phương thức không dùng nữa mà chúng ta nên tránh sử dụng. Việc tiêm EntityManager vào lớp Form hoặc sử dụng \ Drupal :: entityManager là những cách tiêu chuẩn để quản lý các thực thể.
mradcliffe
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.