代码之家  ›  专栏  ›  技术社区  ›  MilanG

Drupal8:如何从创建多语言菜单项。links.menu.yml链接

  •  1
  • MilanG  · 技术社区  · 7 年前

    https://www.drupal.org/docs/8/api/menu-api/providing-module-defined-menu-links

    它解释了如何从 module_name.links.menu.yml

    问题是菜单项是可以翻译的(从后端),但我找不到任何地方可以添加多种语言的菜单项?有可能吗?

    所以,我有一个菜单,我想添加一个菜单项,但是在每种语言上,菜单项应该有不同的标题和指向的不同url。

    1 回复  |  直到 7 年前
        1
  •  1
  •   MilanG    7 年前

    成功。第一links.menu.yml链接我是这样创造的:

    my_menu_item_id:
      title: 'Dummy Title'
      description: 'Dummy Description'
      url: http://www.google.com
      parent: mainmenu
      menu_name: mainmenu
      weight: -100
    

    然后我加入了我的模块 hook_menu_links_discovered_alter() 这样地:

       function mymodule_menu_links_discovered_alter(&$links) {
              $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
              $links['my_menu_item_id']['title'] = 'Title:'.$language;
       }
    

    所以我不得不采用不同的解决方案:

    我没有使用钩子函数,而是将“class”参数添加到links.menu.yml链接:

    my_menu_item_id:
      class: Drupal\my_module\Plugin\Menu\MyPluginClass
      title: 'Dummy Title'
      description: 'Dummy Description'
      url: http://www.google.com
      parent: mainmenu
      menu_name: mainmenu
      weight: -100
    

    当然,我是在 my_module/src/Plugin/Menu

    <?php
    
    namespace Drupal\my_module\Plugin\Menu;
    
    use Drupal\Core\Menu\MenuLinkDefault;
    use Drupal\Core\Url;
    
        class MyPluginClass extends MenuLinkDefault {
    
    
          /**
           * {@inheritdoc}
           */
          public function getTitle() {
    
            $language = \Drupal::languageManager()->getCurrentLanguage()->getId();
    
            return (string) 'Title: '.$language;
          }
    
          public function getUrlObject($title_attribute = TRUE) {
            return Url::fromUri('http://www.yahoo.com');
          }
    
        }