প্রোগ্রামগতভাবে নোড তৈরি করুন


34

আমি কীভাবে প্রোগ্রামে ডেট এবং ইমেজ ফিল্ড সহ নোড তৈরি করতে পারি?

আমি জানি আমি নিম্নলিখিত কোড সহ ড্রুপাল 7 এ এটি করতে পারি।

global $user;

  $node = new stdClass();
  $node->title = "YOUR TITLE";
  $node->type = "YOUR_NODE_TYPE";
  node_object_prepare($node); // Sets some defaults. Invokes hook_prepare() and hook_node_prepare().
  $node->language = LANGUAGE_NONE; // Or e.g. 'en' if locale is enabled
  $node->uid = $user->uid; 
  $node->status = 1; //(1 or 0): published or not
  $node->promote = 0; //(1 or 0): promoted to front page
  //image field
  $existing_filepath = "/home/nzcodarnoc/sites/default/files/imported/picture.jpg"
  $new_filepath = "public://picture.jpg"
  // Create the file object
  $drupal_file = file_save_data(file_get_contents($existing_filepath), $new_filepath);
  $drupal_file->alt = $node->title;
  $drupal_file->title = $node->title;
  // Assign the file object to the node, as an array
  $node->field_my_file[$node->language][0] = get_object_vars($drupal_file);
  //date field
  $node->birth_date[LANGUAGE_NONE][0]['value'] = time();  
  $node = node_submit($node); // Prepare node for saving
  node_save($node);

দ্রুপাল 8 এর সমমানের কোডটি কী?


এই থ্রেড দয়া করে চেক করুন drupal.org/node/178506
Aryashree Pritikrishna

নোড :: তৈরি করুন (ode নোড_ডাটা_আররে) -> সংরক্ষণ করুন ()
এয়াল

@ আইয়াল দয়া করে আরও বিশদ সরবরাহ করুন futureএ প্রশ্নটি ভবিষ্যতে খুব বেশি উল্লেখ করা হয়
ইউসুফ

উত্তর:


56

নিম্নলিখিত কোড আপনাকে একটি নতুন নোডে একটি চিত্র সংরক্ষণ করতে সহায়তা করবে।

use \Drupal\node\Entity\Node;
use \Drupal\file\Entity\File;

// Create file object from remote URL.
$data = file_get_contents('https://www.drupal.org/files/druplicon.small_.png');
$file = file_save_data($data, 'public://druplicon.png', FILE_EXISTS_REPLACE);

// Create node object with attached file.
$node = Node::create([
  'type'        => 'article',
  'title'       => 'Druplicon test',
  'field_image' => [
    'target_id' => $file->id(),
    'alt' => 'Hello world',
    'title' => 'Goodbye world'
  ],
]);
$node->save();

আরও তথ্যের জন্য, দেখুন http://realityloop.com/blog/2015/10/08/programmatically-attach-files-node-drupal-8


এই নির্দিষ্ট উদাহরণে, আমাদের In দ্রুপাল \ ফাইল \ সত্তা \ ফাইলের প্রয়োজন নেই কারণ আমরা সরাসরি ইন্টারনেট থেকে চিত্র ফাইলটি পাই। তবে আপনি যদি এই লিঙ্কটি রিয়েলটিওলপ.com / blog / 2015 /10/ 08/ … দেখতে পান তবে সেখানে আপনি ফাইল সত্তার ব্যবহারের উদাহরণ পাবেন, // স্থানীয়ভাবে অনুলিপি করা ফাইল থেকে ফাইল অবজেক্ট তৈরি করুন। $ ইউরি = ফাইল_ম্যানেজড_কপি ('সর্বজনীন: //source.jpg', 'সর্বজনীন: //destination.jpg', FILE_EXISTS_REPLACE); $ ফাইল = ফাইল :: তৈরি করুন (['ইউরি' => $ ইউরি,]); $ file-> সংরক্ষণ করুন ();
অ্যামিটগয়েল

উদাহরণ চিত্র বিদ্যমান নেই। এইটি করে: drupal.org/files/druplicon-small.png
কারি ক্যারিয়িনেন

13

ড্রুপাল 8 সত্তা অবজেক্টস এবং যেমন, একটি সত্তা তৈরি করা সত্তার ধরণের শ্রেণীর একটি উদাহরণ তৈরি করা। আপনি যদি সত্তার শ্রেণিটি জানেন তবে আপনি হয় নতুন কীওয়ার্ডটি ব্যবহার করতে পারেন বা তৈরি ফাংশনটি ব্যবহার করতে পারেন।

আইই $foo = new Foo();বা$foo = Foo::create();

আপনি যদি সত্তার শ্রেণিটি না জানেন (কেবলমাত্র মেশিনের নাম) তবে আপনি অনুরোধটি স্টোরেজ ক্লাসটি ব্যবহার করতে পারেন: \Drupal::entityTypeManager()->getStorage($entity_type_id)->create();

কোনও সত্তার ক্ষেত্রগুলি স্থাপন করতে আপনি হয় $entity->set($key, $value)সত্তা অবজেক্টে পদ্ধতিটি ব্যবহার করতে পারেন বা সত্তা key=>valueনির্মাতার কাছে একটি অ্যারে পাস করতে পারেন। যেমন:

