currentDesign.writeCssinclude究竟包含哪些内容?

时间:2013-02-27 18:25:31

标签: cq5

我正在试图弄清楚headlibs.jsp中对currentDesign.writeCssIncludes(pagecontext);的标准调用所包含的css究竟是什么。文档仅表明它是

Convenience method that writes the CSS include strings to the response.

看看似乎要做什么,它将包括基于设计组件css构建的/etc/designs/currentdesign.css/etc/designs/currentdesign/static.css,它只是一个静态文件。但这一切都包括在内吗?

特别是,我想要做的是在我的设计中包含一个clientLib处理的css文件。一种方法是手动构建css include:

<link rel="stylesheet" href="<%= currentDesign.getPath() %>/myclientlib.css" />

但是我更愿意让它自动生成,这样我的设计师就可以灵活地为不同的设计构建不同的css文件(例如,对于“基础”设计,只需static.css即可。文件,但对于“花哨”的设计,他们希望使用LESS css并更精细地分解文件)。将设计特定的css信息与它们影响的组件放在一起会很有帮助,而不是需要将它们分开。

2 个答案:

答案 0 :(得分:2)

您可以使用<cq:includeClientLib> tag与主题和/或类别相结合来混合和匹配CSS。

但你可能会发现它有些限制;例如,您无法指定媒体属性。如果您需要这样做,或者您的设计师没有以适合主题/类别模型的方式构建CSS,那么您的后备是您在问题中确定的技术,直接使用<link>

<强>更新

关于主题的优秀问题!我只看到他们在传球中使用过。

您可以通过在/etc/designs/yourproject/clientlibs/themes下添加新文件夹/节点作为default的兄弟来定义主题。

您可以使用<cq:includeClientLibs>标记为主题提取clientlib,也许可以在某些条件逻辑的控制下。例如,在我的一个项目中,我有一个名为authoring的主题,我只想将其应用于作者实例;我在headlibs.jsp

中使用此代码将其拉入
<c:if test="${ (global['wcmmode']  eq 'EDIT') || (global['wcmmode'] eq 'PREVIEW') }">
    <cq:includeClientLib theme="apps.myproject.authoring" />
</c:if>

我没有看到任何文档会自动将主题应用于内容树的特定子树,或者基于标记的存在。

有一个神秘的声明“主题名称是从请求中提取的”。在Adobe文档中,由Sling docs中的此语句备份,“ThemeResolverFilter为请求提供主题。主题作为请求属性提供。”因此,将&theme=apps.yourproject.foo添加到查询字符串上可能会应用该主题。

答案 1 :(得分:0)

CSS文件列表基于页面的属性'cq:designPath'。