আমি নোডগুলি কীভাবে রেন্ডার করব, এখন সেই নোড_ভিউ () অবচিত করা হয়েছে?


22

ড্রুপাল 7 এ আমি প্রায়শই node_view()ব্লক বা পৃষ্ঠাগুলিতে নোডগুলি (ভিউ মোডগুলি ব্যবহার করে) রেন্ডারিংয়ের জন্য ব্যবহার করি :

$nids = array(123,456,789);
$nodes = node_load_multiple($nids);
foreach ($nodes as $node) {
  $node_view = node_view($node, 'teaser');
  $output .= drupal_render($node_view);
}
$build['nodes']['#markup'] = $output;
return $build;

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

আপনি ড্রুপাল 8 এ নোডগুলি কীভাবে রেন্ডার করতে পারেন যাতে কোনও ব্লক বা পৃষ্ঠার রেন্ডার অ্যারেতে আউটপুট ব্যবহার করা যায়?

উত্তর:


31

উত্তর Berdir কর্তৃক প্রদত্ত ব্যবহারের entityManager, যা অবচিত হয়েছে আরো নির্দিষ্ট পরিষেবার ভালবাসা লাভ করলেন। এটি বর্তমানে আমি ব্যবহার করি কোড।

$nid = 1;
$entity_type = 'node';
$view_mode = 'teaser';

$view_builder = \Drupal::entityTypeManager()->getViewBuilder($entity_type);
$storage = \Drupal::entityTypeManager()->getStorage($entity_type);
$node = $storage->load($nid);
$build = $view_builder->view($node, $view_mode);
$output = render($build);

এই কোডটি কারও কারও কাছে পছন্দের চেয়ে কিছুটা ভার্জোজ; আপনি যদি কিছু পদ্ধতি একসাথে বেঁধে যদি আরও সত্যতা পেতে চান তবে আপনি এটি কয়েকটি জোরে হ্রাস করতে পারেন।

$nid = 1;
$entity_type = 'node';
$view_mode = 'teaser';

$node = \Drupal::entityTypeManager()->getStorage($entity_type)->load($nid);
$output = render(\Drupal::entityTypeManager()->getViewBuilder($entity_type)->view($node, $view_mode));

আপনি কি শুধু ব্যবহার করতে পারবেন না $node = Node::load($nid)?
নিক

3
কেন render()শেষ লাইনে ব্যবহার করবেন ? getViewBuilder($entity_type)->viewএকটি রেন্ডার অ্যারে প্রদান করে যা টুইগ ভিউতে পাঠানো হবে।
টিম

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

যদি রেন্ডারটি ম্যানুয়ালি সম্পাদন করে থাকেন তবে কিছু ক্ষেত্রে আপনি রেন্ডারার পরিষেবাটি renderRootবা renderPlain, বা এর মাধ্যমেও বিবেচনা করতে পারেনdrupal_render_root($build);
ডেভিড থমাস

15

সবচেয়ে গুরুত্বপূর্ণ অংশটি নিজেকে রেন্ডারিং বন্ধ করা। আপনি প্রায় যেকোন জায়গায় রেন্ডার অ্যারে ফিরিয়ে দিতে পারেন এবং এটি করা উচিত। এরকম স্ট্রিং একসাথে করা আর কাজ করে না।

আপনার যা দরকার তা হ'ল:

$nodes = \Drupal::entityManager()->getStorage('node')->loadMultiple($nids);
// Or a use the static loadMultiple method on the entity class:
$nodes = \Drupal\node\Entity\Node::loadMultiple($nids);

// And then you can view/build them all together:
$build = \Drupal::entityTypeManager()->getViewBuilder('node')->viewMultiple($nodes, 'teaser');

আমি এই কাজ পেতে সক্ষম হইনি। দ্রুপাল কোরের কোনও উদাহরণ রয়েছে যা অনুসরণ করতে পারে? (
বেশিরভাগই

2
সত্তা ম্যানেজার অবচয় করা হয়। পরিবর্তে সত্ত্বা টাইপম্যানেজার ব্যবহার করুন।
টিম

4

entity_view()ড্রুপাল 9.0.0 এর আগে সরানো হবে। আপনি এটি ড্রুপাল 8 এ ব্যবহার করতে পারেন, তবে আপনি যদি এখন থেকে কোড লিখতে চান তবে কোডটি (সেই অংশের জন্য) দ্রুপাল 9-র পরিবর্তিত হবে না, আপনি নীচের কোডটি ব্যবহার করতে পারেন entity_view()

$render_controller = \Drupal::entityTypeManager()->getViewBuilder($entity->getEntityTypeId());
$render_output = $render_controller->view($entity, $view_mode, $langcode);

মূলত, এটি সেই কোডটি থেকে ব্যবহৃত হয়েছিল entity_view(), যখন আমি ফাংশনটি ব্যবহার করে যাচ্ছিলাম অন্য অবচয় পদ্ধতিতে রেফারেন্সটি প্রতিস্থাপন করার পরে। আসলে, এর জন্য ডকুমেন্টেশনগুলি Drupal::entityManager()বলে:

ড্রুপাল 8.0.0 এ এবং ড্রুপাল 9.0.0 এর আগে সরানো হবে। \Drupal::entityTypeManager()পরিবর্তে বেশিরভাগ ক্ষেত্রে ব্যবহার করুন । যদি প্রয়োজনীয় পদ্ধতিটি চালু না থাকে তবে সঠিক ইন্টারফেস বা পরিষেবা সন্ধান করতে \Drupal\Core\Entity\EntityTypeManagerInterfaceঅবহেলিত দেখুন \Drupal\Core\Entity\EntityManager

যদি entity_view()হ্রাসের আগে পরিবর্তন করা হয় তবে আপনি এখনও ফাংশনটি ব্যবহার করে এমন প্রকৃত (এবং আপডেট হওয়া) কোডটি দেখতে এর ডকুমেন্টেশন পৃষ্ঠাতে যেতে পারেন।


এটি কি Drupal::entityTypeManager()এখন Drupal::entityManager()হ্রাস করা উচিত?
নিক

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