সত্তা থেকে কীভাবে বান্ডেল লেবেল পাবেন


15

আমি কীভাবে একটি বোঝা সত্তা থেকে একটি বান্ডিলের মানব-পঠনযোগ্য লেবেল পাব।

বলি যে আমি আমার_আর্টিকেল বান্ডিলের নোডের লেবেল পেতে চাই যা "আমার ভয়ঙ্কর নিবন্ধ"

// Load a node
$node = Drupal::entityManager()->getStorage('node')->load(4);

print $node->bundle(); // prints the machine-readable name. e.g. 'my_article'.

print $node->getEntityType()->getBundleLabel(); // prints 'content type'.

আমি কেবল বান্ডিলের মেশিন-পঠনযোগ্য নাম বা সত্তার লেবেল ("সামগ্রীর ধরণ", "ট্যাক্সোনমি শব্দ", ইত্যাদি) পেতে সক্ষম হয়েছি, তবে আমি কীভাবে বান্ডেলের লেবেল পাব?

পিএস আমি এটিকে অবজ্ঞাত শ্রেণি / ফাংশন ব্যবহার না করা পছন্দ করব prefer

উত্তর:


24

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

$bundle_label = \Drupal::entityTypeManager()
  ->getStorage('node_type')
  ->load($node->bundle())
  ->label();

বা বার্ডির মন্তব্যগুলিতে যেমন উল্লেখ করেছেন, সত্তা রেফারেন্স ক্ষেত্রটি দিয়ে একটি দ্রুত উপায় রয়েছে:

$bundle_label = $node->type->entity->label();

1
ধন্যবাদ, কাজ করে। আমি কেবল অবহেলিত অ্যান্টি ম্যানেজারের পরিবর্তে অ্যান্টিটাইপম্যানেজারটি ব্যবহার করব।
লিনাস

1
আমার খারাপ, আমি বুঝতে পারি নি যে এটি হ্রাস করা হয়েছে। এটি ঠিক করা হয়েছে
ক্লাইভ

9
এটি কোনও পদ্ধতি হিসাবে উপলভ্য নয়, তবে প্রকারটি সত্তার রেফারেন্স, সুতরাং আপনি কেবল এটি করতে পারেন: ode নোড-> টাইপ-> সত্তা-> লেবেল ()
বারদির

1
এটি কেবল নোড টাইপের উত্তর দিচ্ছে .. এবং সাধারণভাবে সত্তা নয় ..
সিসিবাল

2
প্রশ্ন অনুযায়ী @ এসিবল ইয়েপ সত্তা টাইপের জন্য বান্ডিল কী আলাদা হবে (তবে মেটাডেটা থেকেও পুনরুদ্ধার করা যেতে পারে)
ক্লাইভ

9

নোট করুন যে গৃহীত উত্তরটি বিশেষভাবে নোড সত্তাগুলির ক্ষেত্রে প্রযোজ্য তবে সমস্ত সত্তার বান্ডিল রয়েছে। অনেকগুলি সত্তা, যেমন userবা menu_link_content(কাস্টম মেনু লিঙ্কগুলির জন্য) কেবলমাত্র একটি বান্ডিল থাকে যা সত্তার টাইপের সাথে খোদাই করে।

entity_type.bundle.infoসেবা দ্বারা বাস্তবায়িত Drupal এর \ কোর \ সত্তা \ EntityTypeBundleInfo , সত্তা বান্ডিল তথ্যে অ্যাক্সেস প্রদান করে। এর পদ্ধতিগুলি getAllBundleInfo()এবং getBundleInfo($entity_type_id)যথাক্রমে সত্তা টাইপ এবং বান্ডিল মেশিনের নাম অনুসারে একটি অ্যারে ফিরিয়ে দেয়, পূর্ববর্তীটি বান্ডেল মেশিনের নাম দ্বারা কীড বান্ডিলগুলির একটি অ্যারে ধারণ করে। প্রতিটি বান্ডিলটির একটি labelঅনুবাদকৃত বান্ডিল বন্ধুত্বপূর্ণ নাম রয়েছে।

