বিভাগের শর্তাবলী পান Get


17

আমি দ্রুপাল 8-তে একটি নির্দিষ্ট শব্দভাণ্ডার থেকে কর শর্তাবলী পুনরুদ্ধার করতে চেয়েছিলাম।

স্পষ্টতই আমি এটি ব্যবহার করে এখনও করতে পারি taxonomy_get_treeতবে এটি অবনমিত।

আমাকে এখন TermStorageInterface :: loadTree ব্যবহার করতে হবে

আমি একটি থেকে এই ফাংশনটি অ্যাক্সেস করার চেষ্টা করছি Blockতবে TermStorageInterfaceক্লাসটি কীভাবে ইনস্ট্যান্ট করবেন তা আমি বুঝতে পারি না ।

আমি সরাসরি ফাংশনটি অ্যাক্সেস করার চেষ্টা করেছি তবে এটি কোনও স্থির ফাংশন নয়:

TermStorageInterface::loadTree('categories')

আমি ক্লাসটি ইনস্ট্যান্ট করার চেষ্টা করেছি কিন্তু এটি আমাকে জানিয়েছে Cannot instantiate interface Drupal\taxonomy\TermStorageInterface

$test = new TermStorageInterface();

আমি বুঝতে পারি না যে এই শ্রেণিটি কীভাবে কাজ করে এবং কীভাবে আমি কর সংক্রান্ত লিঙ্কগুলি অ্যাক্সেস করতে পারি। আমি মনে করি ড্রুপাল কীভাবে কাজ করে তা বোঝার একটি বড় অংশ আমি অনুপস্থিত।

উত্তর:


38

একটি অবহেলিত ফাংশন প্রতিস্থাপন বেশিরভাগ ক্ষেত্রে তুচ্ছ। শুধু এটি দেখুন। সেখানে আপনি এটি দেখতে পারেন:

\Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, $parent, $max_depth, $load_entities);

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

স্টোরেজ ক্লাসটি সত্তা স্টোরেজ হ্যান্ডলার, যা আপনি সত্তা পরিচালকের মাধ্যমে পান। সাধারণভাবে, ডি 8 এর 99% ক্লাস নিজেকে তৈরি করার জন্য নয়, তবে পরিষেবা হিসাবে বা সত্তা হ্যান্ডলার, প্লাগইন হিসাবে।

উদাহরণ স্বরূপ:

$vid = 'vocabulary_name';
$terms =\Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid);
foreach ($terms as $term) {
 $term_data[] = array(
  'id' => $term->tid,
  'name' => $term->name
 );
}

দুর্দান্ত, আপনাকে ধন্যবাদ। যদিও আমি বুঝতে পারি না আপনি কোডটির সেই লাইনটি কোথায় পেয়েছেন?
রোমেন ব্রাউন

যেমনটি আমি বলেছি, এটি ট্যাক্সনমি_জেট_ট্রি () থেকে অনুলিপি করা হয়েছে। একটি অবহেলিত ফাংশন মানে কিছু করার নতুন উপায় আছে তবে পুরানো ফাংশনটি এখনও কাজ করতে পারে।
বেরদির

ওহ ঠিক আছে. অসাধারণ. এখন বুঝতে পারছি. আপনার সাহায্যের জন্য আপনাকে অনেক ধন্যবাদ!
রোমেন ব্রাউন

এখন এটি কাজ করছে না, আমি অবহেলিত ফাংশনটি ইন্টিটিটাইপ ম্যানেজারে পরিবর্তন করেছি, তবে getStorage এর পরে আমি লোডট্রি পাচ্ছি না।
ভানু প্রকাশ রায়গা

2
@ Usethe23 বাস্তবায়ন কি? এটি কেবলমাত্র নতুন পদ্ধতির সাথে অবহেলিত ফাংশন কলকে প্রতিস্থাপন করার বিষয়ে। এটি এমন কিছু করে না যা এর আগে আগে করেনি। আপনার সম্ভবত একটি নতুন প্রশ্ন তৈরি করতে হবে এবং আপনি কী করতে চান তা বর্ণনা করতে হবে।
বার্ডির

9

