页面属性中的AEM页面图像不';不要使用吊索:resourceType
使用AdobeExperienceManager5.6.1(AEM)(原名CQ5),我尝试创建一个新选项卡,类似于页面属性中的图像选项卡。它将被命名为“标志” 我基本上只是复制了图像选项卡来创建徽标选项卡,并重命名了路径以反映徽标的用途。例如,我将页面属性中的AEM页面图像不';不要使用吊索:resourceType,aem,Aem,使用AdobeExperienceManager5.6.1(AEM)(原名CQ5),我尝试创建一个新选项卡,类似于页面属性中的图像选项卡。它将被命名为“标志” 我基本上只是复制了图像选项卡来创建徽标选项卡,并重命名了路径以反映徽标的用途。例如,我将filereferenceparameter设置为/logo/fileReference,将requestSuffix设置为/logo.img.png 当我编辑属性时,我可以像使用“图像”选项卡一样将图像拖动到选项卡中,但是,图像从未出现在那里。我猜这
filereferenceparameter
设置为/logo/fileReference
,将requestSuffix
设置为/logo.img.png
当我编辑属性时,我可以像使用“图像”选项卡一样将图像拖动到选项卡中,但是,图像从未出现在那里。我猜这是因为默认图像处理程序没有接收请求。错误是:
无法将请求送达
/content/my site/home page/en_us/jcr:content/logo.img.png in
org.apache.sling.servlets.get.DefaultGetServlet
当我查看内容节点时,没有sling:resourceType
。当我添加了foundation/components/adaptiveimage
资源类型时,它就工作了。但是,我注意到“Image”节点没有sling:resourceType
。我猜基础页中的logo.img.png.jsp
文件来处理请求,但这似乎不起作用
如何让AEM添加
sling:resourceType
或处理请求?使用图像小部件控件时有点麻烦——只有图像组件可以很好地处理数据,而处理“.img”的servlet与图像组件resourceType绑定
最简单的方法是只使用fileReference属性的值,而不是将图像作为页面的一部分引用。因为您使用的是DAM的资产,所以这是一种合理的方法
这并不能解决用户直接上传图像的问题。我想建议使用一个像“/logo/sling:resourceType”这样的隐藏字段,但在本地进行测试会导致在试图保存对话框时出错
另一种方法是:
<sling:include resourceType="foundation/components/adaptiveimage" resource="${resource.path}/logo" />
(假设资源是jcr:content)。这实际上与添加sling:resourceType相同,但至少有两个缺点:
此时图像将成为可创作的,而不是在对话框中
此方法仅适用于呈现普通标记。它不适用于任何类型的背景图像
好吧,经过一段时间的实验,这就是我最终要做的,让它工作。如果有更简单的方法,我很乐意知道
首先,我复制了/libs/foundation/components/page/img.png.java
文件,并对其进行了一些修改,将其添加到我的编译包中
@SlingServlet(
resourceTypes = "sling/servlet/default",
selectors = "imgnode",
extensions = {"png","jpg","jpeg","gif"},
methods = "GET"
)
public class SimpleImageServlet extends AbstractImageServlet {
其中img.png.java
有以下行:
Image image = new Image(c.resource, "image");
我把它改成:
Image image = new Image(c.resource);
这依赖于SCR注释来生成OSGi配置,因此此servlet将使用imgnode
选择器处理图像请求。它不需要查找子图像
节点,只需要当前资源是图像
第二,我在页面组件的body.jsp覆盖中添加了一个组件,如下所示
<cq:include path="logo" resourceType="/apps/my-site/components/logo" />
我相信这一步将是类似的,如果自适应图像被覆盖。您只需要呈现包含imgnode
选择器的URL
Fourth,我在页面属性中设置logo image对话框选项卡,以使用预期的requestSuffix
,并将其他属性设置为指向logo子节点
示例:
requestSuffix = "/logo.imgnode.png"
fileReferenceParameter = "./logo/fileReference"
requestSuffix = ".imgnode.png"
fileReferenceParameter = "./fileReference"
Fifth,我确保/apps/my site/components/logo
组件的图像对话框选项卡指向自身
示例:
requestSuffix = "/logo.imgnode.png"
fileReferenceParameter = "./logo/fileReference"
requestSuffix = ".imgnode.png"
fileReferenceParameter = "./fileReference"
现在,无论是在页面属性、组件编辑还是最终呈现中,图像都得到了适当的处理。我遇到了类似的问题,我找到了一种更简单的解决方法。您只需在您的徽标
图像下添加一个隐藏的x类型,如下所示:
<yourlogo
jcr:primaryType="cq:Widget"
<-- other properties -->
xtype="html5smartimage">
<items jcr:primaryType="cq:WidgetCollection">
<resType
jcr:primaryType="cq:Widget"
ignoreData="{Boolean}true"
name="./logo/sling:resourceType"
value="foundation/components/image"
xtype="hidden"/>
</items>
</yourlogo>
感谢您提供这些有用的信息。然而,我无法让这两个工作的网页编辑和网页属性。我尝试将资源
更改为路径
,这在页面中起到了一定的作用,但我无法使组件和页面对话框协调工作。我想知道您是否有机会查看我下面的答案?祝你愉快:我对这种方法很感兴趣。我会尝试一下,如果可行的话,我会选择这个作为答案。这很有效,而且似乎是实现目标最干净、最自然的方式。FWIW,让我恼火的一件事是Chrome中“fallbackUrl”的JavaScript错误。第一幅图像的默认格式副本后缀为“/jcr:content/renditions/cq5dam.web.1280.1280”,如果不存在,则返回“/\u jcr\u content/renditions/original”。然而,在Chrome中,回退失败。(CQ 5.6.1)使用FF或在覆盖的adaptiveimage对话框图像中添加renditionSuffix=“/\u jcr\u content/renditions/original”,解决了该问题。这种方法对我很有效。我该如何处理触摸界面的问题?@saravana很长时间没有使用CQ5,所以不知道如何处理触摸界面的问题@团当,我也发现了如何在触摸屏上实现这一点。与图像节点并行,需要创建具有隐藏属性和值集的重新类型节点。