সামগ্রীর ধরণে একটি নতুন ক্ষেত্র যুক্ত করার পরে একটি ডিফল্ট ক্ষেত্রের সাথে সমস্ত নোড আপডেট করুন


15

আমার কাছে প্রচুর নোড সহ বিদ্যমান সামগ্রীর ধরণ রয়েছে। আমি "অফ" এর ডিফল্ট মান সহ একটি নতুন বুলিয়ান ক্ষেত্র যুক্ত করেছি।

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

ক্ষেত্রটি যুক্ত করার আগে তৈরি ক্ষেত্রটিকে তার ডিফল্ট মান হিসাবে সেট করতে আমি কীভাবে বিদ্যমান নোডগুলি আপডেট করতে পারি?


: আমি দেখেছে অপারেশনস এবং বিধি বাল্ক হিসাবে এই চমত্কার ভিডিও রূপরেখা ব্যবহার করে এই সমস্যার সমাধান commerceguys.com/resources/articles/217
Danh

পুনরায় সংরক্ষণ নোড মডিউল আপনাকে নোডগুলি জোর করতে সাহায্য করতে পারে।
সুপ্রিয়া রাজগোপাল

উত্তর:


9

দুঃখের বিষয়, এটি করার খুব সহজ কোনও উপায় নেই (ভিবিও / বিধিগুলি ছাড়াও), তবে আমার কাস্টম মডিউলটি ইনস্টল করা ফাইলগুলিতে আপডেট ফাংশনগুলিতে আমি যে কোডটি ব্যবহার করি তা এখানে একটি নতুন ক্ষেত্র যুক্ত করার পরে যখন আমাকে কোনও নির্দিষ্ট নোড টাইপের জন্য ফিল্ড মানগুলি প্রপোপুলেট করতে হয় ( এই ক্ষেত্রে, 'পৃষ্ঠা' নোড):

<?php
// Get all nodes of 'page' type, populate the field with a value of '1'.
$pages = db_query("SELECT nid, vid FROM {node} WHERE type = 'page'")->fetchAllAssoc('nid');
foreach ($pages as $nid => $values) {
  $fields = array(
    'entity_type' => 'node',
    'bundle' => 'page',
    'deleted' => 0,
    'entity_id' => $values->nid,
    'revision_id' => $values->vid,
    'language' => LANGUAGE_NONE,
    'delta' => 0,
    'field_page_new_field_value' => 1,
  );
  db_insert('field_data_field_page_new_field')
    ->fields($fields)
    ->execute();
  db_insert('field_revision_field_page_new_field')
    ->fields($fields)
    ->execute();
}
?>

এই উত্তরে উল্লিখিত অন্য একটি ম্যানুয়াল পদ্ধতিতে এন্টিফিল্ডকিউরি ব্যবহার করা হয় এবং প্রতিটি নোড লোড / সংরক্ষণ করে। আরও দ্রুপাল-ওয়াই, তবে কম পারফর্মেন্ট ... (প্রতিটি নোডের জন্য একটি সম্পূর্ণ নোড লোড এবং সেভ অপারেশন প্রয়োজন!)।


এটি অত্যন্ত দুঃখজনক
অ্যালেক্সভ্যালিজো

আপনি কি ফিল্ড ডিফল্ট মডিউলটি দেখেছেন? dgo.to/field_defaults
বন

সত্তা লোড ক্যাশে থেকে সমস্ত আক্রান্ত নোডগুলি ফ্লাশ না করেই এই জাতীয় কোড চালানো একটি ত্রুটি : entity_get_controller('node')->resetCache($nids);- অন্যথায় পরবর্তীকালে node_load()ক্যাশে থেকে বাসি ডেটা লোড হতে পারে এবং node_save()object অবজেক্টের যে কোনওটি সেই স্ট্যাল ডেটা ডাটাবেসে ফিরে লিখতে পারে।
ফিল্ডস

2

সেরা বেটটি সরাসরি মাইএসকিউএল হয়। টেবিলগুলি দেখতে এমন হবে:

field_data_field_newbooleanfieldname
field_revision_field_newbooleanfieldname

আপনি যদি তাদের দিকে লক্ষ্য করেন তবে এটি বেশ সোজা - কোয়েরিটি দেখতে কেমন হবে বা আপনি এখান থেকে ঠিক আছেন আপনি কি শুরু করতে চান?


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

বুঝতে পারছিল না। আমি একই অবস্থানে রয়েছি, আমি অন্য সিএমএস থেকে প্রায় 30,000 নিবন্ধ দ্রুপাল-তে স্থানান্তরিত করছি। এসকিউএল দ্রুত এবং নোংরা হওয়ার সময় আমি আর একটি মডিউল যুক্ত করার পয়েন্টটি দেখিনি। হতে পারে আপনি একটি দ্রুত ফাংশনও লিখতে পারেন যা আপনার সমস্ত নোডের জন্য নোড_লোড () কল করবে, এটিও কার্যকর হতে পারে।
মাইক

0

নিখুঁত যুক্তি চেষ্টা করুন। এটি খুব দ্রুত এবং এর দ্বারা সমস্ত হুক বাস্তবায়নও পাস করে। আরও বিশদ । সমস্ত নিডস পেতে এবং এই নমুনা কোডটি দিয়ে এটিকে লুপ করতে আপনি একটি সাধারণ সরাসরি db_select ক্যোয়ারী লিখতে পারেন।

$node = new stdClass();
$node->nid = $val;
$node->type = 'NODETYPE';
$node-field_whatever[LANGUAGE_NONE][0]['value'] = 'VALUE';
field_attach_presave('node', $node);
field_attach_update('node', $node);

0

ক্ষেত্রের মানটি সেট না করে নোডগুলি বিবেচনা করে এসকিউএল ব্যবহার করে

SELECT nid,vid
 from node where type='procedure' and nid not in (select entity_id from field_data_field_pr_choix_du_document)

ফিল্ড_ডেটা_ফিল্ড_প্রি_কিক্স_ডু_ডোকামেন্টটি আমার ক্ষেত্রের সাথে সম্পর্কিত টেবিল হিসাবে এবং সত্তা আইডি সহ একটি এন্ট্রি সমান মান সেট করে নোডকে রেফিনেং করে

আমি এসকিউএল সন্নিবেশ ব্যবহার করেছি ... সিনট্যাক্স নির্বাচন করুন

https://dev.mysql.com/doc/refman/5.5/en/insert-select.html

INSERT INTO `field_data_field_pr_choix_du_document` (`entity_type`, `bundle`, `deleted`, `entity_id`, `revision_id`, `language`, `delta`, `field_pr_choix_du_document_value`)
SELECT 'node','procedure',0,nid,vid,'und',0,'Importer un document'
from node where type='procedure' and nid not in (select entity_id from field_data_field_pr_choix_du_document)

0

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

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

পড়ুন

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

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

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

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


0

আমি এই মডিউলটির সাথে সামগ্রী প্রকারে ক্ষেত্র (গুলি) আপডেট করার সহজ উপায় খুঁজে পেয়েছি: ফিল্ড ডিফল্ট

স্ক্রিন শট দেখুন। আপনি ডিফল্ট মান (গুলি) সহ বিদ্যমান সামগ্রী আপডেট করতে পারেন বা বিদ্যমান মান রাখতে পারেন।

আমি এটি ডি 7 তে পরীক্ষা করেছি এবং এটি কাজ করে।

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

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