kaydet düğümünde görüntü stili oluşturmaya zorla


Yanıtlar:


12

Evet - özel bir modülde uygulayabilir hook_node_insert()ve hook_node_update()görüntü API işlevlerini kullanarak orada görüntüler oluşturabilirsiniz. Örneğin

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);
    }
  }
}

havalı görünüyor teşekkürler! ama nodetype'ımla ilgili alan toplama öğelerinin değerini nasıl elde edebileceğinizi biliyor musunuz?
sinini


Şimdi, oluşturulan görüntülerin yeniden boyutlandırılmadığını, sadece orijinal boyutunda saklandığını fark ettim. bu hiç başınıza geldi ve bunu nasıl çözeceğiniz hakkında bir fikriniz olabilir mi?
sinini


D7'nin hayatı sınırlıdır, ancak bugünkü gibi birinin bununla karşılaşması durumunda, bir düzeltme. image_style_create_derivative (), ilk parametre için bir dizi bekler, böylece bu satır şöyle olmalıdır: image_style_create_derivative (image_style_load ($ style_name), $ file-> uri, $ derivative_uri);
Mark

9

Kod bloklarıyla verilen iki cevap çoğunlukla büyük bir doğrudur:

İmage_style_create_derivative'in ilk argümanının bir resim stili dizisi olması bekleniyor.

Geçtikleri şey sadece stilin adı. Eğer eklerseniz foreach'a:

$style = image_style_load($style_name);

daha sonra beklendiği gibi çalışması ve stil resmi oluşturması gereken image_style_create_derivative işlevinde $ style_name öğesini $ style olarak değiştirin.

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

Umarım bu sorunu yaşayan herkese yardımcı olur.


4

Yardımınız için teşekkürler Clive, tarla toplama öğeleri için tüm fonksiyonum: (sizden başka bir yararlı gönderi: Bir tarla koleksiyonuna erişim )

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

Hem hook_node_insert () hem de hook_node_update () kullanılması ve gerekli görüntü türevlerinin oluşturulup oluşturulmadığını kontrol etmeniz , sonra bunları oluşturmanız, aksi takdirde hiçbir şey yapmamanız önerilir .

/**
 * 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);
  }
}

Not: Görüntü alanınız birden fazla görüntü alıyorsa, bunlar arasında şu şekilde dolaşmalısınız:

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']);
  }
}

Görüntü stilleri üretimi buradan alınır

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.