নীচে এমন একটি উদাহরণ দেওয়া আছে যা সামগ্রী সামগ্রীর মেশিনের নাম, লেবেল, বান্ডিল মেশিনের নাম এবং বান্ডিল লেবেলের মধ্যে পার্থক্য দেখায়। কোডটি ধরে নিয়েছে যে একটি আইডির সাথে কমপক্ষে একটি কাস্টম মেনু লিঙ্ক রয়েছে 1। এটি articleনোডের ধরণ (বান্ডিল) রয়েছে বলেও ধরে নিয়েছে 1, এর আইডি সহ কমপক্ষে একটি নোড রয়েছে এবং নোডটি নোড টাইপের (বান্ডিল) হয় article

<?php

$entity_type_manager = \Drupal::entityTypeManager();
$bundle_info = \Drupal::service("entity_type.bundle.info")->getAllBundleInfo();

$current_user = \Drupal::currentUser()->getAccount();

// Prints "user".
print $current_user->getEntityTypeId() . PHP_EOL;

// Prints "User".
print $current_user->getEntityType()->getLabel() . PHP_EOL;

// Prints "user".
print $current_user->bundle() . PHP_EOL;

// Prints "User".
print $bundle_info[$current_user->getEntityTypeId()][$current_user->bundle()]['label'] . PHP_EOL;

$my_menu_link = $entity_type_manager->getStorage('menu_link_content')->load(1);

// Prints "menu_link_content".
print $my_menu_link->getEntityTypeId() . PHP_EOL;

// Prints "Custom menu link".
print $my_menu_link->getEntityType()->getLabel() . PHP_EOL;

// Prints "menu_link_content".
print $my_menu_link->bundle() . PHP_EOL;

// Prints "Custom menu link".
print $bundle_info[$my_menu_link->getEntityTypeId()][$my_menu_link->bundle()]['label'] . PHP_EOL;

$my_article = $entity_type_manager->getStorage('node')->load(1);

// Prints "node".
print $my_article->getEntityTypeId() . PHP_EOL;

// Prints "Content".
print $my_article->getEntityType()->getLabel() . PHP_EOL;

// Prints "article".
print $my_article->bundle() . PHP_EOL;

// Prints "Article".
print $bundle_info[$my_article->getEntityTypeId()][$my_article->bundle()]['label'] . PHP_EOL;

ক্লাসের স্থিতিশীল পদ্ধতিগুলির উপর নির্ভর না করে আপনার কোডে যেখানে সম্ভব সেখানে নির্ভরতা ইনজেকশন ব্যবহার নিশ্চিত করুন Drupal


এমন উত্তর পেতে খুব সহায়ক যা সমস্ত সত্তা ধরণের জন্য কাজ করে। ধন্যবাদ।
জেমস উইলসন


3

আপনি যদি $entityটাইপ সম্পর্কে নিশ্চিত না হন তবে এটি হতে পারে:

if ($entity->bundle()) {
  $bundle_type_id = $entity->getEntityType()->getBundleEntityType();
  $bundle_label = \Drupal::entityTypeManager()
    ->getStorage($bundle_type_id)
    ->load($entity->bundle())
    ->label();
}

এটির সঠিক উত্তরটি হওয়া উচিত: "সত্তার বান্ডিল লেবেল" জিজ্ঞাসা করা আসল প্রশ্ন কোনও নোডের বান্ডিল লেবেল নয় ..
সিএসবাল

1

সর্বাধিক দক্ষ সমাধান নয়, তবে সম্পূর্ণতার জন্য, এটি কাজ করে:

\Drupal::token()->replace('[node:type-name]', ['node' => $node]);

অথবা

\Drupal::service('token')->replace('[node:type-name]', ['node' => $node]);
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.