Drupal 8 tải phương tiện theo id

Nếu bạn có một trang web có nội dung được điền bằng trường loại tệp/hình ảnh và muốn chuyển đổi nó sang sử dụng loại trường Phương tiện, bạn cần tạo một trường loại phương tiện mới và điền lại tất cả nội dung hình ảnh. Điều này không thực tế đối với một trang web có nhiều nội dung, vì vậy chúng tôi đã nghĩ ra một phương pháp sử dụng tập lệnh cập nhật để tự động điền trường phương tiện mới từ loại trường tệp/hình ảnh cũ

Sự chuẩn bị

Nếu bạn chưa có, bước đầu tiên là tạo thực thể Phương tiện của bạn. Sau đó, tạo trường tham chiếu phương tiện mới trên loại nội dung hiện tại của bạn

Chuyển thành

Bây giờ hãy đặt đoạn mã sau [được sửa đổi cho các giá trị loại nội dung và trường của bạn] vào một mô-đun tùy chỉnh và chạy tập lệnh cập nhật của Drupal [/update. php hoặc "drush updb"]

Đôi khi, có thể hữu ích khi truy cập URI thô hoặc URL tệp của hình ảnh được tải lên bằng trường tham chiếu Phương tiện trong Drupal 8

Bạn có thể yêu cầu URL cho tệp hình ảnh thay vì muốn Drupal hiển thị hình ảnh và đánh dấu HTML xung quanh với nó

Để thực hiện điều này trong mẫu nút bằng Twig, chỉ cần sử dụng cú pháp sau, thay thế tên trường bằng tên máy của trường Phương tiện tùy chỉnh của bạn

use Drupal\media\Entity\Media;
use Drupal\file\Entity\File;

$media = Media::load[$mid];
$fid = $media->field_media_image->target_id;
$file = File::load[$fid];

$url = $file->url[];


                                    $image_url = $media->field_media_image->entity->getFileUri[];
file_create_url[$image_url];

Có bất kỳ ví dụ mã còn lại?

Ví dụ về mã mới trong danh mục Khác

Ngày 1 tháng 10 năm 2022

drupal

Sử dụng Phương tiện trong Drupal [phiên bản 8, 9 và 10] là một lựa chọn tốt hơn nhiều so với việc sử dụng các trường hình ảnh kiểu cũ. Bạn có thể thêm tất cả các loại trường vào Phương tiện để làm phong phú hình ảnh, video và các loại phương tiện khác với thông tin bổ sung và bạn cũng có thể sử dụng lại Phương tiện. Tất cả điều đó không thể dễ dàng thực hiện nếu bạn đang sử dụng các trường hình ảnh thông thường

Cũng giống như các loại Nội dung, bạn có thể có nhiều loại Phương tiện khác nhau. Theo mặc định khi bạn bật mô-đun Phương tiện, bạn sẽ nhận được các loại sau

Hình ảnh

Nếu bạn phân tích loại Phương tiện hình ảnh, bạn sẽ thấy rằng theo mặc định chỉ có một trường. Trường đó là field_media_image thuộc loại Hình ảnh. Hãy thêm một số trường bổ sung để làm phong phú hình ảnh của chúng tôi và cung cấp nhiều thông tin hữu ích hơn cho người dùng của chúng tôi. Trong ảnh chụp màn hình sau, bạn có thể thấy rằng tôi đã thêm các trường Tác giả, Ngày và Vị trí.

Hình ảnh

Trước khi chúng ta tiếp tục với việc tạo các thực thể Phương tiện theo chương trình, bạn cũng có thể xem bài viết của tôi về cách chuyển đổi các trường hình ảnh hiện có thành hình ảnh phương tiện. Khá dễ dàng để viết một móc cập nhật sẽ tự động thực hiện chuyển đổi

Để lập trình lưu một thực thể phương tiện thuộc loại hình ảnh, bạn có thể làm điều gì đó như thế này

use Drupal\media\Entity\Media;

$image_id = 1;

$image_media = Media::create[[
  'name' => 'My media name',
  'bundle' => 'image',
  'uid' => 1,
  'langcode' => 'en',
  'status' => 0,
  'field_media_image' => [
    'target_id' => $image_id,
    'alt' => t['My media alt attribute'],
    'title' => t['My media title attribute'],
  ],
  'field_author' => 'Goran Nikolovski',
  'field_date' => '2025-12-31T23:59:59',
  'field_location' => 'Subotica',
 ]];
