Projets proposés
À l'issue du vote des Targéens, voici le palmarès des projets en fonction du nombre de votes obtenus.
Une erreur s'est produite lors du traitement du gabarit.
The following has evaluated to null or missing: ==> listTags[1] [in template "10108#1166444#6869110" at line 65, column 62] ---- Tip: It's the final [] step that caused this error, not those before it. ---- Tip: If the failing expression is known to 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: #assign etiquette = listTags[1].getNa... [in template "10108#1166444#6869110" at line 65, column 41] ----
1<#function getField fields name>
2 <#if fields?is_sequence>
3 <#list fields as field>
4 <#if field.getName() == name>
5 <#return field.getValue().getString(local)>
6 </#if>
7 </#list>
8 </#if>
9</#function>
10
11<#function getImageURL rootElement name>
12 <#assign
13 xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='${name}']")
14 Visuel = xPathSelector.selectSingleNode(rootElement)
15 >
16 <#return Visuel.getStringValue()>
17</#function>
18
19<#if serviceLocator??>
20 <#assign assetTagLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService")>
21</#if>
22
23<#-- Filter by tag (reload the agregator) -->
24<#assign selectedTag = '' />
25<#if currentURL?contains("p_r_p_categoryId") >
26 <#assign selectedTag = request.getParameter("p_r_p_categoryId") />
27 <!-- Param selected : ${selectedTag} -->
28<#else>
29 <!-- No Param selected -->
30 <#assign selectedTag = '' />
31</#if>
32
33<#assign allTags = portletPreferences['queryValues0'] />
34<#if allTags?has_content >
35 <article class="category-navigator">
36 <@displayTags allTags />
37 </article>
38</#if>
39
40<article class="cagc-general-aggregator cagc-filtered-aggregator">
41 <#if entries?has_content>
42
43 <ul class="asset-card-list">
44
45 <#list entries as curEntry>
46 <#assign
47 renderer = curEntry.getAssetRenderer()
48 className = renderer.getClassName()
49 />
50
51 <#if className == "com.liferay.journal.model.JournalArticle">
52
53 <#assign
54 journalArticle = renderer.getArticle()
55 document = saxReaderUtil.read(journalArticle.getContent())
56 rootElement = document.getRootElement()
57 fields = renderer.getDDMFormValuesReader().getDDMFormValues().getDDMFormFieldValues()
58
59 <#-- Get the tag (etiquette) of the current entry -->
60 etiquette = ''
61 listTags = assetTagLocalService.getAssetEntryAssetTags(curEntry.getEntryId())
62 />
63
64 <#if listTags?size != 0 >
65 <#assign etiquette = listTags[1].getName() /> <#-- TODO : change 1 to 0 -->
66 </#if>
67
68 <#if etiquette == selectedTag || selectedTag == ''>
69 <li class="component-card text-break">
70 <#-- ------- initialisation des champs structure ---------------- -->
71 <#assign
72 NumeroDuProjet = "${getField(fields, 'NumeroDuProjet')}"
73 NombreDeVotes = "${getField(fields, 'NombreDeVotes')}"
74 Thematique = "${getField(fields, 'Thematique')}"
75 NomDuProjet = "${getField(fields, 'NomDuProjet')}"
76 Resume = "${getField(fields, 'Resume')}"
77 Description = "${getField(fields, 'Description')}"
78 Chiffrage = "${getField(fields, 'Chiffrage')}"
79 IllustrationProjet= "${getImageURL(rootElement, 'IllustrationProjet')}"
80 Localisation = "${getImageURL(rootElement, 'Localisation')}"
81 >
82
83 <#if IllustrationProjet?trim!= "">
84 <#assign
85 pageObject1 = jsonFactoryUtil.createJSONObject(IllustrationProjet)
86 localGroupId = pageObject1.getLong('groupId')
87 localUuid = pageObject1.getString('uuid')
88 IllustrationProjet = "/c/document_library/get_file?uuid=${localUuid}&groupId=${localGroupId}"
89 >
90 </#if>
91 <#if Localisation?trim!= "">
92 <#assign
93 pageObject2 = jsonFactoryUtil.createJSONObject(Localisation)
94 localGroupId = pageObject2.getLong('groupId')
95 localUuid = pageObject2.getString('uuid')
96 Localisation = "/c/document_library/get_file?uuid=${localUuid}&groupId=${localGroupId}"
97 >
98 </#if>
99 <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, curEntry) />
100
101 <#-- ------- gabarit d affichage ---------------- -->
102
103 <div class="card card-full">
104 <#if IllustrationProjet?trim != "">
105 <img alt="" class="image-size" src="${IllustrationProjet}" />
106 </#if>
107 <#if NumeroDuProjet?trim != "">
108 <p class="numeroDuProjet">${NumeroDuProjet}</p>
109 </#if>
110 <div class="card-body cardbody">
111 <div class="info">
112 <#if NombreDeVotes?trim != "">
113 <p class="nombreDeVotes">Nb points : ${NombreDeVotes}</p>
114 <#else>
115 <p class="nombreDeVotes">Nb points : 0</p>
116 </#if>
117 <#if NomDuProjet?trim != "">
118 <h2 class="headnews" >
119 ${NomDuProjet}
120 </h2>
121 </#if>
122 <div class="ctn-resume">
123 <#if Resume?trim != "">
124 <p class="resume">${Resume}</p>
125 </#if>
126 </div>
127 <#if etiquette != "" >
128 <div class="status">
129 <p class="etiquette">${etiquette}</p>
130 </div>
131 </#if>
132 <div class="test-loc">
133 <div class="ctn-thematique">
134 <#if Thematique?trim != "">
135 <p class="thematique">${Thematique}</p>
136 </#if>
137 </div>
138 <div class="ctn-read-more">
139 <a class="read-more" href="${viewURL}">[+]</a>
140 </div>
141 </div>
142 </div>
143 </div>
144 <a class="overlay" tabindex="-1" href="${viewURL}<#if themeDisplay?has_content>?backUrl=${themeDisplay.getURLCurrent()}</#if>"></a>
145 </div>
146 </li>
147 </#if>
148 </#if>
149 </#list>
150 </ul>
151 </#if>
152</article>
153
154<#macro displayTags tags >
155 <#if tags?has_content>
156 <section class="cagc-block mt-4 mb-4">
157 <#assign allTagURL = renderResponse.createRenderURL().toString()?keep_before("?") />
158 <#assign selected = "" />
159 <#if selectedTag == "">
160 <#assign selected = "selected" />
161 </#if>
162
163 <a class="link-button ${selected}" href="${allTagURL}">
164 <@liferay_ui.message key="all"></@liferay_ui.message>
165 </a>
166 <#list tags as tagName>
167 <#assign tagURL = "?" + "p_r_p_categoryId=" + tagName />
168 <#assign selected = "" />
169 <#if selectedTag == tagName>
170 <#assign selected = "selected" />
171 </#if>
172 <a class="link-button ${selected}" href="${tagURL}">${tagName}</a>
173 </#list>
174 </section>
175 </#if>
176</#macro>
177
178<style>
179 #p_p_id${renderResponse.getNamespace()} .taglib-categorization-filter {display:none;}
180
181 article.category-navigator .cagc-block{
182 text-align: center;
183 margin-bottom: 30px !important;
184 }
185 article.category-navigator .link-button{
186 color: #555;
187 padding: 3px 4px;
188 border: 1px solid #555;
189 margin: 5px 5px;
190 text-transform: uppercase;
191 display: inline-block;
192 border-radius: 5px;
193 }
194
195 article.category-navigator .selected {
196 background-color: #ffe604;
197 color: black;
198 }
199
200 article.category-navigator .link-button:hover {
201 color: white;
202 background-color: #c10076;
203 text-decoration: none;
204 }
205 article.cagc-general-aggregator ul.asset-card-list {
206 list-style: none;
207 width: 100%;
208 margin-bottom: 100px;
209 padding: 0;
210 display: grid;
211 grid-template-columns: repeat(5, 1fr);
212 grid-column-gap: 15px;
213 grid-row-gap: 20px;
214 grid-auto-rows: 1fr;
215 }
216 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full {
217 position: relative;
218 margin: 0;
219 overflow: hidden;
220 width: 100%;
221 height: 100%;
222 border-radius: 0;
223 border: none;
224 display: grid;
225 grid-template-columns: 1fr;
226 grid-template-rows: 1fr 2fr;
227 background-color: #fdfdfd;
228 border: 1px solid #f1f1f1;
229 }
230 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full img {
231 width: 100%;
232 height: 100%;
233 }
234 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full .card-body {
235 padding: 0.5rem;
236 padding-top: 0;
237 }
238 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full p.numeroDuProjet {
239 position: absolute;
240 left: 10px;
241 top: 10px;
242 background-color: white;
243 width: 30px;
244 height: 30px;
245 font-size: 18px;
246 font-weight: bold;
247 line-height: 30px;
248 border: 1px solid silver;
249 border-radius: 50%;
250 text-align: center;
251 }
252 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full p.nombreDeVotes {
253 text-align: right;
254 }
255 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full .card-body .info {
256 display: flex;
257 flex-direction: column;
258 justify-content: space-between;
259 align-items: stretch;
260 }
261
262 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full .card-body .description{
263 text-align: justify;
264 padding-bottom: 10px;
265 }
266 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full .card-body .card-text {
267 height: calc(12 * 1.2rem);
268 line-height: 1.3rem;
269 overflow: hidden;
270 }
271 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full .card-body div.ctn-resume {
272 margin-bottom: 15px;
273 height: 55px;
274 }
275 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full .card-body div.test-loc {
276 display: flex;
277 justify-content: space-between;
278 align-items: center;
279 }
280 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full .card-body p.resume{
281 line-height: 12px;
282 }
283 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full .card-body div.status {
284 border: 1px solid black;
285 text-align: center;
286 background-color: #ffe604;
287 position: relative;
288 }
289 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full .card-body p.etiquette {
290 color: black;
291 }
292 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full .card-body a.read-more {
293 font-size: calc(28 * calc(1rem / 25));
294 }
295 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full a.overlay {
296 position: absolute;
297 bottom: 0;
298 height: 0;
299 width: 100%;
300 }
301 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full:focus-within a.overlay,
302 article.cagc-general-aggregator ul.asset-card-list li.component-card .card-full:hover a.overlay {
303 background-color: #c10076;
304 opacity: 0.75;
305 z-index: 10;
306 height: 100%;
307 }
308
309</style>
À l'issue du vote des Targéens, voici le palmarès des projets en fonction du nombre de votes obtenus.
Formulaire de vote
Vous n'avez pas le role requis pour accéder à cette application.