আমি ট্যাগগুলির একটি তালিকা তৈরি করতে এটি ব্যবহার করি:

  use Drupal\taxonomy\Entity\Term;      
  use Drupal\Core\Link;
  use Drupal\Core\Url;

  $vocabulary_name = 'YOUR_VOCABULARY_NAME'; //name of your vocabulary
  $query = \Drupal::entityQuery('taxonomy_term');
  $query->condition('vid', $vocabulary_name);
  $query->sort('weight');
  $tids = $query->execute();
  $terms = Term::loadMultiple($tids);
  $output = '<ul>';
  foreach($terms as $term) {
      $name = $term->getName();;
      $url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term' => $term->id()]);
      $link = Link::fromTextAndUrl($name, $url);
      $link = $link->toRenderable();
      $output .='<li>'.render($link).'</li>';
  }
  $output .= '</ul>';
  print $output;

আমি এর জন্য আধ ঘন্টার মতো সন্ধান করেছি ... এটি এত জটিল এবং কোনও তাৎপর্যপূর্ণ নয় ... এবং যদি আমি শ্রমশক্তি শব্দটির কেবলমাত্র ইউআরএল ওরফে চাই, তবে কীভাবে তা পেলাম?
রাফ এ।

1
হাই রফ। আমি এটি পোস্ট করার সিদ্ধান্ত নিয়েছি, কারণ এর মতো সহজ কাজ করতে আমারও খুব কঠিন সময় ছিল। কেবলমাত্র উপনামটি পেতে: $ url = url :: থেকে রুট ('সত্তা.ট্যাক্সোনমি_টারম.ক্যানোনিকাল'), ['ট্যাক্সোনমি_টারম' => $ টার্ম-> আইডি ()]);
স্টিফ ভ্যান লুভেরেন

5

আপনি যে ত্রুটিটি পাচ্ছেন তা হ'ল কারণ আপনি কোনও ইন্টারফেসের উদাহরণ তৈরি করার চেষ্টা করছেন যা পিএইচপি অনুমতি দেয় না। পিএইচপি ইন্টারফেসগুলি নির্দিষ্ট ক্ষেত্রে ক্ষেত্রে ক্লাসগুলি প্রয়োগ করার পদ্ধতিগুলি বর্ণনা করে তবে এগুলি কোনও বস্তু তৈরি করতে ব্যবহার করা যায় না, উদাহরণস্বরূপ new InterfaceName()

এখন এটি taxonomy_get_tree()সরানো হয়েছে, এবং সত্তা পরিচালকের পরিষেবাটি অবচয় করা হয়েছে, আপনাকে নিম্নলিখিত কোডটি ব্যবহার করতে হবে।

$terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, $parent, $max_depth, $load_entities);

সেখানে ব্যবহার করতে হবে না হয় \Drupal::getContainer()যেহেতু \Drupalঅনাবৃত একটি সাহায্যকারী পদ্ধতি সত্তা টাইপ ব্যবস্থাপক সেবা পেতে।


3

শব্দভান্ডার (vid) এর মেশিনের নাম ব্যবহার করে লোড করুন:

  $vid = 'name_of_your_vocabulary';
  $terms =\Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid);
  foreach ($terms as $term) {
   $term_data[] = array(
    "id" => $term->tid,
    "name" => $term->name
   );
   dpm($term_data);
  }

2

Rup দ্রুপাল :: অ্যান্টি ম্যানেজার () এখন অবহিত হয়েছে তাই এটি আমার জন্য কাজ করেছে

$vids = Vocabulary::loadMultiple();
foreach ($vids as $vid) {
  if ($vid->label() == 'YourVocab') {
    $container = \Drupal::getContainer();
    $terms = $container->get('entity.manager')->getStorage('taxonomy_term')->loadTree($vid->id());
    if (!empty($terms)) {
      foreach($terms as $term) {
        dsm($term->name);
      }
    }
    break;
  }
}

1
ইনিটি ম্যানেজার অবচিত করা হয়েছে কারণ এটি 11 টি শ্রেণিতে বিভক্ত হয়ে গেছে - drupal.org/node/2337191 - সুতরাং পরিবর্তে \ দ্রুপাল :: সত্তা টাইপম্যানেজারটি ব্যবহার করুন এবং আপনার ভাল হওয়া উচিত।
অগনোকোক্যাটেন

