我们正在构建一个自定义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;
}
答案 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目录中的自定义模板