大师兄 发表于 2017-12-16 15:44:57

模板缓存、CSS继承规范和CSS缓存机制

我们在使用火狐或者谷歌查看元素的时候看见的CSS的路径是style_2_common.css或者style_2_forum_index.css这样的形式,而在data下的template目录下看到的确实2_2_common_block_thread.tpl.php形式,那discuz模板的缓存和继承到底是如何情况呢?

一、模板缓存

模板缓存存放:所有的模板缓存均被解析成php文件存放在 ./data/template 中,以 “数字_模板标示符组合.tpl.php”形式保存。如上面说的2_2_common_block_thread.tpl.php。

页面缓存刷新原理:当开发者编辑过模板文件之后,Discuz! 模板解析器会匹配模板htm文件与缓存php文件的最后修改时间,如过模板html文件较新或无缓存文件,则更新或生成缓存,不新,则不采取任何动作。

手动删除此目录的缓存不会影响Discuz!系统的整体运行,Discuz! 模板缓存仍然会进行自动生成。

这个就是很多站长修改模板的时候修改了此目录下文件,效果只能看见一下就消失的原因。

二、CSS缓存

CSS缓存存放:./data/cache/目录中,以 “style_风格自增编号_应用入口关键字_所在页面的mod值.css”形式保存。如开头说的style_2_common.css或者style_2_forum_index.css。

自建新套系模板文件可以通过创建 ./template/archy_test/common/extend_common.css 或 extend_module.css 进行CSS扩展,其中这两个文件的CSS样式脚本会通过 Discuz! 模板解析将风格常量统一赋值进去并合将CSS脚本复制出来放入 ./template/default/common/common.css 和 module.css 所对应的缓存中去,方便站点运行时引用。

extend_module.css 系统解析与缓存存放:
其中可以使用下面的书写方法:
/** forum::index,forum::forumdisplay **/
    .archy_css {font: {FONTSIZE} {FONT};}
/** end **/上面的写法含义是:针对 forum 的 index 和 forumdisplay 追加一个自定义的CSS样式 "archy_css" ,Discuz! 模板解析将会根据 forum::index 的关键词将 mycss 分别追加在“./data/cache/style_2_forum_index.css”和“./data/cache/style_2_forum_forumdisplay.css”中(里面的数字2,根据新增的风格编号而定)

这样的写法好处就是,不变更默认模板的情况下有效的扩展CSS,并可以很好的进行多站点移植,同时也可以保护模板的目录不会暴露。

三、CSS 继承规范

Discuz! X系列产品中 CSS 文件会在缓存时按照以下顺序进行合并:

1、template/default/*.css 文件
2、当默认模版是非默认模版时,template/模版目录/extend_*.css 文件 或 template/模版目录/*.css
3、当某插件启用时,source/plugin/插件目录/template/extend_*.css 文件

因此非默认模版目录中的 CSS 属性将继承默认模版中的 CSS 属性,插件目录中的 CSS 文件将继承前二者的 CSS 属性
CSS 自身的集成顺序为:当 CSS 属性名称相同是,CSS 文件中,写在后面的替换前面的代码。
页: [1]
查看完整版本: 模板缓存、CSS继承规范和CSS缓存机制