আমি প্রোগ্রামিয়ালি মেনু লিঙ্কগুলি কীভাবে তৈরি করব?


14

ড্রুপাল 8-তে প্রোগ্রামিকভাবে আমি বিদ্যমান মেনুতে (বা নতুন) কিছু লিঙ্ক যুক্ত করতে হবে।

উত্তর:


24

মেনু আইটেমটি স্বয়ংক্রিয়ভাবে তৈরি করার জন্য hook_update_Nএটি ফাইলের mymodule.installএকটিতে স্থাপন করা যেতে পারে এবং ডাটাবেস আপডেট হওয়ার পরে এটি চালিত হবে (/update.php):

use Drupal\menu_link_content\Entity\MenuLinkContent;
$items = array(
  '1' => 'Menuitem 1',
  '2' => 'Menuitem 2',
  '3' => 'Menuitem 3'
);

foreach($items as $nid => $title) {
  $menu_link = MenuLinkContent::create([
    'title' => $title,
    'link' => ['uri' => 'internal:/node/' . $nid],
    'menu_name' => 'main',
    'expanded' => TRUE,
  ]);
  $menu_link->save();
}

আপনি প্রোগ্রামগতভাবে একটি সম্পূর্ণ মেনু তৈরি করতে পারেন:

\Drupal::entityTypeManager()
  ->getStorage('menu')
  ->create([
    'id' => 'menu_test',
    'label' => 'Test menu',
    'description' => 'Description text',
  ])
  ->save();

1
সত্তা_ক্রিয়েট হ্রাস করা হয়। \ দ্রুপাল :: সত্তা টাইপম্যানেজার () -> স্টোরেজ পান ('মেনু') - তৈরি করুন [[]];
ইয়াল

1
আমি মনে করি যে সঠিক সমাধান মেনু yamls ব্যবহার করা উচিত
Eyal

3
কোন হুক এ সঠিকভাবে ব্যবহৃত হয়?
পল

11
উত্তরটি প্রসারিত করা কি ঠিক হবে? এটি মেনু আইটেমগুলি তৈরি করতে এই কোডটি কোথায় স্থাপন করা যায় তা উল্লেখ করে না। আমি মনে করি আমার মতো লোকেরা এটি গ্রহণ এবং কার্যকরভাবে কার্যকর করার জন্য সংগ্রাম করবে will
cwiggo 25'17

6
পিতা-মাতার লিঙ্কে আপনি কীভাবে শিশু হিসাবে মেনু লিঙ্ক যুক্ত করবেন?
ম্যাট

8

আপনি যদি মডিউল-সংজ্ঞায়িত মেনু লিঙ্কগুলি তৈরি করতে চান তবে আপনার কাস্টম_মডিউল.লিংকস.মেনু.আইএমএল ফাইলটিতে এই জাতীয় উদাহরণ যুক্ত করুন:

custom_module.admin_item_1:
  title: 'New Admin Item 1'
  parent: system.admin
  description: 'Description of link goes here.'
  route_name: view.some_view_id.page_1

parent(alচ্ছিক) হ'ল টেবিলের idপিতামাতার কলাম menu_treeএবং route_nameড্রুপলের অভ্যন্তরীণ রুট আইডি যেখানে আপনি মেনু আইটেমটির সাথে লিঙ্ক করতে চান। এটা menu_treeযেমন টেবিলে আছে route_name

দেখুন মডিউল-সংজ্ঞায়িত মেনু লিঙ্ক প্রদান এবং একটি মেনু লিঙ্ক যুক্ত করুন আরো বিস্তারিত জানার এবং বিকল্পের জন্য।


3
আপনি যদি মেনু আইটেমগুলি তৈরি করতে চান তা আগেই জানলে মেনু ইয়ামলগুলি কেবল সহায়তা করে, প্রোগ্রামেটিক ক্রিয়েশন নোড সেভে থাকতে পারে।
ডানকানমু

1
অনুবাদযোগ্য মেনু আইটেমটি কীভাবে যুক্ত করবেন? একটি মেনু আইটেম পছন্দ করে তবে 3 টি ভাষায় (বিভিন্ন মেনু আইটেমের শিরোনাম এবং পাথ)।
মিলানজি

1

@ স্পোরঝের উত্তরটি প্রসারিত করতে এবং @ ম্যাট থেকে দেওয়া মন্তব্যে জবাব দিতে, আপনি যদি অন্যটির ভিতরে কোনও মেনু আইটেম বাসাতে চান তবে আপনাকে প্যারেন্ট আইডি নিতে হবে এবং এটি 'পিতামাতার' হিসাবে সেট করতে হবে। উদাহরণ হিসাবে এই কোডটি $top_levelনীচের ভেরিয়েবলটি ব্যবহার করে উপরের স্তরের অভ্যন্তরে আইটেমটি বাসা করে ।

  $my_menu = \Drupal::entityTypeManager()->getStorage('menu_link_content')
    ->loadByProperties(['menu_name' => 'my-menu-name']);
  foreach ($my_menu as $menu_item) {
    $parent_id = $menu_item->getParentId();
    if (!empty($parent_id) {
      $top_level = $parent_id;
      break;
    }
  }
  $menu_link = MenuLinkContent::create([
    'title' => 'My menu link title',
    'link' => ['uri' => 'internal:/my/path'],
    'menu_name' => 'my-menu-name',
    'parent' => $top_level,
    'expanded' => TRUE,
    'weight' => 0,
  ]);
  $menu_link->save();
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.