menu
Fehler bei der Verarbeitung der Vorlage.
The following has evaluated to null or missing: ==> serviceLocator.findService("com.liferay.portlet.asset.service.AssetCategoryService") [in template "10155#10193#1370142" at line 57, column 33] ---- Tip: If the failing expression is known to be legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #global assetCategoryService = servic... [in template "10155#10193#1370142" at line 57, column 1] ----
1<#-- source on https://gist.github.com/evsi/4b05451cd38c417954df -->
2
3<#assign redirectURL = renderResponse.createRenderURL() />
4
5<style>
6 a .vs-com:hover {
7 text-decoration: none !important;
8 border: 1px solid #98796f;
9 padding: 9px;
10 }
11 .vs-com {
12 background-color: white;
13 overflow: hidden;
14 margin-bottom: 15px;
15 padding: 10px;
16 }
17 .vs-com-body {
18 overflow: hidden;
19 }
20 .vs-com-header{
21 font-size: 13px;
22 font-weight: normal;
23 font-style: italic;
24 color: #555555;
25 }
26 .vs-com-title{
27 font-size: 15px;
28 font-weight: bold;
29 color: #333333;
30 padding: 5px 0;
31 }
32 .vs-com-subtitle{
33 font-size: 14px;
34 font-weight: normal;
35 color: #333333;
36 padding: 5px 0;
37 }
38 .vs-com-content{
39 font-size: 14px;
40 font-weight: normal;
41 color: #333333;
42 }
43 .vs-com-footer{
44 font-size: 13px;
45 font-weight: normal;
46 font-style: italic;
47 padding-top: 10px;
48 }
49 .vs-com-img{
50 margin-right: 10px;
51 width: 200px !important;
52 }
53</style>
54<#assign lBiImage = "http://web.vs.ch/documents/804663/804682/bi-img" />
55<#assign lBiType = "BI" />
56<#assign lBiStructureId = 769975/>
57<#global assetCategoryService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetCategoryService")>
58<#global assetVocabularyService = serviceLocator.findService("com.liferay.portlet.asset.service.AssetVocabularyService")>
59<#global lClassNameLocalService = serviceLocator.findService("com.liferay.portal.service.ClassNameLocalService")>
60<#global lDDMStructureLocalService = serviceLocator.findService("com.liferay.portlet.dynamicdatamapping.service.DDMStructureLocalService")>
61<#assign lClassId = lClassNameLocalService.getClassNameId("com.liferay.portlet.journal.model.JournalArticle") />
62<#if entries?has_content>
63 <div class="ajax_list" data-listtype="url">
64 <#list entries as entry>
65 <#assign lChapo = "" />
66 <#assign entry = entry />
67 <#assign renderer = entry.getAssetRenderer() >
68 <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry) />
69 <#assign className = renderer.getClassName() >
70 <#if className == "com.liferay.portlet.journal.model.JournalArticle" >
71 <#assign journalArticle = renderer.getArticle() >
72 <#assign lStructureId = journalArticle.getStructureId() />
73 <#assign lStructure = lDDMStructureLocalService.getStructure(themeDisplay.getCompanyGroupId(),lClassId,lStructureId?string) />
74 <#assign lStructureName = lStructure.getName()?trim />
75
76 <#assign document = saxReaderUtil.read(journalArticle.getContent()) >
77 <#assign rootElement = document.getRootElement() >
78 <#-- <#assign xPathSelectorImage = saxReaderUtil.createXPath("dynamic-element[@name='Image']") > -->
79 <#assign xPathSelectorImage = saxReaderUtil.createXPath("dynamic-element[@name='Image']/dynamic-content[@language-id='" + entry.getDefaultLanguageId() + "']") >
80 <#if lStructure.getStructureId() == lBiStructureId>
81 <#assign image = lBiImage />
82 <#else>
83 <#if xPathSelectorImage.selectSingleNode(rootElement)?? >
84 <#if xPathSelectorImage.selectSingleNode(rootElement).getStringValue()?trim != "" >
85 <#-- debug point -->
86 <#-- ${xPathSelectorImage.selectSingleNode(rootElement).getStringValue()} see the assign of xPathSelectorImage even if image is not translated it is encapsulated in a language xml dynamic element -->
87 <#-- /debug point -->
88 <#assign image = xPathSelectorImage.selectSingleNode(rootElement).getStringValue() >
89 <#else>
90 <#assign image = "noImage" >
91 </#if>
92 <#else>
93 <#assign image = "noImage" >
94 </#if>
95 </#if>
96
97 <#assign lChapoNode = getNodes("Lead", rootElement) />
98
99 <#if lChapoNode?size!=0>
100 <#assign lChapo = getStructureValue(lChapoNode[0], "fr_FR")/>
101 </#if>
102 <div class="ajax_list_item" data-classpk="${entry.getClassPK()}">
103 <a class="ajax_list_item_link" href="<@assetLinkNormal entry/>" >
104 <div class="vs-com">
105 <#if image != "noImage">
106 <span class="pull-left" >
107 <img class="vs-com-img" src="${image}"/>
108 </span>
109 </#if>
110 <div class="vs-com-body">
111 <div class="vs-com-header">
112 <@entryLinkCreator linkText="" entry=entry type="title" />
113 </div>
114 <#assign lTitle = entry.getTitle(locale) />
115 <#assign lShortTitle = getShortTitle(lTitle) />
116 <div class="vs-com-title">${lShortTitle}</div>
117 <#if lChapo??>
118 <#if lChapo!="">
119 <div class="vs-com-subtitle">${lChapo}</div>
120 </#if>
121 </#if>
122 <#assign eSummary = entry.getSummary(locale, true) />
123 <#if eSummary?has_content>
124 <#if eSummary!=lTitle>
125 <div class="vs-com-content">
126 ${eSummary}<br/>
127 <#--
128 <@entryLinkCreator linkText=" ... <i class='icon-chevron-sign-right'></i>" entry=entry type="" />
129 -->
130 </div>
131 </#if>
132 </#if>
133 </div>
134
135 </div>
136 </a>
137 </div>
138
139 </#if>
140 </#list>
141 </div>
142</#if>
143
144<#function getShortTitle pTitle=''>
145 <#local lResult = pTitle?trim />
146 <#-- Test if last 22 chars is a timestamp -->
147 <#local lMatch = lResult?matches("^.*([01][0-9]|2[0-3]):[0-5]\\d:[0-5]\\d$") />
148 <#if lMatch>
149 <#local lResult = lResult?substring(0,lResult?length-22) />
150 </#if>
151 <#return lResult />
152</#function>
153
154<#macro getCategoryDate entry>
155 <#assign lTypologie = "" />
156 <#assign lPouvoir = "" />
157 <#assign dateFormat = "dd.MM.yyyy" />
158 <#assign categories = entry.getCategories()>
159
160 <#list categories as category>
161 <#--
162 <#assign categoryURL = renderResponse.createRenderURL() />
163 -->
164 <#assign vocabulary = assetVocabularyService.getVocabulary(category.vocabularyId) />
165 <#if vocabulary.name = "020 Typologies">
166 <#assign lCategory = category.getDescription(themeDisplay.getLocale())?trim />
167 <#if lCategory=="" >
168 <#assign lCategory = category.getTitle(themeDisplay.getLocale())?trim />
169 </#if>
170 <#assign lTypologie = " | "+lCategory />
171 </#if>
172 <#if vocabulary.name = "010 Pouvoirs">
173 <#assign lCategory = category.getDescription(themeDisplay.getLocale())?trim />
174 <#if lCategory=="" >
175 <#assign lCategory = category.getTitle(themeDisplay.getLocale())?trim />
176 </#if>
177 <#assign lPouvoir = " | "+lCategory />
178 </#if>
179 </#list>
180 ${dateUtil.getDate(entry.getPublishDate(), dateFormat, locale)}
181 <#if lPouvoir??>
182 ${lPouvoir}
183 </#if>
184 <#if lTypologie??>
185 ${lTypologie}
186 </#if>
187
188</#macro>
189
190
191<#macro assetLinkNormal entry>
192 <#assign assetRenderer = entry.getAssetRenderer() />
193 <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry) />
194 <#if assetLinkBehavior != "showFullContent">
195 <#assign viewURL = assetRenderer.getURLViewInContext(renderRequest, renderResponse, viewURL) />
196 </#if>
197 ${viewURL}
198</#macro>
199
200
201<#macro entryLinkCreator entry linkText type>
202 <#--
203 <#assign entryRenderURL = renderResponse.createRenderURL() />
204 ${entryRenderURL.setParameter("struts_action", "/asset_publisher/view_content")}
205 ${entryRenderURL.setParameter("assetEntryId", entry.getEntryId()?string)}
206 ${entryRenderURL.setParameter("redirect", renderResponse.encodeURL("${currentURL}"))}
207 ${entryRenderURL.setParameter("portlet_id", "test")}
208 ${entryRenderURL.setWindowState("maximized")}
209 ${entryRenderURL.setParameter("type", entry.getAssetRendererFactory().getType())}
210 -->
211 <#assign assetRenderer = entry.getAssetRenderer() />
212 <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry) />
213 <#if assetLinkBehavior != "showFullContent">
214 <#assign viewURL = assetRenderer.getURLViewInContext(renderRequest, renderResponse, viewURL) />
215 </#if>
216 <#if type == "title">
217 <#-- <a href="${viewURL}"> -->
218 <@getCategoryDate entry/>
219 <#-- </a> -->
220 <#else>
221 <#-- <a href="${viewURL}"> -->
222 ${linkText}
223 <#-- </a> -->
224 </#if>
225</#macro>
226
227<#function getNodes pElementName pXmlContent>
228 <#assign lElementXPath = "dynamic-element[@name='"+pElementName+"']"/>
229 <#assign lXPathSelector = saxReaderUtil.createXPath(lElementXPath) />
230 <#assign lResult = lXPathSelector.selectNodes(pXmlContent) />
231 <#return lResult/>
232</#function>
233
234<#function getStructureValue pNode pDefaultLanguage>
235 <#assign lResult = "" />
236 <#assign lCurElementXPath = "dynamic-content[@language-id='" + locale + "']" />
237 <#assign lXPathSelector = saxReaderUtil.createXPath(lCurElementXPath) />
238 <#if lXPathSelector.selectSingleNode(pNode)??>
239 <#assign lValue = lXPathSelector.selectSingleNode(pNode) />
240 <#assign lResult = lValue.getStringValue() />
241 <#else>
242 <#assign lCurElementXPath = "dynamic-content[@language-id='fr_FR']" />
243 <#assign lXPathSelector = saxReaderUtil.createXPath(lCurElementXPath) />
244 <#if lXPathSelector.selectSingleNode(pNode)?? >
245 <#assign lValue = lXPathSelector.selectSingleNode(pNode) />
246 <#assign lResult = lValue.getStringValue() />
247 <#else>
248 <#assign lCurElementXPath = "dynamic-content[@language-id='" + pDefaultLanguage + "']" />
249 <#assign lXPathSelector = saxReaderUtil.createXPath(lCurElementXPath) />
250 <#assign lValue = lXPathSelector.selectSingleNode(pNode) />
251 <#assign lResult = lValue.getStringValue() />
252 </#if>
253 </#if>
254 <#return lResult?string />
255</#function>