Можно встраивать как инстансебл портлет, так и нонинстансебл. Во втором случае проще в том плане, что не нужно добалвлять суфикс _INSTANCE_ + айди инстанции.
Вот пример для инстансебл, как более сложного варианта:
Мы настраиваем сначала портлет с помошью предопределенной велосити переменной $velocityPortletPreferences, поскольку она одна для всех портлетов, которые мы пожелаем встроить в тему, то каждый портлет должен ее после себя чистить, что мы и делаем последней строкой.
Таксь, теперь по поводу подводных камней. Если мы используем реальный $instanceId, то наши свойства, которые мы устанавливаем в теме, перекрываются теми из базы данный, которые были определены для портлета, вставленного на какую-то страницу руками. Тоесть чтобы применить все-таки свои свойства из темы, нужно задавать $instanceId, которого нет у портала, так инстанция воспринимается как новая и именно параметры из темы применяются.Вот пример для инстансебл, как более сложного варианта:
#set ($VOID = $velocityPortletPreferences.setValue('display-style', '1'))
#set ($VOID = $velocityPortletPreferences.setValue('portlet-setup-show-borders', 'false'))
#set ($instanceId = 'E3j7')
#set ($queryString = "param1=value1¶m2=value2")
#set ($myPortletId = "73_INSTANCE_${instanceId}")
#set $theme.runtime($myPortletId, $queryString, $velocityPortletPreferences.toString())
#set ($VOID = $velocityPortletPreferences.reset())
Кодовое слово $VOID позволяет то что возвращает метод не выводить в ответ сервера, заглатывать это в "черную дыру".
Комментариев нет:
Отправить комментарий