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