【问题标题】:Drupal 8: How to create multi lingual menu item from .links.menu.ymlDrupal 8:如何从 .links.menu.yml 创建多语言菜单项
【发布时间】:2018-09-10 09:22:26
【问题描述】:

所以,在很多地方,例如这里:

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

解释了如何从模块的module_name.links.menu.yml 向某些现有菜单添加菜单项。

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

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

【问题讨论】:

    标签: menu translation drupal-8


    【解决方案1】:

    成功了。我创建的第一个 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;
       }
    

    基本上这是可行的,但问题是它不是在每个请求中都执行,而是被缓存了。因此,即如果您想根据语言使用不同的标题或网址,它将无法正常工作。第一语言的版本将被缓存,对于所有其他语言,将使用相同的缓存版本。 所以我不得不寻求不同的解决方案:

    我没有使用那个钩子函数,而是在 links.menu.yml 中添加了“class”参数:

    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 中创建了该类(不要忘记将插件放在 src 目录中!),它看起来像:

    <?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');
          }
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-19
      • 2017-12-11
      • 1970-01-01
      • 2018-04-29
      • 2018-01-04
      • 1970-01-01
      相关资源
      最近更新 更多