0

在 HippoCMS 中,我创建了 Document Type 并希望提供列出所有可用页面的动态字段,就像在 CMS 中通过 Channel Manager 创建新页面时一样(单击页面按钮时,会列出所有可用页面)。我可以通过解析forge-sitemap-based-on-hst-configuration-feed提供的 sitemap.xml 来检索列表,但似乎必须有更好的方法来做到这一点。我找不到任何关于它的信息。请帮助我谁可以。

4

2 回答 2

0

Hippo CMS 本质上是基于内容的 CMS。这意味着虽然您可以查看页面,但页面本身并不存在。您可以检查站点地图插件中的代码以查看其完成方式,但基本上您必须检查所有文档以查看它们是否被映射,以及所有映射以查看是否有文档。您必须检查两种方式,因为可以在模式上完成映射并且根本不需要参考任何文档。当然,这是针对一般情况的,您的情况可能更简单。

于 2015-08-31T11:11:52.393 回答
0

最后,我想出了如何以编程方式(使用相关的页面标题)检索站点地图项(url)。
1) 添加属性hst:componentconfigurationid = hst:components/forge-sitemap-based-on-hst-configuration-feed/hst:hst/hst:configurations/hst:default/hst:sitemap/sitemap.xml
2) 创建组件这将处理请求:

public class SitemapComponent extends CommonComponent{
  @Override
  public void doBeforeRender(final HstRequest request, final HstResponse response) throws HstComponentException {
    super.doBeforeRender(request, response);

    final Map<String, String> items = new HashMap<String, String>();

    List<HstSiteMapItem> siteMapItems = getHstSite(request).getSiteMap().getSiteMapItems();
    crawlSitemapItems(request, siteMapItems, items);

    request.setAttribute(REQUEST_ATTR_DOCUMENT, items);
  }

  public void crawlSitemapItems(HstRequest request, List<HstSiteMapItem> siteMapItems, Map<String, String> items) {
    HstRequestContext ctx = request.getRequestContext();

    for (HstSiteMapItem siteMapItem : siteMapItems) {
        if (siteMapItem.getPageTitle() != null) {
            HstLink link = ctx.getHstLinkCreator().create(siteMapItem, getMount(request));

            if (!link.getPath().isEmpty()) {
                int index = link.getPath().indexOf("/");
                if (index > -1) {
                    items.put(link.getPath(), siteMapItem.getPageTitle());
                }

                List<HstSiteMapItem> children = siteMapItem.getChildren();
                if (!children.isEmpty()) {
                    crawlSitemapItems(request, children, items);
                }
            }
        }
    }
  }
}

3) 将hst:componentclassname = com.test.cms.components.SitemapComponent设置为所需的 hst:component

于 2015-09-06T17:11:32.687 回答