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


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.