微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在 drupal 8 中打印钩子的所有变量?

如何解决如何在 drupal 8 中打印钩子的所有变量?

我是 Drupal 8 的新手,我现在遇到了钩子问题。主要是我不太清楚 Drupal 8 中的结构和钩子定义。

所以我的主要问题是我有一些与主菜单交互的钩子(将自定义类名添加到 ul、li 和链接标签)。我可以通过更改模板文件来实现,现在尝试使用任何钩子来实现。

虽然我发现了一些与菜单 ex 相关的钩子。 hook_contextual_links_alter链接https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Menu%21menu.api.php/function/hook_contextual_links_alter/8.9.x)。

在这个钩子的末尾,我们有相关的代码

function hook_contextual_links_alter(array &$links,$group,array $route_parameters) {   
  if ($group == 'menu') {
    // Dynamically use the menu name for the title of the menu_edit contextual
    // link.
    $menu = \Drupal::entityTypeManager()
      ->getStorage('menu')
      ->load($route_parameters['menu']);
    $links['menu_edit']['title'] = t('Edit menu: @label',[
      '@label' => $menu
        ->label(),]);   
  } 
}

所以我在我的 .theme 文件中安装了带有 kint 函数的 devel 模块并尝试:

function hook_contextual_links_alter(array &$links,array $route_parameters) {   
  kint($links);
}

然后重新加载我的主页但没有显示。但我可以得到一些关于其他的信息:

function eg_learn_theme_suggestions_page_alter(&$suggestions,$variables) {   
  kint($suggestions); 
}

那么这里发生了什么?你能帮忙解释一下我如何打印这个钩子的变量(在 .theme 文件中)和网站页面来查看打印变量吗?

一般来说,当我找到一个钩子时,我如何打印那里的数组并在网站上检查它?

解决方法

您的方法存在一些问题:

  1. 在实现 hook 时,您必须将“hook”替换为将钩子函数放入其中的模块名称/主题名称。例如,如果您想在 hook_contextual_links_alter 模块中实现 your_custom,它会变成 your_custom_contextual_links_alter()
  2. 并非所有钩子都可以在主题中实现。某些钩子只能在模块中实现(在 .module 文件中)。您可以阅读更多here
  3. 就您而言,我认为 hook_preprocess_menu 会更合适。您可以在自定义主题中实现它,如下所示:
    function <your_theme_name>_preprocess_menu(&$variables) {
      if ($variables['menu_name'] == 'main') {
        kint($variables);
      }
    }
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。