Clientlibs Qs 如何排除一些js文件
Clientlibs Qs How to exclude some js files
我有类别为 abc 的 clientlibs。它包含多个 js 文件,例如
abc
|-->JS
| |--->a.js
| |--->b.js
| |--->c.js
|-->js.txt[which have the paths of all three js files]
如果我使用类似的东西:<cq:includeClientLib js="abc" />
。这包括我脚本中的所有 js 文件。但是我怎么能限制只包括两个。这 3 个只是示例,可以有 10 个或更多。有谁知道除了创建新的 clientlib 文件夹之外,这是如何实现的。
谢谢
您可以删除 'js.txt' 中的 js 文件条目,js 将出现在路径中但不会作为 cq:include
的一部分
据我所知,这是不可能的。无论您在 js.txt 中输入什么 js 文件名,当您编写此 <cq:includeClientLib js="abc" />
在你的 JSP.
中声明
也就是说,如果您只想在另一个 JSP 中包含两个 JS 文件而不创建新的 clientlib,唯一的方法是使用完整路径手动包含。
像这样
<script src="/etc/designs/projectname/clientlibs/js/a.js"></script>
<script src="/etc/designs/projectname/clientlibs/js/b.js"></script>
您可以使用 clientlibs 的主题功能来实现此要求。它需要对 clientlibs 结构进行少量修改。让我用三个 js 文件(a.js、b.js 和 c.js)来解释它。
让我们假设 b.js 不是一直需要的,而 a.js 和 c.js 是。您必须使用 a.js 和 c.js 创建一个父 clientlib。在同一个 clientlib 中创建一个主题文件夹并添加第二个带有 b.js [should have same category as parent] 的 clientlib,结构应如下所示:
clientlibs: {
categories: [
"themeParent"
],
jcr: primaryType: "cq:ClientLibraryFolder",
js: {
jcr: primaryType: "nt:folder",
a.js: {
jcr: primaryType: "nt:file",
jcr: content: {}
},
c.js: {
jcr: primaryType: "nt:file",
jcr: content: {}
}
},
js.txt: {
jcr: primaryType: "nt:file",
jcr: content: {
//a.js and c.js
}
},
themes: {
jcr: primaryType: "nt:folder",
themeb: {
categories: [
"themeParent"
],
jcr: primaryType: "cq:ClientLibraryFolder",
js.txt: {
jcr: primaryType: "nt:file",
jcr: content: {
//b.js
}
},
b.js: {
jcr: primaryType: "nt:file",
jcr: content: {}
}
}
}
}
可以使用 includeClientLib 标记的 themed 标志为 clientlib 选择性地启用主题。
<cq:includeClientLib js="themeParent"/>
:将包括 a.js 、 c.js 和 b.js
<cq:includeClientLib js="themeParent" themed="false"/>
:将包括 a.js 和 c.js
<cq:includeClientLib js="themeParent" themed="true"/>
:将只包括 b.js
参考资料:How are themes applied in Adobe AEM?
我有类别为 abc 的 clientlibs。它包含多个 js 文件,例如
abc
|-->JS
| |--->a.js
| |--->b.js
| |--->c.js
|-->js.txt[which have the paths of all three js files]
如果我使用类似的东西:<cq:includeClientLib js="abc" />
。这包括我脚本中的所有 js 文件。但是我怎么能限制只包括两个。这 3 个只是示例,可以有 10 个或更多。有谁知道除了创建新的 clientlib 文件夹之外,这是如何实现的。
谢谢
您可以删除 'js.txt' 中的 js 文件条目,js 将出现在路径中但不会作为 cq:include
的一部分据我所知,这是不可能的。无论您在 js.txt 中输入什么 js 文件名,当您编写此 <cq:includeClientLib js="abc" />
在你的 JSP.
也就是说,如果您只想在另一个 JSP 中包含两个 JS 文件而不创建新的 clientlib,唯一的方法是使用完整路径手动包含。
像这样
<script src="/etc/designs/projectname/clientlibs/js/a.js"></script>
<script src="/etc/designs/projectname/clientlibs/js/b.js"></script>
您可以使用 clientlibs 的主题功能来实现此要求。它需要对 clientlibs 结构进行少量修改。让我用三个 js 文件(a.js、b.js 和 c.js)来解释它。
让我们假设 b.js 不是一直需要的,而 a.js 和 c.js 是。您必须使用 a.js 和 c.js 创建一个父 clientlib。在同一个 clientlib 中创建一个主题文件夹并添加第二个带有 b.js [should have same category as parent] 的 clientlib,结构应如下所示:
clientlibs: {
categories: [
"themeParent"
],
jcr: primaryType: "cq:ClientLibraryFolder",
js: {
jcr: primaryType: "nt:folder",
a.js: {
jcr: primaryType: "nt:file",
jcr: content: {}
},
c.js: {
jcr: primaryType: "nt:file",
jcr: content: {}
}
},
js.txt: {
jcr: primaryType: "nt:file",
jcr: content: {
//a.js and c.js
}
},
themes: {
jcr: primaryType: "nt:folder",
themeb: {
categories: [
"themeParent"
],
jcr: primaryType: "cq:ClientLibraryFolder",
js.txt: {
jcr: primaryType: "nt:file",
jcr: content: {
//b.js
}
},
b.js: {
jcr: primaryType: "nt:file",
jcr: content: {}
}
}
}
}
可以使用 includeClientLib 标记的 themed 标志为 clientlib 选择性地启用主题。
<cq:includeClientLib js="themeParent"/>
:将包括 a.js 、 c.js 和 b.js
<cq:includeClientLib js="themeParent" themed="false"/>
:将包括 a.js 和 c.js
<cq:includeClientLib js="themeParent" themed="true"/>
:将只包括 b.js
参考资料:How are themes applied in Adobe AEM?