অ্যান্টি_মেডাটাটা_আপনার দিয়ে ফাইল ক্ষেত্রের মান কীভাবে সেট করা যায়


24

সত্তা_মেডাটাটা_আপনার ব্যবহার করার সময় আপনি কীভাবে কোনও ফাইলের ক্ষেত্রের মান সেট করবেন?

আমি কোডে এটি করার চেষ্টা করেছি:

$file = new stdClass();
$file->uid = 1;
$file->uri = $file_path;
$file->filename = basename($file_path);
$file->filemime = file_get_mimetype($file_path);
$file->filesize = filesize($file_path);
$file->status = FILE_STATUS_PERMANENT;
$file->display = '1';
file_save($file); // I also tried: $file = file_save($file);

$node = array(
  'type' => 'news_item',
  'uid' => 1,
  'status' => 1,
  'comment' => 0,
  'promote' => 0,
  'language' => 'en',
);

$entity = entity_create('node', $node);

$ewrapper = entity_metadata_wrapper('node', $entity);

$ewrapper->field_document->set((array) $file); // I also tried: $ewrapper->field_document->set($file);

$ewrapper->save(true);
entity_save('node', $entity);

তবে আমি এই ব্যতিক্রম পাই:

EntityMetadataWrapperException: Invalid data value given. Be sure it matches the required data type and format. in EntityMetadataWrapper->set() (line 122 of C:\wamp\www\drupal\sites\all\modules\entity\includes\entity.wrapper.inc).

কোন সহায়তা খুব মাইচ প্রশংসা করা হয়।

উত্তর:


14

অন্য অ্যারেতে ফাইল অ্যারে মোড়ানো আমার কাছে কৌশলটি মনে হচ্ছে:

$file = (array) $file;
$items = array($file);
$ewrapper->field_document->set($items);

তবে কেন আমি এখনও ...


যে সত্যিই কৌতুক না। আপনার সহায়তার জন্য অনেক ধন্যবাদ, এটি প্রশংসা!
স্মোস

5
আমি বিশ্বাস করি এটির ক্ষেত্রের ডেল্টা সূচকের সাথে কিছু করার আছে। আপনি যদি আপনার ক্ষেত্রের (যেমন $ ewrapper-> ক্ষেত্রের নাম-> সেট ();) ডেল্টা সূচকটি বরাদ্দ না করেন তবে আপনাকে তার চারপাশে অন্য একটি অ্যারেটি মোড়তে হবে। আপনি যদি আপনার ক্ষেত্রের (যেমন $ ewrapper-> ক্ষেত্রের নাম [0] -> সেট ();) একটি ব-দ্বীপ সূচী বরাদ্দ করেন তবে আপনি কেবল $ file = (অ্যারে) $ ফাইলটি ব্যবহার করতে পারেন।
স্মোস

হ্যাঁ এটি অনেক অর্থবোধ করে, অনুসরণ করার জন্য ধন্যবাদ
ক্লাইভ

19

ঠিক আছে, আমি ইমেজ সেট করার একটি সহজ এবং কম কুশ্রী দেখানোর উপায় খুঁজে পেয়েছি ।

$image_file = A FILE OBJECT; //Lot of choices here : new stdClass(), file_load, etc
$wrapper->FIELD_NAME->file->set($image_file);

যেমন ট্যাক্সনমি বা নোড / সত্তা রেফারেন্স, একটি লোড বস্তুর উপর ফাইল ক্ষেত্রের নাম পয়েন্ট, আমি কীভাবে এটি সন্ধান করব তা জানায়।


:: একটি পূর্ববর্তী সম্পাদনা করুন ::

এখানে আমি কীভাবে ওপি প্রশ্নটি করব।

// Get the file
$file = file_save_data(file_get_contents('/my_local_path/img1.jpg'), 'public://remote_name.jpg');

// Wrap' it like one of your French girls
$wrapper = entity_metadata_wrapper('node', $node);

// And set the photo
$wrapper->field_photo->file->set($file);

// And save the node
$wrapper->save();

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

@ পেট্রিকস আপনি কি নিশ্চিত যে আপনি কোনও ফাইল অবজেক্ট তৈরি করেছেন? ক্লাইভ থেকেও কি পদ্ধতি কার্যকর হয়নি?
জুডাপ্রাইস্ট

