我能够获得以下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
}
}
答案 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中可用的模型变量等)
如果更适合您的工作,您也可以创建组件而不是页面。