如何通过创建内容模型来使用API​​,并让FreeMarker模板在Crafter CMS中基于该模型生成HTML

时间:2019-02-20 07:45:52

标签: crafter-cms

我能够获得以下groovy脚本返回的xml。但是,如何获取页面内的输出? 谁能帮助我如何创建内容模型,使用该模型创建内容项以及让FreeMarker模板基于该模型生成HTML。

谢谢。

 import org.craftercms.core.cache.CacheLoader
 import org.craftercms.core.service.CachingOptions
 import groovy.json.JsonSlurper

 def cacheService = applicationContext["crafter.cacheService"]
 def cacheContext = siteContext.getContext()
 def myCacheKey = "aServiceCallResponse"
 def loader = new ExternalServiceLoader()
 def value = ""
 def responseItem = cacheService.get(cacheContext, myCacheKey)

 if(responseItem == null) {
    def myObject = loader.load()
    value = myObject

    // cache the value with a loader to periodically refresh its value
    def cachingOptions = CachingOptions.DEFAULT_CACHING_OPTIONS
    try {
        cacheService.put(cacheContext, myCacheKey, myObject, [], cachingOptions, loader)
    }
    catch(err) {
        logger.error("error adding ${myCacheKey} to cache: ${err}")
     }
 }
 else {
    value = responseItem
 }
 return value

 class ExternalServiceLoader implements CacheLoader {

 Object load(Object... parameters) throws Exception {
       def externalServiceHost = "http://api.population.io/1.0"
       def externalServiceURL = "/population/United%20States/today-and-tomorrow/"
       // call the service
       def response = (externalServiceHost+externalServiceURL).toURL().getText()
       // parse service's the JSON response to an object
       def result = new JsonSlurper().parseText( response )
       return result
    }
 }

1 个答案:

答案 0 :(得分:2)

您当前拥有哪种常规脚本?另外,您是否在使用CrafterCMS 3.x?

如果您已经将其作为REST脚本使用,则最简单的方法可能是通过JavaScript(即AJAX)调用服务来将其呈现为客户端。然后,您可以使用通话中的数据以您喜欢的任何方式呈现页面-例如React,Vue,jQuery。如果这样做,最好返回JSON而不是XML。

据我对问题的理解,如果您想走FTL的道路,听起来您需要将groovy脚本用作控制器脚本。那些需要将路径返回到要呈现的FTL,并且它们必须位于{site}/scripts/controllers/*中。然后,您可以从模板访问templateModel以及放置在其中的所有道具。

看看文档:{​​{3}}

问题的第二部分...

  

任何人都可以帮助我如何创建内容模型,使用该模型创建内容项以及让FreeMarker模板基于该模型生成HTML。

通常,要创建内容模型,请转到site config > content types > "Create new type"。创建新类型时,必须将模型(内容类型)与模板相关联。然后,要创建内容项,请转到站点仪表板,然后从Pages树中右键单击以创建New Content,然后选择您最近创建的内容类型。从那里开始,一切都会自动运行(FTL,渲染,FTL中可用的模型变量等)

如果更适合您的工作,您也可以创建组件而不是页面。