如何设置Drupal 8模块的样式?

时间:2016-05-26 09:35:43

标签: css drupal module drupal-8

我们正在构建一个自定义Drupal 8模块,但我们希望控制它的管理样式。例如,设置表格上方的默认链接,将单词-MISSING-转换为正确的图标等

所有这些都可以通过CSS和Twig轻松完成,但问题是你如何覆盖它?我们希望继续使用默认的七个管理模板。 因此,我想所有的CSS和Twig都必须在模块中。 否则,安装我们模块的新用户将无法获得新模板。

更新 我们认为hook_thme方法是可行的方法,但仍然没有成功覆盖classy / seven块:

function ejb_project_theme() {
  $theme['block'] = [
   'template' => 'block',
  ];
  $theme['block__ejb_project'] = [
   'template' => 'block',
  ];
  $theme['block--ejb_project'] = [
   'template' => 'block',
  ];
  $theme['page--block'] = [
   'template' => 'block',
  ];

  return $theme;
}

4 个答案:

答案 0 :(得分:0)

是的,您需要通过模块文件夹上的libraries.yml文件将主题添加到模块中。查看https://www.drupal.org/developing/api/8/assets以获取有关它的完整信息。 对于模板创建/覆盖检查Create custom twig templates from custom module和Drupal 8 - Override template with module

答案 1 :(得分:0)

您考虑的方法很好:使用hook_theme()定义您的主题文件。

.module文件中:

function ejb_project_theme($existing, $type, $theme, $path) {
  return [
    'ejb_admin_block'     => [
      'variables' => [
        'attributes' => [],
        'var_1' => 'default_output',
      ],
    ],
  ];
}

然后在模块的templates目录中,您可以创建一个名为ejb-admin-block.html.twig的文件来提供标记。

这基本上与你描述的相反:不是覆盖Seven的模板,而是定义一个新模板,管理主题可以选择覆盖你的。

有关hook_theme中数组详细信息的更多信息,请参阅上面的文档和Drupal.org中的theme system overview article

答案 2 :(得分:0)

你也可以检查一下。看截图here 在themes / yourtheme / templates目录中建议使用file_name.html.twig

还有一个文件名来自输出的来源。您可以复制该文件并粘贴到yourtheme / template目录中。清除缓存。这将有效。

答案 3 :(得分:-1)

您可以尝试:

use \Symfony\Component\HttpFoundation\RedirectResponse;

function hook_page_attachments_alter(array &$attachments) {
  $route_match = \Drupal::service('current_route_match');
  $route_name = $route_match->getRouteName();
  if ($route_name == 'some.route') {
    $response = new RedirectResponse("your_path");
    $response->send();
  }

您应该重定向到路径或尝试调用将在your_module / template目录中的自定义模板