$image_media->save[];

Ví dụ trên giả định rằng bạn có ID tệp hình ảnh. Đây có thể là trường hợp khi bạn đang chuyển đổi các trường hình ảnh thành phương tiện. Nhưng bạn cũng có thể tạo và lưu tệp hình ảnh trong Drupal theo lập trình

use Drupal\media\Entity\Media;
use Drupal\Core\File\FileSystemInterface;

$image_data = file_get_contents['//gorannikolovski.com/themes/custom/gn2021/images/goran-nikolovski-signature.png'];
$file_repository = \Drupal::service['file.repository'];
$image = $file_repository->writeData[$image_data, "public://goran-nikolovski-signature.png", FileSystemInterface::EXISTS_REPLACE];

$image_media = Media::create[[
  'name' => 'My media name',
  'bundle' => 'image',
  'uid' => 1,
  'langcode' => 'en',
  'status' => 0,
  'field_media_image' => [
    'target_id' => $image->id[],
    'alt' => t['My media alt attribute'],
    'title' => t['My media title attribute'],
  ],
  'field_author' => 'Goran Nikolovski',
  'field_date' => '2025-12-31T23:59:59',
  'field_location' => 'Subotica',
 ]];
$image_media->save[];

Như bạn có thể thấy, việc tạo một thực thể phương tiện rất giống với việc tạo các thực thể khác trong Drupal. Nếu bạn nhìn kỹ hơn, bạn sẽ thấy rằng chúng tôi không có tiêu đềloại fields like nodes have, but instead, we have name and bundle fields.

Như thường lệ, bạn không cần phải mã hóa cứng uidlangcode values. You can set the current user ID and the current language code:

$current_user_id = \Drupal::currentUser[]->id[];
$language_code = \Drupal::languageManager[]->getCurrentLanguage[]->getId[];

Làm cách nào để tạo một thực thể video YouTube theo chương trình?

Để làm điều này, bạn phải sử dụng loại phương tiện Video từ xa .

use Drupal\media\Entity\Media;

$video_media = Media::create[[
  'bundle' => 'remote_video',
  'uid' => 1,
  'name' => 'DrupalCon Prague 2022 Driesnote',
   'field_media_oembed_video' => [
     'value' => '//www.youtube.com/watch?v=Hmit4ET-l3Q',
   ],
]];
$video_media->save[];

Cuối cùng, bạn có thể đính kèm thực thể phương tiện đã tạo vào một số thực thể khác. Trong ví dụ sau, chúng tôi đang đính kèm nó vào loại nội dung trang Cơ bản

use \Drupal\node\Entity\Node;

$node = Node::create[[
  'type' => 'page',
  'title' => 'My media parent node',
  'field_youtube' => [
    'target_id' => $video_media->id[],
  ],
]];
$node->save[];

Mô-đun phương tiện đã được thêm vào lõi Drupal trong phiên bản 8. 4 [5 năm trước] vì vậy đã đến lúc tất cả chúng ta bắt đầu sử dụng nó

Làm cách nào để tải nút theo ID trong Drupal 8?

Để tải chi tiết nút bằng cách sử dụng id của nó trong Drupal 8, hãy sử dụng cú pháp sau. $node_details = Nút. tải[$nid]; . Lưu ý rằng tham số phải là một mảng id. We can load multiple nodes in Drupal 8 using load multiple[] function. Note that the parameter should be an array of ids.

Làm cách nào để lấy URL của hình ảnh trong Drupal?

Sử dụng quản trị viên Drupal để định cấu hình nơi hình nền sẽ xuất hiện. https. //www. drupal. tổ chức/dự án/bg_image_formatter. Sử dụng tiền xử lý để tạo URL và truy vấn phương tiện. https. //www. drupal. org/docs/8/modules/responsive-background-image/how-to-use-the-responsive-background-image-module

URL cho thực thể phương tiện trong Drupal là gì?

Giống như hầu hết các thực thể nội dung khác trong Drupal, các thực thể Phương tiện có một URL được liên kết với chúng. Theo mặc định, đây là /media/{ID} , nhưng giống như khi bạn tạo nút, bạn có thể chỉnh sửa bí danh URL cho thực thể Phương tiện.

Chủ Đề