我正在尝试修改/覆盖 CQ 客户端库管理器的功能,我想知道是否有人熟悉代码所在的位置?
我在 DefaultChannelDetector.js 和 CQClientLibraryManager.js 中发现了一些控制 channel 检测的 js,它们似乎只处理 channel ,而不是依赖项或嵌入。这些被用作 clientlib,etc/clientlibs/foundation/librarymanager.js 我认为可以通过在 apps/system/config/com.day.cq.widget.impl.HtmlLibraryManagerImpl.config 中指向 htmllibmanager.clientmanager 来覆盖它。 >
因此,为了进行修改,我需要知道代码所在的位置。为了覆盖,我假设我将 htmllibmanager.clientmanager 指向其他东西,但我仍然需要知道如何访问 clientlibs 的依赖项/类别/嵌入属性。
此外,如果您能深入了解 cq:includeClientLib 标记的工作原理,我们将不胜感激。 (低级指的是实现它的代码)
最佳答案
绝大多数客户端库功能都在 HtmlLibraryManager
中组件由 com.day.cq.cq-widgets
包中的 HtmlLibraryManagerImpl
类实现 OOB。您可以在 Felix 中查找该组件,看看它位于哪个包中,然后如果您需要查看实现的内部结构,则反编译该包。
在较高级别上,该组件处理 cq:includeClientLib
标记结果的生成以及请求库 URL 时库的串联和编译。具体到 cq:includeClientLib
标记,HtmlLibraryManager
的 writeInincludes
方法将根据请求的参数和在cq:includeClientLib
标签,如何将现有库的包含内容写入页面。
对于动态库(基于 channel 的库),它将编写对库管理器 JavaScript 机制的调用,该机制将动态地包含基于用户 channel 的库。否则,将为请求的库及其依赖项分别编写 JavaScript 和 CSS 的适当脚本和链接标记。
关于Adobe CQ : Client Library Manager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18993985/