我正在试图弄清楚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信息与它们影响的组件放在一起会很有帮助,而不是需要将它们分开。
答案 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'。