পরিচালিত ফাইল: ক্ষেত্রটিতে ব্যবহৃত ফাইলটি রেফারেন্স নাও দেওয়া যেতে পারে


39

আমি কিছু বিষয় হচ্ছে managed_file প্রকার। যখনই আমি কোনও ফর্ম সম্পাদনা এবং সংরক্ষণ করার চেষ্টা করি যা এর মধ্যে পরিচালিত_ফায়াল উপাদান রয়েছে তবে ত্রুটি ঘটে: চিত্র ক্ষেত্রে ব্যবহৃত ফাইলটি রেফারেন্স নাও দেওয়া যেতে পারে।

এই কোডটি আমি ব্যবহার করছি:

function foo_form ($form, &$form_state, $foo) {  
  ...     
  $form['file'] = array(
    '#type' => 'managed_file',
    '#title' => t('Picture'),
    '#default_value' => (isset($foo->file->fid) ? $banner->foo->fid : ''),
    '#upload_location' => variable_get('foo_upload_location'),
  );

  if (isset($foo->file)) {
    $form['current_file'] = array(
      '#type' => 'hidden',
      '#value' => $foo->file->fid,
    );
  }
  ...
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Save'),
  );
  return $form;
 }

function foo_form_submit ($form, &$form_state) {
  $foo = (object)$form_state['values'];

  $current_file_set = isset($form_state['values']['current_file']);

  if ($form_state['values']['file'] != 0 && !$current_file_set) {
    // Load the file uploaded in the form.
    $file = file_load($form_state['values']['file']);

    $file->status = FILE_STATUS_PERMANENT;

    file_save($file);

    $foo->file = $file->fid;
  } else if ($form_state['values']['file'] != 0 && $current_file_set) {

    // If we are uploading a different picture, delete the old one and save the
    // new one. If not, don't do anything.
    if ($form_state['values']['current_file'] != $form_state['values']['file']) {
      file_delete(file_load($form_state['values']['current_file']));
      // Load the file uploaded in the form.
      $file = file_load($form_state['values']['file']);

      $file->status = FILE_STATUS_PERMANENT;

      file_save($file);

      $foo->file = $file->fid;
    }
  } else {
    file_delete(file_load($form_state['values']['current_file']));
    $foo->file = null;
  }

  ...
}

আমি মডিউল / ফাইল / file.modulefile_managed_file_ediaate ফাংশন ফিরে ত্রুটি সনাক্ত করেছি কিন্তু ফাইল রেফারেন্স সম্পর্কে কিছুই জানি না।

উত্তর:


39

সমাধানটি হ'ল ফাইল সংরক্ষণ করার পরে file_usage_add এ একটি কল যুক্ত করা । এই কলটি ডাটাবেসে ফাইলটিতে একটি রেফারেন্স যুক্ত করে। File_managed_file_validate ফাংশন রেফারেন্স স্পট করবে এবং ত্রুটি আরম্ভ করা হবে না।

file_usage_add($file, 'foo', 'foo', $foo->id);

এটি পরিচালিত_ফায়ালের উদাহরণের অধীনে ফর্ম এপিআইতে নথিভুক্ত নয় ।

এই সমস্যাটি ড্রুপাল ডকুমেন্টেশন ইস্যুতে আলোচনা করা হচ্ছে: লিঙ্ক


3
+1 সবেমাত্র আমাদের চুল ছিঁড়ে ফেলা হচ্ছে, একটি ফাইল ব্যবহারের রেকর্ড যুক্ত করা সমস্যার সাথে সাথে সমাধান করে। ধন্যবাদ!
ক্লাইভ

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

@ ক্লাইভ টেমপ্লেট সেটিংস থেকে ফাইল সংরক্ষণ সম্পর্কে কি ?! সেই ফাংশনে প্যারামিটার হিসাবে কাজ করার কোনও মডিউল নেই!
সৈয়দবাকআর

1
@ sємsєм কেবল থিমের নামটি ব্যবহার করুন - স্ট্রিংটি নিজেই বৈধ নয়, এটি ট্র্যাক করা জিনিসটির জন্য কেবল কিছু অনন্য হওয়া দরকার - মডিউল নামটি পুরো দ্রুপাল জুড়ে নাম স্পেসিংয়ের জন্য ব্যবহৃত হয় যাতে কনভেনশনটি আটকে যায়
ক্লাইভ

@ ক্লাইভ আপনি কি দয়া করে এই প্রশ্নটি একবার দেখতে পারেন: drupal.stackexchange.com/questions/124373/…
সৈয়দবাকআর
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.