নোডের জন্য ক্ষেত্রের মান কীভাবে আপডেট করবেন?


21

আমি নোডের জন্য একটি ক্ষেত্রের মান পরিবর্তন করতে চাই I আমি নিম্নলিখিত কোডটি ব্যবহার করেছি:


$node = node_load($nid); // $nid is the function's parameter
$node->field['field_myfield'][$node->language][0]['value'] = 1;
node_save($node);

সমস্যাটি এর মধ্যে থাকা অবস্থায় $node->languageফিরে আসে । নোড অ্যারেতে থাকা থেকে আলাদা কেন এবং আমি কীভাবে এটি পেতে পারি?esprint_r($node)und$node->language

উত্তর:


41
$node = node_load($nid);
$node_wrapper = entity_metadata_wrapper('node', $node);
$node_wrapper->field_myfield->set(1);
$node_wrapper->save();

নোডে ক্ষেত্রগুলির মান সেট বা পড়ার জন্য সত্তা মেটাডাটা র‌্যাপার একটি দুর্দান্ত উপায়!


আমি সত্তা_মেডটাটা_আপনার বিসি পছন্দ করি এটি জিনিসগুলি সুন্দর এবং পরিষ্কার করে তোলে। অজান্তেই অ্যান্টিটি_মেটাডেটা_রাপ্পার () এ NUL পাস করার সময় কোনও নোংরা ত্রুটি এড়ানোর জন্য নোড_লোড () এর পরে $ নোড রয়েছে কিনা তা আমি একটি চেক অন্তর্ভুক্ত করব।
টেক্সাস-ব্রোনিয়াস

আপনি সরাসরি M nidটি EMW এ যেতে পারেন to
নওফাল

সত্তা_মেডাটাটা_আপনার ব্যবহার করা গ্রহণযোগ্য উত্তর হওয়া উচিত।
একলতা

2
ক্ষেত্রে এটি অন্যদের কাছে সুস্পষ্ট নয়, entity_metadata_wrapper () সত্তা এপিআই মডিউল অংশ বিশেষ: drupal.org/project/entity
BWPanda

9

field_attach_update()ফাংশন চেষ্টা করুন ।

$node = node_load($nid); // $nid is the function's parameter
$node->field['field_myfield'][LANGUAGE_NONE][0]['value'] = 1;
field_attach_update('node', $node);

এটি ক্ষেত্রটির মান আপডেট করবে এবং এটি এর চেয়ে ভাল পারফর্ম করবে node_save


1
কেন ফিল্ড_ট্যাচ_আপডেটটি ডাউনভোটেড?
দুধভস্কি

6
$node = node_load($nid); 
$field_language = field_language('node', $node, 'field_myfield');
$node->field['field_myfield'][$field_language][0]['value'] = 1;
node_save($node);

4

আপনি যদি কেবলমাত্র ক্ষেত্রের মান আপডেট করতে চান (আপডেট সময় সম্পর্কিত নোড মেটাডেটা আপডেট না করে, পুনর্বিবেচনাগুলি) ব্যবহার করুন field_attach_update()

উদাহরণ:

$node = node_load($nid);
$field_language = field_language('node', $node, 'field_myfield');
$node->field_fieldname[$field_language][0]['value'] = 'some value';
field_attach_update('node', $node);

কখনও কখনও অতিরিক্ত হিসাবে আপনি নোড স্ট্যাটিক ক্যাশে এটি পুনরায় সেট করতে হবে resetCache(array($nid)):

entity_get_controller('node')->resetCache(array($node->nid));

উত্স: নোডটি নিজেই সংরক্ষণ না করে নোডের ক্ষেত্রগুলি সংরক্ষণ করা হচ্ছে


2

আমি সবেমাত্র এটি বাস্তবায়ন করেছি এবং দেখেছি যে এই কোডটি আমার পক্ষে কাজ করেছে।

$node = node_load($nid); 
if (isset($node)) {
  $field_language = field_language('node', $node, 'field_myfield');
  $node->field_fieldname[$field_language][0]['value'] = 'some value';
  node_save($node);
}

নোট করুন যে আমি ফিল্ড_ফিল্ডের নাম আপডেট করার সময় আমি খুঁজে পেয়েছি যে এটি 4 লাইনে ব্যবহার করছে using

$node->field['field_myfield'][0]['value'] = 'some value';

এটা কাজ করছে না.

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