如何在Crafter 3.0中进行URL映射

时间:2017-11-17 16:03:09

标签: crafter-cms

我想知道crafter(3.0)是否有能力进行网址映射。

例如,要在/site/website/foobar/mycontent/index.xml之类的给定路径中添加内容,并将其网址设为/news/2017/11/17/my-content(请注意/中无法使用的file-name因为它们在工作室中自动转换为-

谢谢,

尼古拉斯

1 个答案:

答案 0 :(得分:2)

内置路由器位于我们的路线图(enter image description here)上,但就目前而言,您可以轻松地在蓝图中添加一个路由器:

  1. 创建一个包含"路由表"的组件。这个组件 有一个重复表,其中每个条目都是入站URL和 出站网址。
  2. 创建一个Groovy过滤器脚本,拦截所有调用和 检查URL是否与其中一个入站URL匹配。如果是的话,它 将请求转发到相应的出站URL。下面是 这种过滤器的可能代码:

    def routingTableItem = siteItemService.getSiteItem("/site/components/system/routing-table.xml")
    def routingTable = routingTableItem.urlRoutingTable.item
    def currentURL = request.requestURI
    
    def matchedEntry = routingTable.find { entry ->
        return currentURL == entry.inboundURL.text
    }
    
    if (matchedEntry) {
        def inboundURL = matchedEntry.inboundURL.text
        def outboundURL = matchedEntry.outboundURL.text
    
        logger.info("Forwarding URL ${inboundURL} to ${outboundURL}")
    
        request.getRequestDispatcher(outboundURL).forward(request, response)
    } else {
        filterChain.doFilter(request, response)
    }