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