6

我试图弄清楚currentDesign.writeCssIncludes(pagecontext);在 headlibs.jsp 中找到的标准调用究竟包含了什么 css。该文档简单地说它是

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

看看它似乎做了什么,它将包括/etc/designs/currentdesign.css哪些是基于设计组件 css 构建的,以及/etc/designs/currentdesign/static.css,这只是一个静态文件。但这就是全部吗?

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

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

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

4

2 回答 2

2

您可以使用<cq:includeClientLib>标签,结合主题和/或类别来混合和匹配 CSS 位。

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

更新

关于主题的一个很好的问题!我只看到它们被顺便使用过。

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

您可以使用标签为主题拉入客户端库<cq:includeClientLibs>,也许在某些条件逻辑的控制下。例如,在我的一个项目中,我有一个主题authoring,我只想将其应用于作者实例;我用这段代码把它拉进来headlibs.jsp

<c:if test="${ (global['wcmmode']  eq 'EDIT') || (global['wcmmode'] eq 'PREVIEW') }">
    <cq:includeClientLib theme="apps.myproject.authoring" />
</c:if>

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

有一个神秘的声明“主题名称是从请求中提取的”。在 Adob​​e docs 中,由Sling docs中的此语句支持,“ThemeResolverFilter 为请求提供主题。主题作为请求属性提供。” 因此,也许添加&theme=apps.yourproject.foo查询字符串会应用该主题。

于 2013-02-27T20:29:44.837 回答
0

The list of CSS files is based on the property 'cq:designPath' of the page.

于 2014-01-28T11:11:38.670 回答