Drupal 8 Bartik主题下html.html.twig插入内联CSS问题
解决Drupal 8 Bartik主题内联CSS引入失败的问题
嘿,我懂你现在的困扰——用include标签尝试把静态CSS文件内容插入到Twig模板的<style>标签里,结果只得到空标签对吧?问题出在Twig的include是用来加载Twig模板文件的,不是读取静态文件原始内容的,它会把.css文件当成Twig模板解析,自然输出空内容。
给你两个可行的解决方案,按需选择:
方案一:用Twig source函数直接读取文件内容
这是最直接解决你当前问题的方法,source函数就是专门用来获取文件原始内容的,替换你原来的代码即可:
<style media="all"> {{ source(directory ~ '/sites/default/files/css/inline.css') ignore missing }} </style>
几个注意点:
- 先确认
directory变量的正确性:可以临时在模板里加一行{{ directory }},看看输出的是不是你的Drupal根目录路径,避免路径拼接错误。 - 检查文件权限:确保
sites/default/files/css/inline.css确实存在,并且web服务器用户(比如www-data)有读取这个文件的权限。 ignore missing是可选的:如果这个CSS文件是页面必须加载的,去掉它,这样文件缺失时你能看到明确的错误提示,方便调试。
方案二:用Drupal库(Library)机制(推荐)
如果想遵循Drupal的最佳实践,建议用资产库来添加内联CSS,这样能更好地集成Drupal的缓存和资源管理体系:
- 打开你的Bartik主题(或子主题)的
.info.yml文件,添加库声明:
libraries: - bartik/inline-custom-css
- 在主题目录下创建(或修改)
.libraries.yml文件,添加:
inline-custom-css: css: theme: sites/default/files/css/inline.css: { inline: true }
这样Drupal会自动把这个CSS文件的内容内联到页面里,比直接在模板里写更规范,也能享受Drupal的缓存优化。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

