প্রোগ্রামের ভিত্তিতে কোনও ক্ষেত্রের মান আপডেট করুন


14

নোড আপডেট হওয়ার পরে আমি নোডের ক্ষেত্রের মান আপডেট করতে চাই।

এখানে উল্লিখিত কোডটি ব্যবহার করে চেষ্টা করার চেষ্টা করুন প্রোগ্রামটিভভাবে একটি নোড ড্রুপাল 8 আপডেট করুন

use Drupal\node\Entity\Node;

    function hello_world_entity_presave(Drupal\Core\Entity\EntityInterface $entity) {

      $check = \Drupal::routeMatch()->getParameter('node');

      if ($check) {
      $node = Node::load($check->nid->value);
      $node->title->value = 'testing';     //set value for field
      $node->save();
      }
    }

তবে এটি কার্যকর হয়নি। নোড সংরক্ষণের পরে আমি একটি 500 ত্রুটি পেয়েছি। আমি এফ স্টেটমেন্টটি বের করে নোড আইডি নির্দিষ্ট করে দেওয়ার চেষ্টাও করেছি$node = Node::load(1);

আমি ড্রুপাল 8-তে প্রোগ্রামে কোনও নোড / সত্তা আপডেট করার চেষ্টা করেছি

use Drupal\node\Entity\Node;


function hello_world_node_update(Drupal\node\NodeInterface $node) {

$node = Node::load(1);
$node->set("title", 'New value'); // also tried $node->setTitle('The new Title');
$node->save();

}

তবে ভাগ্যও নেই।

তদতিরিক্ত, আমি বিভিন্ন হুক সত্তা_প্রেশেভ, সত্তা_সংশ্লিষ্ট, নোড_আপডেট ব্যবহার করার চেষ্টা করেছি, তবে কোনও পার্থক্য হয়নি।

উত্তর:


25

আপনি এই কোড চেষ্টা করতে পারেন:

function MODULE_NAME_node_presave(Drupal\node\NodeInterface $node) {
  $node->setTitle('new Title');
  $node->set('body', 'this is body');
}

ধন্যবাদ এটি কাজ করেছে, অন্য কেউ যদি অন্য সম্ভাব্য প্রকরণগুলি যুক্ত করতে চান তবে অন্য উত্তর যুক্ত করতে নির্দ্বিধায়।
কোনও এসসিওয়েট

1
@ নো এসওয়েট: আমি কি ঠিক ধরে নিচ্ছি যে এই উত্তরটিতে প্রদর্শিত কোডটিতে "বডি" যুক্ত রেখাটি আপনার প্রশ্নের উত্তর দেওয়ার জন্য সত্যই প্রয়োজন নেই? এবং এই লাইনটি বরং চিত্রিত করে যে কীভাবে আপনি (যেমন) শরীরের সাথে একই রকম কাজ করতে পারেন? এছাড়াও, যেহেতু আপনার প্রশ্নটি একটি "ক্ষেত্র" সম্পর্কে ছিল, আপনি কি মেশিনের নাম (বলুন) ফিল্ড_মাই_েক্সট্রা_ফিল্ডের সাথে একটি কাস্টম ফিল্ডের জন্য "বডি" এর সাথে রেখার অনুরূপ লাইনটি ব্যবহার করতে পারেন? নতুন প্রশ্ন জিজ্ঞাসার জন্য হাইজ্যাক করার মত কি মনে হচ্ছে এর জন্য দুঃখিত, তবে একটি উত্তরে কেবল "কোড দেখানো" (মোটামুটি কোনও ব্যাখ্যা ছাড়াই) এখানে প্রায় ভাল অনুশীলন হিসাবে ধরা হয় না, তাই না?
পিয়ের.ভ্রিয়েন্স

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

আমি এই হুক আগুন পেতে পারি না। আমি একটি সামগ্রীর ধরণ সম্পাদনা করি, জমা দিন ক্লিক করুন, কিন্তু কিছুই না।
মিঃ পাবলো

7

আপনি যে হুকটি মূলত ব্যবহারের চেষ্টা করেছিলেন তা ব্যবহার করে এটি অন্য একটি পরিবর্তন।

আমি মনে করি আপনার কোডে সমস্যাটি হ'ল আপনি নোডের একটি নতুন উদাহরণ লোড করার চেষ্টা করছেন তবে আপনার প্যারামিটার হিসাবে সরবরাহ করা নোডটি ব্যবহার করা উচিত $entity:

use Drupal\node\NodeInterface;

function hello_world_entity_presave(Drupal\Core\Entity\EntityInterface $entity)   {
  if ($entity instanceof NodeInterface) {
    $entity->title->value = 'testing';     //set value for field
    // $entity->save(); (not needed)
  }
}

সম্পাদনা:

কোডটিতে ব্যবহারের বিবৃতি যুক্ত করা হয়েছে।


1
কেবল আপনার কোডটি চেষ্টা করে দেখুন, তবে এটি সাইটটি ভেঙে The website encountered an unexpected error. Please try again later.
ক্লাসিকটি পেয়েছে

1
এই কোডটি কেবল হুকটি কীভাবে ব্যবহার করতে হয় তা প্রদর্শনের জন্য। আপনার সঠিক ব্যবহারের বিবৃতি প্রয়োজন। আপনি নজরদারি (/ অ্যাডমিন / রিপোর্টস / ডিবি্লগ) সন্ধান করলে আপনি এটি খুঁজে পেতে পারেন can
কে 4

1
use Drupal\node\NodeInterface;কোড যুক্ত করার পরে আর অটোটি সাইটে ব্রেক হয় না, তবে নোডটি সংরক্ষণ করার পরে, আমি 500 টি ত্রুটি পেয়েছি যেমন আমি আমার প্রশ্নে যাচ্ছিলাম এবং লগগুলি এ সম্পর্কে কোনও লগইন করছে না।
কোনও এসসিওয়েট

1
আমি কেবল সমস্যার দিকে ইঙ্গিত করতে চেয়েছিলাম: নোডের কোনও নতুন উদাহরণ লোড করবেন না, তবে ফাংশন প্যারামিটার হিসাবে প্রদত্ত একটিটি ব্যবহার করুন। 500 এর পিছনে কী ত্রুটি? দয়া করে আপনার লগ ফাইলগুলি পরীক্ষা করুন বা ত্রুটিযুক্ত লগিং স্যুইচ করুন।
4k4

1
আমি লগটি সাফ করেছি, সুতরাং আমি অন্যান্য সমস্ত ত্রুটিগুলির সাথে বিভ্রান্ত হব না, তবে একাধিকবার ত্রুটিটি সংরক্ষণ এবং পাওয়ার পরে লগ ফাইলগুলি খালি রয়েছে
No Sssweat

3

ড্রুপাল 8-এ শিরোনামগুলি মানক ক্ষেত্রের মতো সেট করা নেই; তাদের নিজস্ব ফাংশন রয়েছে। $node->setTitle('New Title');নোডের $entity->setLabel('New Title');জন্য বা জেনেরিক সত্তার জন্য ব্যবহার করুন । দেখুন নোড :: setTitle আরও তথ্যের জন্য।

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