যে কোনও সময় আপনি মাল্টিপল এবং লুপ করতে হবে যতক্ষণ না আপনি নিজের নির্দিষ্ট নির্দিষ্টটি পান, আমি সেই শিটটি কোডটি কল করি
AlxVallejo

2

আমি সবেমাত্র একটি ফাংশন লিখেছি, সম্পাদনা এবং ব্যবহার করতে নির্দ্বিধায় :) শব্দটির আইডি আমার দরকার ছিল, তবে আপনি যা খুশি ফিরে আসতে পারেন।

function checkTaxonomyTerm($vocab_name, $term_name){
    $query = \Drupal::entityQuery('taxonomy_term');
    $query->condition('vid', $vocab_name);
    $tids = $query->execute();
    $terms = Term::loadMultiple($tids);
    foreach($terms as $term) {
        $name = $term->getName();
        if($name == $term_name) {
            print_r($term->id());
            if (is_null($term->id())) {
                return null;
            }
            else{
                return array(true, $term->id());
            }
        }
        else {return addTaxonomyTerm($term->getVocabularyId(), $name);}
    }
}

আমি ভুল হতে পারি, তবে এটি সম্পূর্ণরূপে সঠিক নয় বলে মনে হচ্ছে। $query->conditionপরে $query->execute()কোন প্রভাব আছে। এছাড়াও যদি প্রথম শব্দটি সঠিক হয় না, তবে ভবিষ্যদ্বাণীটি পরবর্তী শব্দটি পরীক্ষা করার পরিবর্তে বাতিল হয়ে যাবে। (আপনার ব্যবহারের ক্ষেত্রে, যদি আপনি ব্যবহার করতে সক্ষম হতে পারেন taxonomy_term_load_multiple_by_name পরিবর্তে?)
Neograph734

ওপস, হ্যাঁ দুঃখিত আমি পুরাতন কোডটি অনুলিপি করেছি, আমি এটি সম্পাদনা করি
Czeglédi Dávid

হ্যাঁ এবং হ্যাঁ, অন্য উপায় ঠিক আছে, যেমনটি আপনি বলেছেন, এটি আরও ভাল ব্যবহারের জন্য।
সিজেগ্লাদি ডেভিড

1

শব্দভান্ডার মেশিনের নামের উপর ভিত্তি করে কীভাবে ট্যাক্সোনমি শর্তাদি অ্যাক্সেস করবেন তা ডি 8 উদাহরণ এখানে রয়েছে:

$terms = \Drupal::entityManager()->getStorage('taxonomy_term')->loadTree('categories');
foreach ($terms as $term) {
  //$value = $term->get('field_example')->getValue();
  var_dump($term);
}

পুরো সত্ত্বা লোড করার জন্য, ব্যবহার করুন: loadTree('categories', 0, NULL, TRUE)


1

আপনার যদি টার্ম সত্তার প্রয়োজন হয় তবে আপনি 'লোডবাইপ্রটিস ()' ব্যবহার করতে পারেন।

$vid = 'vocabulary_name';
/** @var \Drupal\taxonomy\Entity\Term[] $terms */
$terms =\Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadByProperties(['vid' => $vid]);

এটা সঠিক উত্তর. ধন্যবাদ।
স্টিফ ভ্যান লুভেরেন

0
$vid = 'MACHINE_NAME_OF_VACABULARY';
$parent_tid = 0;//parent id
$depth = 2; //depth upto which level you want 
$load_entities = FALSE;
$tree = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, $parent_tid, $depth, $load_entities);

foreach ($tree as $term) {
     $treeNames[] = array(
      'name' => $term->name
     );
}
dump($treeNames);

-2

আপনি এখানে সম্পূর্ণ বিবরণ দেখতে পারেন https://drupaltreasure.blogspot.com/2017/04/drupal-8-get-list-of-all-voacbs.html


1
যতক্ষণ এই তাত্ত্বিক প্রশ্নের উত্তর হতে পারে, এটা বাঞ্ছনীয় হবে উত্তর অপরিহার্য অংশের এখানে অন্তর্ভুক্ত করা, এবং রেফারেন্স এর জন্য লিঙ্ক প্রদান।
এমপিডোনাডিও
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.