Gói một tệp kết xuất từ ​​Media bằng một liên kết


7

Đây là câu hỏi liên quan đến Cách đặt Kiểu phương tiện trong Phương tiện 7.1.2 / Phương tiện 7.2.X? .

Tôi đang sử dụng Media 1.2 trong trang web Drupal 7 để thêm một số trường vào hình ảnh (chú thích, tín dụng, v.v.).

Nếu tôi có trường hình ảnh được thiết lập để hiển thị dưới dạng tệp Kết xuất với chế độ xem cụ thể, ví dụ:

nhập mô tả hình ảnh ở đây

Tôi có màn hình của mình được thiết lập theo cách tôi muốn hiển thị các trường thích hợp cho chế độ xem này. Trong màn hình hiển thị tập tin, vd

nhập mô tả hình ảnh ở đây

Có cách nào để bọc hình ảnh trong một liên kết đến trang media / fid không? Tôi không thấy cách thực hiện điều này từ UI và Nhà phát triển chủ đề không cung cấp cho tôi bất kỳ thông tin hữu ích nào về chức năng chủ đề và chức năng tiền xử lý / quy trình đang được gọi giữa một cho toàn bộ trường hình ảnh (theo kiểu nội dung có liên quan) và chính hình ảnh (yếu tố <img /> thực tế).

Tại thời điểm này, tôi không muốn chuyển sang Bộ sưu tập hiện trường, nhưng sẽ giải trí chuyển sang Media 2.x nếu đó là lựa chọn duy nhất của tôi.


1
Bạn đã xem xét sử dụng hook_field_attach_view_alter()?
kiamlaluno

Không quen thuộc lắm với việc sử dụng cái móc đó, nhưng tôi không thấy nó hoạt động như thế nào.
mpdon Arena

Mục đích của nó là thay đổi cách hiển thị một trường và nó được gọi khi field_attach_view () hoặc field_view_field () được gọi. Sử dụng hook đó, bạn sẽ có thể thay đổi cách hiển thị trường hình ảnh.
kiamlaluno

Điều gì xảy ra khi bạn cũng chọn Tệp kết xuất , trong màn hình Kích hoạt ?
kiamlaluno

Chế độ hiển thị đó là một biểu tượng + liên kết đến tệp gốc. Vấn đề là tìm ra ai gọi chủ đề ('image_style') cho các tùy chọn tôi phác thảo, nhưng tôi không thể tìm ra điều này. Tùy chọn tiếp theo của tôi là tạo MYTHEME_image_style để tôi có thể bắt đầu xem các ngăn xếp cuộc gọi. Vui sướng.
mpdon Arena

Câu trả lời:


1

Như bạn đã đề cập, Media kết xuất các trường thông qua cơ chế định dạng hiển thị trường của Drupal. Mô-đun tùy chỉnh của bạn sẽ hoạt động, nhưng có một mô-đun này: Trường được liên kết


1
Điều này có vẻ như là một lựa chọn tốt hơn, nhưng nó tiếp tục nổ tung trên trang web cụ thể này. Tôi cần phải làm việc này với một trong những trang thử nghiệm của mình và xem nó hoạt động như thế nào.
mpdon Arena

4

OK, đây là mã làm việc.

Mô-đun Media thực hiện hook_file_formatter_info()để thiết lập một cuộc gọi lại để hiển thị hình ảnh.

Theo cách của Drupal, có một hook_file_formatter_info_alter()thay đổi hành vi mặc định. Vì vậy, tôi đã lấy cuộc gọi lại mặc định từ file_entity.module và nhân bản nó thành một mô-đun tùy chỉnh. Sau đó tôi nối dây này với sự thay đổi. Cuộc gọi lại tùy chỉnh của tôi có một số logic bổ sung để kiểm tra kiểu ảnh và sau đó bọc phần tử bằng một liên kết.

Điều khó hiểu thực sự duy nhất là việc triển khai mặc định theme_link()giả định nó là một phần tử lá, vì vậy bạn cần đưa ra phần tử hình ảnh trước.

Là một lưu ý phụ, đây cũng là cách bạn sẽ có được văn bản alt / title trên hình ảnh, mặc định bị thiếu.

function MYMODULE_file_formatter_info_alter(&$info) {
  if (!empty($info['file_image'])) {
    $info['file_image']['view callback'] = 'MYMODULE_file_formatter_file_image_view';
  }
}

function MYMODULE_file_formatter_file_image_view($file, $display, $langcode) {
  // Prevent PHP notices when trying to read empty files.
  // @see http://drupal.org/node/681042
  if (!$file->filesize) {
    return;
  }

  // Do not bother proceeding if this file does not have an image mime type.
  if (strpos($file->filemime, 'image/') !== 0) {
    return;
  }

  if (file_entity_file_is_local($file) && $image = image_load($file->uri)) {
    if (!empty($display['settings']['image_style'])) {
      $element = array(
        '#theme' => 'image_style',
        '#style_name' => $display['settings']['image_style'],
        '#path' => $file->uri,
        '#width' => $image->info['width'],
        '#height' => $image->info['height'],
      );
      if ($display['settings']['image_style'] == 'MYSTYLE') {
        $element = array(
          '#theme' => 'link',
          '#text' => drupal_render($element),
          '#path' => 'media/' . $file->fid,
          '#options' => array(
            'attributes' => array(),
            'html' => TRUE,
          ),
        );
      }
      else {
      }
    }
    else {
      $element = array(
        '#theme' => 'image',
        '#path' => $file->uri,
        '#width' => $image->info['width'],
        '#height' => $image->info['height'],
      );
    }
    return $element;
  }
}

Trong dự án tôi đang làm việc để tải hình ảnh trên mỗi cuộc gọi bằng cách sử dụng image_loadgây ra các vấn đề hiệu suất lớn . Nếu bạn xem xét triển khai mặc định file_entity_file_formatter_file_image_view, bạn sẽ thấy rằng bạn có thể nhận được kích thước hình ảnh với $file->image_dimensionsmảng widthheightphím.
iamweird
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.