Java API
Создание запроса для контента на основе структуры
Приведенные ниже примеры кода используют 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
Создание запроса для контента на основе структуры с фильтром
Примеры кода, расположенные ниже, используют 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
}
}
Создание запроса к полям в объекте контента
В примере кода ниже для получения контента используется 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