সেভ নোডে চিত্র শৈলী প্রজন্মকে চাপ দিন


9

আমি এখনও আমার সমস্যাটি এখানে বর্ণিত পেয়েছি চিত্র শৈলী, ক্ষেত্র সংগ্রহের আইটেমটিতে চিত্র পুনরায় ব্যবহার করুন তবে আমি সমাধান পেতে হাল ছেড়ে দিয়েছি ।

আমার মনে যে কাজটি এসেছে তা হ'ল নোডসভেতে চিত্রশৈলীর প্রজন্মকে বাধ্য করা। এমন কি কি কোনও সম্ভাবনাবিদ আছে?

উত্তর:


12

হ্যাঁ - আপনি বাস্তবায়ন করতে পারেন hook_node_insert()এবং hook_node_update()একটি কাস্টম মডিউলে এবং চিত্রের এপিআই ফাংশন ব্যবহার করে চিত্রগুলি তৈরি করতে পারেন। উদাহরণ স্বরূপ

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

দুর্দান্ত লাগছে ধন্যবাদ! তবে আপনি কী জানেন যে আমার নোডাইটাইপ সম্পর্কিত ফিল্ড সংগ্রহের আইটেমগুলির মূল্য কীভাবে পাবেন?
sinini

প্রকৃতপক্ষে - drupal.stackexchange.com/questions/11062/… :) ওহ এবং যদি আপনার এটির প্রয়োজন হয়: drupal.stackexchange.com/questions/11062/…
ক্লাইভ

আমি এখন লক্ষ্য করেছি যে উত্পন্ন চিত্রগুলি পুনরায় আকার দেওয়া হয়নি, কেবলমাত্র মূল আকারে সঞ্চিত। এটি কি কখনও আপনার সাথে ঘটেছিল এবং কীভাবে এটি সমাধান করবেন আপনার কোনও ধারণা থাকতে পারে?
sinini

@ সিনিণী আপনার উত্তরটি drupal.stackexchange.com/questions/155823/…
তানভীর আহমেদ

ডি 7 এর জীবন সীমাবদ্ধ তবে কেবল আজকের মতো কেউ যদি আসে তবে এটি সংশোধন করে। ইমেজ_স্টাইল_ক্রিয়েট_ডেরিভেটিভ () প্রথম প্যারামিটারের জন্য একটি অ্যারের প্রত্যাশা করে, সুতরাং সেই লাইনটি হওয়া উচিত: চিত্র_স্টাইল_ক্রেট_ডেরিভেটিভ (চিত্র_ স্টাইল_লোড ($ শৈলী_নাম)), $ ফাইল-> ইউরি, $ ডেরিভেটিভ_ুরি);
চিহ্নিত করুন

9

কোডের ব্লক সহ দুটি উত্তর বেশিরভাগ ক্ষেত্রেই সঠিক হয় তবে তারা একটি বড় বিষয়টিকে উপেক্ষা করে থাকে:

চিত্র_স্টাইল_ক্রিয়েট_ডেরিটিভের প্রথম যুক্তিটি একটি চিত্র শৈলীর অ্যারে হিসাবে প্রত্যাশিত।

তারা যা করছে তা কেবল স্টাইলের নাম। আপনি যদি যোগ করেন তবে পূর্বে

$style = image_style_load($style_name);

তারপরে ইমেজ_স্টাইল_ক্রিয়েট_ডেরিভেটিভ ফাংশনে $ স্টাইল_নাম $ স্টাইলে পরিবর্তন করুন এটি প্রত্যাশা অনুযায়ী কাজ করা উচিত এবং স্টাইলযুক্ত চিত্রটি তৈরি করা উচিত।

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

আশা করি এটি যে কারও সাথে এই সমস্যাটি নিয়ে সহায়তা করবে।


4

আপনার সহায়তার জন্য ধন্যবাদ ক্লাইভ, মাঠ সংগ্রহের আইটেমগুলির জন্য আমার সম্পূর্ণ ফাংশন: (আপনার কাছ থেকে আর একটি সহায়ক পোস্ট: একটি ক্ষেত্র সংগ্রহের অ্যাক্সেস করা )

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

Hook_node_insert () এবং hook_node_update () উভয়ই ব্যবহার করার পরামর্শ দেওয়া হয়েছে এবং প্রয়োজনীয় চিত্রের ডেরিভেটিভগুলি উত্পন্ন হয়নি কিনা তা যাচাই করার জন্য, সেগুলি উত্পন্ন করুন, অন্যথায় কিছুই করবেন না।

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

দ্রষ্টব্য: যদি আপনার চিত্রের ক্ষেত্র একাধিক চিত্র গ্রহণ করে তবে আপনার সেগুলির মতো লুপ হওয়া উচিত:

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

চিত্র শৈলীর প্রজন্ম এখান থেকে নেওয়া হয়েছে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.