আমি কিছু জুমলা বিষয়বস্তুকে দ্রুপালে স্থানান্তরিত করার চেষ্টা করছি। আমি প্রথমবার ফাইলগুলি স্থানান্তরিত করি, এটি কার্যকর হয়। আমি যদি সমস্ত পণ্য মুছে ফেলে অন্য একটি স্থানান্তর চেষ্টা করি তবে এটি আর কাজ করে না। আমি এটি কাজ করার একমাত্র উপায় হ'ল একটি নতুন ইনস্টল। আমি জেওএসএল ফাইলে জুমলা ডেটা সংরক্ষণ করেছি, যা সত্ত্বা তৈরি করতে আমি ব্যবহার করি। আমি মন্তব্যটি ছেড়ে দেওয়ার সময়, আমি এখনও বুঝতে পারি নি যে কেবলমাত্র প্রথম আমদানি কাজ করছে এবং সত্ত্বা তৈরির জন্য আমি সমস্ত ধরণের পদ্ধতি চেষ্টা করে যাচ্ছি। আমি ইমেজ বাদে সমস্ত ক্ষেত্র তৈরি করতে সক্ষম হওয়ায় কী চলছে তা আমার কোনও ধারণা ছিল না!
প্যাট্রিকস

1
new stdClass()মন্তব্য আমাকে একটু ভুল পথে চালিত অভিমানী আমি সরাসরি একটি ক্ষেত্র করার জন্য একটি নতুন তৈরি করা ফাইল বস্তুর বরাদ্দ পারে। এটি ব্যবহার করার সময়, নিশ্চিত হয়ে নিন যে ফাইলটির একটি ফিড নির্ধারিত হয়েছে (যেমন এটি কমপক্ষে একবারে সংরক্ষণ করা হয়েছে), অন্যথায় এটি কাজ করবে না।
নেওগ্রাফ 734

আপনি একাধিক ফাইল ক্ষেত্রের জন্য এটি কীভাবে প্রয়োগ করবেন? আমি মনে করি এটির মতো কিছু হওয়া উচিত $wrapper->field_photo[]->file->set($file)তবে আমি নিশ্চিত নই। আপনি কি কখনও এই পরিস্থিতিতে সম্মুখীন হয়েছে?
মিকুয়েল কোরিয়া ক্যাসাব্লাঙ্কা

5

আমার নোড ইতিমধ্যে বিদ্যমান ছিল এবং আমাকে নিম্নলিখিত পরামিতিগুলি সেট করতে হয়েছিল:

$wrapper->field_pdf->set(array('fid'=>$fid, 'display'=>1, 'description'=>'This is a PDF'));

আমি মনে করি বিভিন্ন সেট আপগুলির জন্য বিভিন্ন প্যারামিটারের প্রয়োজন হতে পারে। আপনি যদি নিজের ত্রুটিযুক্ত লগগুলি দেখতে পান (অ্যাডমিন / রিপোর্টস / ডিবি্লগ) আপনি দেখতে পারেন কোন প্যারামিটারগুলির প্রয়োজন।


1
এটি আমার পক্ষে কাজ করেছে। আমি কোনও সমস্যা ফাইলের ক্ষেত্র যুক্ত করতে পারে, কিন্তু এটি কোনও কারণে displayছিল না হিসাবে প্রদর্শিত হবে 0
12 এরিডে পুরোপুরি

0

যদি কেউ এই সহায়ক খুঁজে পান তবে:

যদি আপনার কাছে আসল ফাইল হ্যান্ডেল না থাকে এবং কেবলমাত্র fidআপনি কী ব্যবহার করতে পারেন তা জানেন :

$wrapper->field_file->set( array( 'fid'=>1234 ) );

এবং (সেই ফিডের সাথে একটি ফাইল অনুমান করে) ড্রুপাল সঠিক ফাইলটি সংযুক্ত করবে $wrapper->save()


0

এটি করার জন্য আপনার দুটি উপায় রয়েছে:

// By loading the file object in any way
$file_obj = file_load($fid);
$w_containing_node->field_attachment_content->file->set( $file_obj );


// By passing an array with the fid
$w_containing_node->field_attachment_content->set( array('fid' => $fid) );

তথ্যের উত্স এখানে: https://www.drupal.org/docs/7/api/entity-api/entity-metadata-wrappers#example-value-set-save

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