মিডিয়া মডিউল ব্যবহার করে কীভাবে প্রোগ্রামিয়ালি বাহ্যিক URL থেকে চিত্র যুক্ত করা যায়?


20

আমি কোনও বাহ্যিক URL থেকে প্রোগ্রামগতভাবে একটি চিত্র যুক্ত করতে চাই এবং মডিউলটি সঞ্চয় করতে পারি এবং চিত্রটির স্থানীয় অনুলিপি প্রদর্শন করতে পারি। আমি এটা কিভাবে করবো? সাধারণত, একটি নতুন নোড তৈরি করার সময় আমি "মিডিয়া নির্বাচন করুন" বোতামটি ক্লিক করব তবে আমি কোডের মাধ্যমে এটি করতে চাই।

উত্তর:


0

এটি আপনার প্রশ্নের একটি আংশিক উত্তর, কারণ আমি অনুরূপ কিছু করার চেষ্টা করছি তবে ভিডিও উপাদান সহ।

আপনি নোডটি একটি সামগ্রীর ধরণ হিসাবে তৈরি করতে পারেন, আপনার প্রয়োজনীয় মিডিয়া প্রকারটি সংরক্ষণ করুন (আপনার কল করতে হবে এমন প্রাসঙ্গিক মাইম / প্রকার এবং ফাংশনগুলির জন্য মিডিয়া কোডটি দেখুন)। আপনাকে সম্ভবত একটি মাল্টিমিডিয়া সম্পদ ক্ষেত্র সেট করতে হবে এবং ক্ষেত্রের ধরণে মিডিয়া ফাইল নির্বাচনকারী ব্যবহার করতে হবে।

আমি যে সমস্যাটি নিয়ে আসছি তা হ'ল ব্রাউজারটি এটি তৈরি নোডে প্রদর্শন করার জন্য পাচ্ছে, যা আমি বর্তমানে কাজ করছি।

হালনাগাদ

কিছুটা এগিয়ে পেয়েছি। একবার আপনি মিডিয়া ফাইলটি সংরক্ষণ করে (মিডিয়া এপিআই ব্যবহার করে), ফাইল আইডি ফাইল_সেজ_এডিডি () ব্যবহার করে নোড আইডির সাথে যুক্ত করুন । আপনি মিডিয়া সম্পদ ক্ষেত্রটি তৈরি করার সময় সম্ভবত ফাইলটি যুক্ত ক্ষেত্রে যুক্ত করতে হবে।


আপনাকে ফাইল_উসেজ_এডিডি () কল করার দরকার নেই। টেকজমের উত্তরে যেমন দেখানো হয়েছে ঠিক তেমন ফিল্ডে আপনাকে ফাইলটি যুক্ত করতে হবে।
ডেভ রেড

13

আপনার php.ini অনুমতি_url_fopen অনুমতি দেয় তা নিশ্চিত করুন। তারপরে আপনি নিজের মডিউলটিতে এরকম কিছু ব্যবহার করতে পারেন:

$image = file_get_contents('http://drupal.org/files/issues/druplicon_2.png'); // string
$file = file_save_data($image, 'public://druplicon.png',FILE_EXISTS_REPLACE);

পিএইচপি এর ফাইল_জেট_কন্টেন্টস () ফাংশন ব্যবহার করুন

http://www.php.net/manual/en/function.file-get-contents.php

এবং তারপরে ড্রুপাল এপিআই-এর ফাইল_সেভ_ডেটা () ব্যবহার করুন

http://api.drupal.org/api/drupal/includes--file.inc/function/file_save_data/7

তারপরে আপনার এটি ব্যবহার করে কল করতে এবং এটি কোনও নোড ইত্যাদিতে সংরক্ষণ করতে সক্ষম হওয়া উচিত ..

$node = new stdClass;
$node->type = 'node_type';
node_object_prepare($node);
$node->field_image[LANGUAGE_NONE]['0']['fid'] = $file->fid;
node_save($node);

