Java API

В этой статье вы узнаете, как использовать Java API для создания запросов к контенту DC CMS.

Создание запроса для контента на основе структуры

Приведенные ниже примеры кода используют Site Item Service в CMS Engine для получения контента.

def topNavItems = [:]
def siteDir = siteItemService.getSiteTree("/site/website", 2)

if (siteDir) {
    def dirs = siteDir.childItems
    dirs.each { dir ->
        def dirName = dir.getStoreName()
        def dirItem = siteItemService.getSiteItem("/site/website/${dirName}/index.xml")
        if (dirItem != null) {
            def dirDisplayName = dirItem.queryValue('internal-name')
            topNavItems.put(dirName, dirDisplayName)
        }
    }
}

return topNavItems

Copy-icon

Создание запроса для контента на основе структуры с фильтром

Примеры кода, расположенные ниже, используют Site Item Service в CMS Engine для извлечения контента. В этих примерах мы расширяем функциональность Site Item Service, извлекая объекты определенной ветки репозитория. Мы достигаем этого, применяя фильтр к каждому объекту заранее, который определяет, должен ли объект быть включен в результат. Эти фильтры применяются на основе различных критериев, таких как путь, содержимое или внешние факторы.

В приведенном ниже примере мы создаем собственный фильтр на основе интерфейса ItemFilter. Вы также можете использовать “коробочные” фильтры, если они вам подходят.

import ru.dc.cms.core.service.ItemFilter
import ru.dc.cms.core.service.Item
import java.util.List


def result = [:]
def navItems = [:]
def siteDir = siteItemService.getSiteTree("/site/website", 2, new StartsWithAItemFilter(), null)

if (siteDir) {
    def dirs = siteDir.childItems
    dirs.each { dir ->
            def dirName = dir.getStoreName()
            def dirItem = siteItemService.getSiteItem("/site/website/${dirName}/index.xml")
            if (dirItem != null) {
                def dirDisplayName = dirItem.queryValue('internal-name')
                   navItems.put(dirName, dirDisplayName)
            }
   }
}
result.navItems = navItems

return result


/**
 * Define a filter that returns only items that have a name that starts with "A" or "a"
 */
class StartsWithAItemFilter implements ItemFilter {

    public boolean runBeforeProcessing() {
        return true
    }

    public boolean runAfterProcessing() {
        return false
    }

    public boolean accepts(Item item, List acceptedItems, List rejectedItems, boolean runBeforeProcessing) {

      if (item.getName().toLowerCase().startsWith("a")) {
          return true
      }

      return false
    }
 }

Copy-icon

Создание запроса к полям в объекте контента

В примере кода ниже для получения контента используется Site Item Service в CMS Engine:

def result = [:]
def segment = "a segment value" // could come from profile, query param etc

// load a specific content object
def itemDom = siteItemService.getSiteItem("/site/components/sliders/default.xml")

// query specific values from the object
result.header = itemDom.queryValue("/component/targetedSlide//segment[contains(.,'" +  segment + "')]../label")
result.image = itemDom.queryValue("/component/targetedSlide//segment[contains(.,'" +  segment + "')]/../image")

return result

Copy-icon

Связанные статьи

API