Điểm:2

Cách lấy chế độ xem\third_party_settings của một trường bên trong hook_pre process_image_formatter(&$variables)

lá cờ br

Mình ở D9.

Tôi đã thêm tùy chọn tùy chỉnh vào trình định dạng trường hình ảnh sau Hướng dẫn Drupal

Trong quá trình tiền xử lý của trường, tôi có thể nhận được các cài đặt mà tôi đã tạo:

function my_module_pre process_field(&$variables) {
  if ($variables["element"]["#formatter"] === 'image') {
    $entity = $variables['element']['#object'];
    $view_mode = $variables['element']['#view_mode'];
    $field_name = $variables['element']['#field_name'];

    $entity_display = EntityViewDisplay::collectRenderDisplay($entity, $view_mode);
    $field_display = $entity_display->getComponent($field_name);

    $variables['my_settings'] = isset($field_display["third_party_settings"]["my_module"]["my_settings"]) && $field_display["third_party_settings"]["my_module"]["my_settings"];
  }
}

Tuy nhiên, các trường.html.twig tệp không phù hợp với nhu cầu của tôi: Tôi phải chuyển cài đặt này tới image-formatter.html.twig tập tin, bởi vì tôi cần phải đặt một div ngay sau khi hình ảnh thẻ và không nằm ngoài một.

Thật không may, tôi không thể lấy thông tin đó trong quá trình tiền xử lý của trình định dạng hình ảnh, vì tôi không thể tìm cách lấy chế độ xem:

function my_module_pre process_image_formatter(&$variables) {
  $item = $variables['item'];
  $entity = $item->getEntity();
  $field = $item->getFieldDefinition();

  // để làm cách lấy view_mode\the third_party_settings?
  $entity_display = EntityViewDisplay::collectRenderDisplay($entity, $missing_view_mode);
}

Điều đó có thể không?

CHỈNH SỬA:

Cảm ơn câu trả lời 4k4, những gì tôi đã làm:

  1. Đã thêm vào bên trong chức năng trường tiền xử lý:
    if (!empty($variables['items'])) {
      foreach ($variables['items'] as &$item) {
        $item['content']['#item_attributes']['my_settings'] = $my_settings;
      }
    }

Và sau đó thêm một chức năng tiền xử lý ảnh để có thông tin đó dưới dạng biến chứ không phải thuộc tính - nhiều sở thích hơn là sự cần thiết nghiêm ngặt.

function my_module_pre process_image(&$variables) {
  $variables['my_settings'] = $variables["attributes"]["my_settings"] ?? SAI;
  unset($variables["attributes"]["my_settings"]);
}
leymannx avatar
lá cờ ne
Drupal 7, nhưng vẫn có thể phù hợp: https://drupal.stackexchange.com/a/39508/15055
Điểm:2
lá cờ cn

Tôi sẽ thêm chế độ xem hoặc cài đặt của bên thứ ba vào thuộc tính hình ảnh. Sau đó, nó có sẵn trong cả hai mẫu lồng nhau, image_formatterhình ảnh. Bạn có thể xóa nó sau khi đã lưu trữ nó trong một biến cục bộ, nếu bạn không muốn thuộc tính đó được hiển thị. Nhưng thông thường không ai quan tâm đến một thuộc tính bổ sung.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.