buộc tạo kiểu ảnh trên nút lưu


Câu trả lời:


12

Có - bạn có thể triển khai hook_node_insert()hook_node_update()trong một mô-đun tùy chỉnh và tạo hình ảnh ở đó bằng các hàm API hình ảnh. Ví dụ

function MYMODULE_node_insert($node) {
  // Get some field items from a field called 'field_photo.
  if ($image_items = field_get_items('node', $node, 'field_photo')) {
    $image_item = array_shift($image_items);

    // Load the associated file.
    $file = file_load($image_item['fid']);

    // An array of image styles to create.
    $image_styles = array('style_1', 'style_2');

    foreach ($image_styles as $style_name) {
      // Get the location of the new image.
      $derivative_uri = image_style_path($style_name, $file->uri);

      // Create the image.
      image_style_create_derivative($style_name, $file->uri, $derivative_uri);
    }
  }
}

trông thật tuyệt nhưng bạn có thể biết làm thế nào để có được giá trị của các mục bộ sưu tập trường liên quan đến cái gật đầu của tôi không?
sinini

Thật vậy - drupal.stackexchange.com/questions/11062/iêu :) Ồ và trong trường hợp bạn cần nó: drupal.stackexchange.com/questions/11062/ trộm
Clive

Bây giờ tôi đã nhận thấy rằng các hình ảnh được tạo ra không được thay đổi kích thước, chỉ được lưu trữ ở kích thước ban đầu. điều này đã từng xảy ra với bạn và bạn có thể có bất kỳ ý tưởng nào để giải quyết nó?
sinini

@sinini câu trả lời của bạn là tại drupal.stackexchange.com/questions/155823/NH
Tanvir Ahmad

Cuộc sống của D7 bị hạn chế, nhưng chỉ trong trường hợp ai đó gặp phải điều này như tôi đã làm hôm nay, một sự điều chỉnh. image_style_create_derivative () mong đợi một mảng cho tham số đầu tiên, vì vậy dòng đó sẽ là: image_style_create_derivative (image_style_load ($ style_name), $ file-> uri, $ derivative_uri);
Đánh dấu

9

Hai câu trả lời với các khối mã hầu hết đều đúng trừ khi chúng nhìn ra một điều chính:

Đối số đầu tiên của image_style_create_derivative được dự kiến ​​là một mảng kiểu hình ảnh.

Những gì họ đi qua chỉ là tên của phong cách. Trong foreach nếu bạn thêm:

$style = image_style_load($style_name);

sau đó thay đổi $ style_name thành $ style trong hàm image_style_create_derivative, nó sẽ hoạt động như mong đợi và tạo ra hình ảnh theo kiểu.

image_style_create_derivative($style, $file->uri, $derivative_uri);

Hy vọng rằng sẽ giúp bất cứ ai khác có vấn đề này.


4

Cảm ơn sự giúp đỡ của bạn Clive, toàn bộ chức năng của tôi cho các mục bộ sưu tập trường: (một bài viết hữu ích khác từ bạn: Truy cập bộ sưu tập trường )

function channelportal_gallery_node_update($node) {

  //get all the id's from the field collection values
  $galleryimages = field_get_items('node', $node, 'field_gallery_and_caption');
  $fieldcollectionids = array();

  foreach ($galleryimages as $key => $value) {
    $fieldcollectionids[] = $value['value'];
  }

  // Load up the field collection items
  $items = field_collection_item_load_multiple($fieldcollectionids);

  foreach ($items as $item) {

    $image_item = field_get_items('field_collection_item', $item, 'field_gallery_image');

    // Load the associated file.
    $file = file_load($image_item[0]['fid']);

    // An array of image styles to create.
    $image_styles = array('gallery_big', 'gallery_thumbnail');

    foreach ($image_styles as $style_name) {
        // Get the location of the new image.
        $derivative_uri = image_style_path($style_name, $file->uri);

        // Create the image.
        image_style_create_derivative($style_name, $file->uri, $derivative_uri);
    }
  }
}


0

Bạn nên sử dụng cả hook_node_insert ()hook_node_update () và để kiểm tra xem các dẫn xuất hình ảnh cần thiết không được tạo ra, sau đó tạo chúng, nếu không, không làm gì cả.

/**
 * Implements hook_node_insert to generate derivative images for the new inserted node in
 * case they are not generated
 * @param object $node
 */
function YOUR_MODULE_node_insert($node) {
  //REPLACE field_YOUR_IMAGE_FIELD WITH YOUR FIELD IMAGE NAME
  if(isset($node->field_YOUR_IMAGE_FIELD['und'][0]['uri'])) {
    _generate_image_style($node->field_YOUR_IMAGE_FIELD['und'][0]['uri']);
  }
}

/**
 * Implements hook_node_update to generate derivative images for the new updated node in
 * case they are not generated
 * @param object $node
 */
function YOUR_MODULE_node_update($node) {
  //REPLACE field_YOUR_IMAGE_FIELD WITH YOUR FIELD IMAGE NAME
  if(isset($node->field_YOUR_IMAGE_FIELD['und'][0]['uri'])) {
    _generate_image_style($node->field_YOUR_IMAGE_FIELD['und'][0]['uri']);
  }
}

/**
 * Generates the needed image styles by the image uri if they are not already generated
 * @param string $image_uri
 */
function _generate_image_style($image_uri) {
  //This should be changed to your image styles names.
  $image_styles = array('image_style_name1', 'large_image', 'promo_image');
  foreach ($image_styles as $style) {
    $derivative_uri = image_style_path($style, $image_uri);
    file_exists($derivative_uri) || image_style_create_derivative(image_style_load($style), $image_uri, $derivative_uri);
  }
}

Lưu ý: Nếu trường hình ảnh của bạn có nhiều hình ảnh thì bạn nên lặp qua chúng như thế:

if(isset($node->field_main_image['und']) && is_array($node->field_main_image['und'])) {
  foreach($node->field_main_image['und'] as $delta => $image_field) {
    _generate_image_style($node->field_YOUR_IMAGE_FIELD['und'][$delta]['uri']);
  }
}

Thế hệ kiểu ảnh được lấy từ đây

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.