0

HippoCMS で Document Type を作成し、CMS の Channel Manager で新しいページを作成するときと同じように、使用可能なすべてのページをリストする動的フィールドを提供したいと考えています (ページ ボタンをクリックすると、使用可能なすべてのページのリストが表示されます)。forge-sitemap-based-on-hst-configuration-feedが提供する sitemap.xml を解析することでリストを取得できますが、もっと良い方法が必要なようです。それに関する情報は見つかりませんでした。できる人を助けてください。

4

2 に答える 2

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 に答える