menu
Edito de Jacques Melly, Conseiller d'Etat
Créé en 1962, le service de la protection de l’environnement (SPE) fête en cette année ses 50 ans d'activité.
Lire la suite...
Une erreur s'est produite lors du traitement du gabarit.
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>