Projets proposés
À l'issue du vote des Targéens, voici le palmarès des projets en fonction du nombre de votes obtenus.
Contenu avec Participation citoyenne Patrimoine .
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.