$foo = new Foo([
  'name'=>'bar',
  'baz'=> TRUE,
  'multi_value' => [
    'first',
    'second',
    'third',
  ]
]);

কোনও সত্তা সংরক্ষণ করতে আপনাকে কেবল $entity->save()সত্তা অবজেক্টে পদ্ধতিটি কল করতে হবে ।

যেহেতু ড্রপাল ৮-এ থাকা ফাইলগুলিও সেই সত্তা হয় আপনাকে ফাইল সত্তার আইডি, বা আসল ফাইল সত্তাকে মান হিসাবে পাস করতে হবে।

$file_1 = File::load(1);
$foo->set('bar_files', [
  $file_1,
  2
]);

আপনার নির্দিষ্ট দৃশ্যের জন্য এখানে একটি কোড রয়েছে:

$node_entity_type = \Drupal::entityTypeManager()->getDefinition('node');
// The [file_save_upload][1] function returns an array of all the files that were saved.
$poster_images = file_save_upload($upload_name, $validators, $destination);
$node = new Node([
  $node_entity_type->getKey('bundle') => 'movie',
  $node_entity_type->getKey('label') => 'Foo',
  'field_release_date' => '1/1/2015',
  'field_poster_image' => $poster_images,
]);
$node->save();

আমি একটি চিত্র ক্ষেত্র এবং একটি তারিখ এফফিল্ড যুক্ত করতে চাই, এই ক্ষেত্রের প্রকারের সাথে আপনার উত্তর সরবরাহ করুন।
ইউসুফ

তবে নোড তৈরির সময়, ড্রুপাল 8-তে প্রোগ্রামযুক্ত পাঠ্য ক্ষেত্রগুলি কীভাবে পপুলেট করা যায়?
ডাব্লুএম

Ode node_data এর ডেটা সরাসরি নোড ক্ষেত্রে ম্যাপ করা হয়। আপনি যদি ক্ষেত্র_দেহী নামে একটি ক্ষেত্রে পাঠ্য যুক্ত করতে চান তবে কী ক্ষেত্র_দেহের সাথে অন্য একটি এন্ট্রি যুক্ত করুন।
ইয়াল

আমি আমার বিবরণ আরও বিশদ সহ আপডেট করেছি। আপনি স্বাগত জানাই।
আইয়াল

1
আমার উত্তর আপডেট করেছে
ইয়াল

12

আমি মনে করি যে অবজেক্ট ওরিয়েন্টেড উপায় আরও সুবিধাজনক, তাই না?

use Drupal\node\Entity\Node;

$my_article = Node::create(['type' => 'article']);
$my_article->set('title', 'My article');
$my_article->set('field_text', 'My text');
$my_article->set('field_image', FID);
$my_article->set('field_user', UID);
$my_article->enforceIsNew();
$my_article->save();

7

আপনি যদি এটি সবচেয়ে পরিষ্কার উপায়ে (পরীক্ষাযোগ্য) করতে চান তবে entity_type.managerপরিষেবাটি ব্যবহার করুন :

$storage = $this->entityTypeManager->getStorage($entity_type_id);
$my_entity = $storage->create([
   ....
]);

Node::createফাংশনে সমস্যা , এটি স্থির কল এবং সে কারণেই আপনি সত্যিই আপনার ক্লাসের আর পরীক্ষা করতে পারবেন না। স্থির কলগুলি যখনই সম্ভব সম্ভব না করা এড়িয়ে চলুন। এটি আপনার কোডটিকে আরও পঠনযোগ্য করে তুলবে (কারণ নির্ভরতাগুলি পরিষ্কার হবে)।


2

নিম্নলিখিত কোডটি আমার পক্ষে কাজ করছে

use \Drupal\node\Entity\Node;
use \Drupal\file\Entity\File;

$node = entity_create('node', array(
'type' => 'article',
'title' => $form_state->getValue('title'),
'body' => array(
'value' => $form_state->getValue('body'),
'format' => 'basic_html',
),
'uid' => $uid,
));
$node->save();

1
entity_create অবচিত
Eyal

এছাড়াও, $form_stateশুধুমাত্র নির্দিষ্ট প্রসঙ্গে উপলব্ধ; অন্যথায়, আপনি এটি অ্যাক্সেস করতে পারবেন না।
কিমলালুনো

2

চিত্র সহ নোড তৈরির আর একটি উপায় হ'ল:

use \Drupal\file\Entity\File;

// Create file object from remote URL.
$data = file_get_contents('https://www.drupal.org/files/druplicon.small_.png');
$file = file_save_data($data, 'public://druplicon.png', FILE_EXISTS_REPLACE);

$node = \Drupal::entityTypeManager()->getStorage('node')->create(array(
  'type'        => 'article',
  'title'       => 'Druplicon test',
  'field_image' => [
    'target_id' => $file->id(),
    'alt' => 'Hello world',
    'title' => 'Goodbye world'
  ],
));
$node->save();

0
use Drupal\Core\Language\Language;


$definition = \Drupal::entityTypeManager()->getDefinition('node');
$values = [
    $definition->getKey('bundle') => 'basic_page',
    'langcode'                    => Language::LANGCODE_NOT_SPECIFIED,
    'title'                       => '...',
];
$entity = \Drupal::entityTypeManager()->getStorage('node')->create($values);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.