সম্পাদনা:

মন্তব্যে নির্দেশিত হিসাবে, আপনি ফাংশন system_retrieve_file ব্যবহার করতে পারেন দেখুন: https://api.drupal.org/api/drupal/modules!system!system.module/function/system_retrieve_file/7


8
আসলে এর জন্য আরও ভাল এপিআই রয়েছে: system_retrieve_file () $file = system_retrieve_file('http://drupal.org/files/issues/druplicon_2.png', NULL, TRUE, FILE_EXISTS_RENAME);
ডেভ রেড

6

এখানে আমার কাজের উদাহরণ।

$remoteDocPath = 'http://drupal.org/files/issues/druplicon_2.png';
$doc = system_retrieve_file($remoteDocPath, NULL, FALSE, FILE_EXISTS_REPLACE);
$file = drupal_add_existing_file($doc);

$node = new stdClass;
$node->type = 'node_type';
node_object_prepare($node);
$node->field_image[LANGUAGE_NONE]['0']['fid'] = $file->fid;
node_save($node);

function drupal_add_existing_file($file_drupal_path, $uid = 1, $status = FILE_STATUS_PERMANENT) {
  $files = file_load_multiple(array(), array('uri' => $file_drupal_path));
  $file = reset($files);

  if (!$file) {
    $file = (object) array(
        'filename' => basename($file_drupal_path),
        'filepath' => $file_drupal_path,
        'filemime' => file_get_mimetype($file_drupal_path),
        'filesize' => filesize($file_drupal_path),
        'uid' => $uid,
        'status' => $status,
        'timestamp' => time(),
        'uri' => $file_drupal_path,
    );
    drupal_write_record('file_managed', $file);
  }
  return $file;
}

আপনি কেন এটি দিয়ে একটি অস্থায়ী ফাইল তৈরি করছেন system_retrieve_file()এবং তারপরে এটি একটি স্থায়ী হিসাবে সংরক্ষণ করছেন FILE_STATUS_PERMANENT? আমি আপনার কাস্টম ফাংশন এর বিন্দু দেখতে পাচ্ছি না?
mpdonadio

সেভাবে - বড় ফাইল নিয়ে আমার সমস্যা নেই।
হিউগ্রোনফোর

1

এটি সরাসরি উত্তর নয়, তবে নিশ্চিত হয়ে নিন যে আপনি ইতিমধ্যে ফাইলফিল্ড উত্স মডিউল সম্পর্কে জানেন যা সাধারণভাবে চিত্রগুলির জন্য এটি করে। এটি আপনার নিজের প্রয়োজনগুলি পূরণ করতে পারে; মিডিয়াতে এটি কার্যকর কিনা আমি জানি না।


0

@Tecjam উত্তর ছাড়াও হিসাবে: আপনি ব্যবহার করা উচিত drupal_http_request () এর পরিবর্তে file_get_contents () , এটা আপনি প্রক্রিয়া উপর আরো বেশি নিয়ন্ত্রণ দেয়। তবে মোট এই পদ্ধতিটি প্রত্যাশার মতো কাজ করে।


0
// This is a PHP function to get a string representation of the image file.
$image = file_get_contents($path); 

// A stream wrapper path where you want this image to reside on your file system including the desired filename.
$destination = 'public://path/to/store/this/image/name.jpg'; 

$file = file_save_data($image, $destination, FILE_EXISTS_REPLACE);

if (is_object($file)) { // if you get back a Drupal $file object, everything went as expected so make the status permenant
  $file->status = 1;
  $file = file_save($file);
}

return $file;

এই পদ্ধতিটি ব্যবহার করার কোনও কারণ system_retrieve_file()(যা এটি আপনার পক্ষে সব কিছু করে এবং যেখানে সার্ভার file_get_contents()উপলব্ধ নেই সেখানে সমস্যাগুলি এড়ানো হয়)?
ক্লাইভ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.