0

我是 Hippo CMS 的新手。我正在开发版本 10,我正在使用 angularJS 服务来使用我通过 HippoCms 创建的“横幅”的其余 url。

这是我通过 Hippo 的 Rest Api Manager 创建的横幅的 Rest URL:

http://localhost:8080/site/stbetrest/Banner?_type=json

我在使用链接时得到的响应是:

    {
        "pageSize": 10,
        "total": 3,
        "items": [
            {
                "content": "<![CDATA[\r\n\r\n          <p>Banner description</p>\r\n\r\n          \r\n]]>",
                "title": "Sample banner"
            },
            {
                "content": "<![CDATA[<p>10 Simple Steps to Green Your Office:</p>\n\n<p>&nbsp;</p>\n\n<p>
<img src=\"/site/pagenotfound\" /></p>]]>",
                "title": "10 Simple Steps to Green Your Office"
            },
            {
                "content": "<![CDATA[<p>How to Green Your Dorm Room</p>]]>",
                "title": "How to Green Your Dorm Room"
            }
        ],
        "currentPage": 1,
        "totalPages": 1
    }

这里的问题是我看不到我在 Hippo 的横幅文档中使用的图像。我想让这些图像/链接将它们加载到在 AngularJs 中创建的轮播中。请指导我如何将图像生成到上述横幅响应中。

更新:

尽管通过'localhost:8080 / cms'它显示上传的图像,但无法通过响应访问图像:

@XmlRootElement(name = "banner")
@XmlAccessorType(XmlAccessType.NONE)
@HippoEssentialsGenerated(internalName = "gogreen:bannerdocument")
@Node(jcrType = "gogreen:bannerdocument")
public class Banner extends BaseDocument {
    @XmlElement
    @HippoEssentialsGenerated(internalName = "gogreen:title")
    public String getTitle() {
        return getProperty("gogreen:title");
    }

    @XmlJavaTypeAdapter(HippoHtmlAdapter.class)
    @XmlElement
    @HippoEssentialsGenerated(internalName = "gogreen:content")
    public HippoHtml getContent() {
        return getHippoHtml("gogreen:content");
    }

    @HippoEssentialsGenerated(internalName = "gogreen:link")
    public HippoBean getLink() {
        return getLinkedBean("gogreen:link", HippoBean.class);
    }

    @XmlJavaTypeAdapter(KerkRestAdapter.class)
    @XmlElement
    @HippoEssentialsGenerated(internalName = "gogreen:image")
    public Kerk getImage() {
        return getLinkedBean("gogreen:image", Kerk.class);
    }
}

我的内容重写器是:

    public class RestContentRewriter extends SimpleContentRewriter {
   @Override
    protected String rewriteBinaryLink(String binaryLinkSrc, Node node, HstRequestContext requestContext, Mount targetMount) {
        return super.rewriteBinaryLink(binaryLinkSrc, node, requestContext, requestContext.getMount("site"));

    }

我的适配器是:

public class KerkRestAdapter extends XmlAdapter<String, HippoHtml> {

@Override
public HippoHtml unmarshal(String representation) throws Exception {
    throw new UnsupportedOperationException("Unmarshalling not implemented.");
}


@Override
public String marshal(HippoHtml html) throws Exception {
    if (html == null) {
        return null;
    }

    final HstRequestContext context = RequestContextProvider.get();
    //final RestContentRewriter contentRewriter = new RestContentRewriter();
    final ContentReWriter<String> contentRewriter = new RestContentRewriter();

    final String rewrite = contentRewriter.rewrite(html.getContent(), html.getNode(), context, context.getMount("api")); 
    return "<![CDATA[" + rewrite + "]]>";
}

}

附加问题:重写器中使用的挂载点是什么?(休息坐骑名称或gogreen??)

请帮忙 !

4

1 回答 1

1

您已使用 Essentials Rest 设置工具。这会生成一个示例或演示 Rest 实现。生成设置后,开发人员总是希望扩展和优化结果。

默认情况下,此设置中富文本内的链接是为当前挂载生成的,即其余挂载。由于无法通过 rest mount 获得图像,因此 HST 生成了 /pagenotfound URL。

如果您检查 bean 的 Banner,您会看到 HippoHtml 字段使用了 HippoHtmlAdapter。检查它的代码:它使用 SimpleContentRewriter。创建您自己的适配器版本并使用 ContentRewriter 的扩展版本。覆盖#rewriteBinaryLink 方法。在其中调用 super 方法,但将站点挂载指定为目标挂载。

我认为将 hst:alias 添加到站点挂载是一个好主意,因此您可以使用别名引用站点。

于 2015-11-10T12:15:31.490 回答