Как использовать API, создавая модель содержимого, и с помощью шаблона FreeMarker генерировать HTML на основе модели в Crafter CMS - PullRequest
0 голосов
/ 20 февраля 2019

Я могу получить 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 голосов
/ 24 февраля 2019

Какой у вас сейчас отличный скрипт?Кроме того, используете ли вы CrafterCMS 3.x?

Если у вас уже есть его в качестве REST-скрипта, возможно, проще всего будет отрисовать его на стороне клиента, вызвав вашу службу через JavaScript (т.е. AJAX).Затем вы можете использовать данные вызова для отображения страницы любым удобным для вас способом - например, React, Vue, jQuery.Если вы сделаете это, лучше всего возвращать JSON вместо XML.

Если вы хотите пойти по пути FTL, насколько я понимаю из вашего вопроса, звучит так, как будто вы должны сделать свой отличный скриптскрипт контроллера.Они должны возвращать путь к FTL, который вы хотите визуализировать, и они должны быть в {site}/scripts/controllers/*.Из шаблона вы можете получить доступ к templateModel и любым реквизитам, которые вы там вставили.

Посмотрите документы: https://docs.craftercms.org/en/3.0/developers/projects/engine/api/groovy-api.html

Вторая часть вашего вопроса...

Может ли кто-нибудь помочь мне, как я могу создать модель содержимого, создать элементы содержимого с использованием этой модели и сделать так, чтобы шаблон FreeMarker генерировал HTML на основе модели.

В общем, для создания моделей контента вам нужно перейти на site config > content types > "Create new type".При создании нового типа вы должны связать модель (тип содержимого) с шаблоном.Затем, чтобы создать элементы контента, вы переходите на панель мониторинга своего сайта, и в дереве Pages вы щелкаете правой кнопкой мыши, чтобы создать New Content и выбираете свой недавно созданный тип контента.С этого момента все работает автоматически (FTL, рендеринг, переменные модели, доступные из вашего FTL и т. Д.)

Вы также можете создавать компоненты вместо страниц, если они больше подходят для того, что вы делаете.

...