DRUPAL模块开发 – DRUPAL8 自定义contextual links菜单API

定义contextual links

contextual links 通过YAML格式被定义,使用用模块名字来命名这个YAML格式的文件,比如,block.links.contextual.yml的内容如下:

 

block_configure:
  title: 'Configure block'
  route_name: 'block.admin_edit'
  group: 'block'

对于contextual links,
contextual 动作路由通过route_name 来提供。这是用户单击链接后将结束的路径。标题通过title关键词来被定义。上下文链接的关键概念是组。当显示上下文链接时,输出生成系统检索属于要显示的组的链接。weight关键词可用于同一组中的上下文链接排序。

渲染上下文链接(contextual links)

上下文链接呈现过程从渲染数组中的 #contextual_links关键字中提取组。例如在BlockViewBuilder中提供如下的contextual links,

public function viewMultiple(array $entities = array(), $view_mode = 'full', $langcode = NULL) {
    $build = array();
    foreach ($entities as $key => $entity) {
      // ...
      $build[$entity_id] = [
        '#theme' => 'block',
        // ...
        '#contextual_links' => [
          'block' => [
            'route_parameters' => ['block' => $entity->id()],
          ],
        ],
        // ...
      ];
    }
    // ...
  }

 #contextual_links 中的’block’关键词渲染数组建理’block’组。属于’block’的所有链接将被作为contextual links显示。由key关键词提供的值是一个包含路由参数的数组,以便能够将与此块相关的路由转换为链接的路径。比如block.admin_edit路由在上面的路由中被关联,例子如下:

block.admin_edit:
  path: '/admin/structure/block/manage/{block}'
  defaults:
    _entity_form: 'block.default'
    _title: 'Configure block'
  requirements:
    _entity_access: 'block.update'

修改contextual links

如果想修改一个已经存在的contextual links,使用hook_contextual_links_view_alter().要向还没有上下文链接(contextual links)组的现有站点组件添加上下文链接,需要通过更改构建数组、定义新键和提供适当的路由参数集来建立新组。这样做的确切过程取决于如何和在何处呈现渲染阵列。使用新组更改渲染数组的示例是菜单如何将菜单组获取到块上下文链接中。

function menu_ui_block_view_system_menu_block_alter(array &$build, BlockPluginInterface $block) {
  // Add contextual links for system menu blocks.
  $menus = menu_list_system_menus();
  $menu_name = $block->getDerivativeId();
  if (isset($menus[$menu_name])) {
    $build['#contextual_links']['menu'] = [
      'route_parameters' => array('menu' => $menu_name),
    ];
  }
}

 动态contextual link的生成

由于动态contextual link 在Drupal8开发过程中用得比较少,这里就不进行详细介绍,如果您感兴趣,可以查看这个例子:https://www.drupal.org/node/2122253

 

注明:本文为星速云原创版权所有,禁止转载,一经发现将追究版权责任!

(0)
上一篇 2022年7月20日 上午3:03
下一篇 2022年7月20日 上午3:04

相关推荐

发表评论

登录后才能评论
问答社区 QQ客服
微信客服
微信客服
分享本页
返回顶部