বাল্ক ফিল্ড আপডেট?


35

আমি একটি ড্রুপাল 7 সামগ্রী প্রকারে একটি নতুন (পাঠ্য) ক্ষেত্র যুক্ত করেছি যা ইতিমধ্যে অনেকগুলি নোড রয়েছে।

এই সমস্ত নোডের জন্য আমি কীভাবে ক্ষেত্রটি একটি ডিফল্ট মান দিয়ে পূরণ করতে পারি?

উত্তর:


37

আপনি EntityFieldQueryনোডের একটি তালিকা পুনরুদ্ধার করতে ব্যবহার করতে পারেন , তারপরে নোডের ক্ষেত্রগুলি আপডেট করুন node_save():

$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type

$query = new EntityFieldQuery;
$result = $query
  ->entityCondition('entity_type', 'node')
  ->propertyCondition('type', $node_type)
  ->execute();

if (!empty($result['node'])) {
  $nodes = entity_load('node', array_keys($result['node']));

  foreach($nodes as $node) {
    // Replace field_foo with the machine name of the field to update.
    // - 0 refers to specific value within the field array, for when the field contains
    //    multiple values. If the field only has one value, it should be 0.
    $node->field_foo[$lang][0]['value'] = 'New Value';
    node_save($node);
  }
}

যদি এটি ওয়ান অফ অফ অপারেশন হয় তবে উপরেরটি চালাতে আপনি ডিভেল মডিউলটির এক্সিকিউট পিএইচপি ফাংশনটি ব্যবহার করতে পারেন : অন্যথায়, আপনি একটি সাধারণ কাস্টম মডিউল তৈরি করতে পারেন।


2
দেভেল বা ভিবিও ব্যবহারের পাশাপাশি উপরের কোডটি সম্পূর্ণ বুটস্ট্র্যাপযুক্ত পরিবেশে কার্যকর করতে আপনি "ড্রশ স্ক্রের মাইক্রিপ্ট.এফপি" ব্যবহার করতে পারেন।
ফাইটসারউইন

এই কোডটি কীভাবে একটি টার্ম রেফারেন্স ক্ষেত্রে একই ক্রিয়াকলাপ সম্পাদনের জন্য পরিবর্তন করতে পারে?
স্ক্রিনাক

17

আমি ভিউজ বাল্ক অপারেশনগুলি ব্যবহার করব এবং উপরের আইটেমগুলি মূলত করানোর জন্য "সালিসি পিএইচপি স্ক্রিপ্ট এক্সিকিউট করুন" ব্যবহার করব তবে আপনাকে সমস্ত অতিরিক্ত কোড করতে হবে না, কেবলমাত্র একটি ছোট্ট স্নিপেট যা আপনি চান (পছন্দ করুন $object->field_foo['und'][0]['value'] = 'some_value') করে


9

আপনি যদি কিছু মান সহ কেবলমাত্র ক্ষেত্রটি আপডেট করতে চান তবে গৃহীত উত্তরের আরও পারফরম্যান্ট বিকল্প হ'ল:

$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type

$query = new EntityFieldQuery;
$result = $query
  ->entityCondition('entity_type', 'node')
  ->propertyCondition('type', $node_type)
  ->execute();

if (!empty($result['node'])) {
  $nodes = entity_load('node', array_keys($result['node']));

  foreach($nodes as $node) {
    // Replace field_foo with the machine name of the field to update.
    // - 0 refers to specific within the field array, for when the field contains
    //    multiple values. If the field only has one value, it should be 0.
    $node->field_foo[$lang][0]['value'] = 'New Value';
    field_attach_presave('node', $node);
    field_attach_update('node', $node);
  }
}

পার্থক্যটি হ'ল সরাসরি field_attach_presaveএবং field_attach_updateফাংশনগুলি ব্যবহার করে যা সঠিকভাবে কেবল নোড ফিল্ড আপডেট করে এবং নোড সংরক্ষণের বাকী প্রক্রিয়াটি বাদ দেয়। এর প্রভাব রয়েছে যে কোনও নোড প্রিভেভে / সেভ হুকস বলা হবে না, "পরিবর্তিত" তারিখটি বর্তমান তারিখে আপডেট করা হবে না etc. আপনার ব্যবহারের ক্ষেত্রে এটি পুরো নোড_সেভ () প্রক্রিয়াটি ব্যবহার করার চেয়ে ভাল।


4

আসলে ভিবিও (ভিউজ বাল্ক অপারেশনস) একটি ভাল সমাধান। তদতিরিক্ত, সর্বশেষতম সংস্করণগুলির সাথে, আপনি একটি বিকল্প "সত্তা মানগুলি সংশোধন করুন" পাবেন যা একটি ক্রিয়ায় নোডের ভাষা আপডেট করার জন্য খুব সহজ উপায় সরবরাহ করে।


2

ভিউজ বাল্ক অপারেশন মডিউলটি ইনস্টল এবং সক্ষম করুন এবং একটি পৃষ্ঠা প্রদর্শনের সাথে একটি দর্শন তৈরি করুন।

যোগ করুন => বাল্ক অপারেশন: সামগ্রী হিসাবে সামগ্রী (সামগ্রী) ক্ষেত্র।

পড়ুন

এখানে চিত্র বর্ণনা লিখুন

আপনি ডিফল্ট মান সেট করতে চান এমন ক্ষেত্রগুলি নির্বাচন করুন।

আপনার ক্ষেত্রে এটির শিরোনাম। ছবিতে এটি ট্যাগ।

দৃশ্যটি সংরক্ষণ করুন এবং এটি তৈরি করা পৃষ্ঠায় যান। যদি ফলাফলের একাধিক পৃষ্ঠাগুলি থাকে তবে আপনি বর্তমান পৃষ্ঠায় সমস্ত আইটেম, সমস্ত পৃষ্ঠার সমস্ত আইটেম বা আপনি ম্যানুয়ালি পৃথক নোডের সাথে সম্পর্কিত বাক্সগুলি চেক করতে পারেন। কমপক্ষে একটি চেকবক্স অবশ্যই এগিয়ে যেতে চেক করা উচিত।

এখন আপনি ডিফল্ট মান সেট করুন এবং এটি সংরক্ষণ করুন।

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