如何在 Crafter 3.0 中进行 URL 映射

How to do URL mapping in Crafter 3.0

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

例如,要在给定路径(如 /site/website/foobar/mycontent/index.xml 中包含内容,并且其 url 为 /news/2017/11/17/my-content(请注意添加的 / 不能在 file-name 字段中使用,因为它们会在工作室中自动转换为 -)。

谢谢,

尼古拉斯

内置路由器在我们的路线图上 (https://github.com/craftercms/craftercms/issues/1622),但现在,您可以轻松地将其添加到您的蓝图中:

  1. 创建一个包含 "routing table" 的组件。这个组件 有一个重复的 table,其中每个条目都是入站 URL 并且 出站 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)
    }