প্রোগ্রামক্রমে ফাইল সংযুক্ত করা হচ্ছে


25

আমি "গ্যালারী" সামগ্রী প্রকারটি তৈরি করেছি এবং দুটি ক্ষেত্র যুক্ত করেছি: "ফটো," এবং "দস্তাবেজ"। আমি তখন "ডকুমেন্ট" ক্ষেত্রে একটি ফাইল আপলোড করার জন্য নিম্নলিখিত কোডটি ব্যবহার করেছি:

$file = file_save_upload('document', array(
    'file_validate_extensions' => array('txt doc'), // Validate extensions.
));

// If the file passed validation:
if ($file) {
// Move the file, into the Drupal file system
if ($file = file_move($file, 'public://')) {
  $file->status = FILE_STATUS_PERMANENT;
 // $file->file_display = 1;
  $file = file_save($file);

} else {
  $output = t('Failed to write the uploaded file the site\'s file folder.');
}       
 } else {
$output = t('No file was uploaded.');
 }

আমি নীচের কোডটি ব্যবহার করে এই ফাইলটি নোডের সাথে সংযুক্ত করছি:

$customNode->field_document[$customNode->language][0] = (array)$file;

আমি যখন node_submit()ফাংশন কল করি তখন আমি নিম্নলিখিত ত্রুটিটি পাই:

স্বচ্ছতার সীমাবদ্ধতা লঙ্ঘন: 1048 কলাম 'ফিল্ড_ডোকামেন্ট_ডিসপ্লে' নালার হতে পারে না

আমি কী ভুল করছি তা কি কেউ জানেন?

উত্তর:


29

আমি সাধারণত (array)$fileলাইনটি নিক্ষেপ করি না কারণ ফিল্ডের ডেটাগুলির প্রয়োজন কেবলমাত্র ফিড, বিবরণ এবং প্রদর্শন। সুতরাং আমি সাধারণত নিম্নলিখিতটি করি:

$node->field_image[LANGUAGE_NONE][] = array(
  'fid' => $file->fid,
  'display' => 1,
  'description' => '',
);
node_save( $node );

এইভাবে যদি প্রদর্শনের প্রয়োজন হয়, আমি ত্রুটি পাই না। তবে এটাই আমি ...


কেন এটির ডিফল্ট মান নেই তা আমাকে বিভ্রান্ত করছে।
— 32i

আপনি ডিফল্ট মান দেখতে পাচ্ছেন না কারণ এটি সরাসরি অ্যাসাইনমেন্ট।
— লেস্টার পিয়াবডি

7

আপনার সমাধান প্রায় সঠিক; তবে কিছু ক্ষেত্রে এটির জন্য আপনাকে প্রদর্শন এবং বিবরণও সেট করতে হবে।

আপনার কোডটি কাজটি করার জন্য এটি করুন:

$file = file_save_upload('document', array(
    'file_validate_extensions' => array('txt doc'), // Validate extensions.
));

// If the file passed validation:
if ($file) {
// Move the file, into the Drupal file system
if ($file = file_move($file, 'public://')) {
  $file->status = FILE_STATUS_PERMANENT;
 // $file->file_display = 1;
  $file = file_save($file);
  //set the extra values needed to make node_save work
  $file->display = 1;
  $file->description = "";
} else {
  $output = t('Failed to write the uploaded file the site\'s file folder.');
}       
 } else {
$output = t('No file was uploaded.');
 }

2

আমি মনে করি যে এখানে কীটি সেই লাইনগুলি

$file->display = 1;
$file->description = "";

এরিক ভ্যান Eldik হিসাবে চিহ্নিত। আমি ঠিক একই সমস্যাটি নিয়ে লড়াই করছি, কেবল যুক্ত করছি

$file->display = 1;

সাহায্য করেনি, কিন্তু

$file->description = "";

আমার দিন তৈরি।


0

নোডে প্রোগ্রামযুক্তভাবে ফাইল যুক্ত করার জন্য আপনি ব্যবহার করতে পারেন

$managed = TRUE; // Whether or not to create a Drupal file record
$filename = 'public://imdb-cast-' . time() . '.jpg';
$iamge_file = system_retrieve_file($url,$filename , $managed);
if($iamge_file){
$file = file_load(db_query('SELECT MAX(fid) FROM {file_managed}')->fetchField());
$node->field_image['und'][0] = (array) $file;
  }
}

0

এখানেও আমার সমাধানটি পেস্ট করতে চলেছে, আমার একটি নতুন নোড তৈরি করতে হবে এবং প্রোগ্রামিকভাবে একটি চিত্র আপলোড করতে হবে।

$filepath = variable_get('file_public_path') . '/xmas_banner.jpg';
$file_temp = file_get_contents($filepath);
$file_temp = file_save_data($file_temp, file_default_scheme() . '://' .'xmas_banner_nl.jpg', FILE_EXISTS_RENAME);

$node = new stdClass();
$node->type = 'carousel'; // custom content type
$node->title = 'XMAS NL';
$node->field_banner_image['und'][0] = (array) $file_temp;
$node->uid = 1;
$node->status = 0;
$node->active = 0;
$node->promote = 0;
node_save($node);

0

ড্রুপাল 8 এ একাধিক ফাইল সংযুক্ত করুন:

foreach ($fileIds as $fid) {
  $node->field_images[] = [
    'target_id' => $fid,
    'alt' => 'ALT TEXT',
    'title' => 'TITLE TEXT'
  ];
}
$node->save();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.