

An error occurred while processing the template.
The following has evaluated to null or missing:
==> structuredContentFields?filter(f -> f.getName() == "customDisplayPage")?first [in template "44549#44620#98653" at line 39, column 30]
----
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: customDisplayPageField = structuredCo... [in template "44549#44620#98653" in function "getCustomDisplayPageUrl" at line 39, column 5]
----
1<#assign
2 structuredContentResource = resourceLocator.locate("/headless-delivery/v1.0", "StructuredContent")
3/>
4
5<#attempt>
6<#assign
7 categories = restClient.get("/headless-admin-taxonomy/v1.0/taxonomy-vocabularies/" + 64873 + "/taxonomy-categories?fields=id&restricFields=actions,availableLanguages,taxonomyCategoryUsageCount&page=1&pageSize=30").items
8/>
9<#recover>
10 <#assign categories = [5] />
11</#attempt>
12
13<#function getVocabularyCategoriesIds>
14 <#attempt>
15 <#return categories?map(category -> category.id?number)/>
16 <#recover>
17 <#return 5 />
18 </#attempt>
19</#function>
20
21<#function getPressTopicsFilterEndpoint structuredContent>
22<#attempt>
23<#local
24 structuredContentCategoriesIds = structuredContent.getTaxonomyCategoryBriefs()![]
25 ?map(taxonomyCategoryBrief -> taxonomyCategoryBrief.getTaxonomyCategoryId()!"")
26 ?filter(id -> id?has_content)
27 pressTopicsCategoriesId = getVocabularyCategoriesIds()![]
28 categoryId = (structuredContentCategoriesIds?filter(c -> pressTopicsCategoriesId?seq_contains(c))?first)!5
29 />
30<#recover>
31<#local categoryId = 5 />
32</#attempt>
33<#return "/-/categories/" + categoryId/>
34</#function>
35
36<#function getCustomDisplayPageUrl structuredContent>
37 <#local
38 structuredContentFields = structuredContent.getContentFields()
39 customDisplayPageField = structuredContentFields?filter(f -> f.getName() == "customDisplayPage")?first
40 />
41 <#return customDisplayPageField.getContentFieldValue().getLink()/>
42</#function>
43
44<#function getPressViewUrl structuredContent>
45 <#local
46 friendlyUrl = "/w/" + structuredContent.getFriendlyUrlPath()
47
48 categoryFilterEndpoint = getPressTopicsFilterEndpoint(structuredContent)
49 customDisplayPageUrl = getCustomDisplayPageUrl(structuredContent)!""
50 />
51 <#return customDisplayPageUrl?has_content?then(customDisplayPageUrl, friendlyUrl) + categoryFilterEndpoint/>
52</#function>
53
54<#assign images_path = "/documents/d/guest/" />
55<#assign total = searchContainer.getTotal() />
56<#assign start = searchContainer.getStart() />
57<#assign delta = searchContainer.getDelta() />
58<#assign totalPages = (total/delta)?ceiling />
59<#assign currentPage = ((start+1)/delta)?ceiling />
60<#assign isFirstPage = currentPage == 1 />
61<#assign isLastPage = currentPage == totalPages />
62<#assign iteratorURL = searchContainer.getIteratorURL().toString() />
63<#assign iteratorURL += iteratorURL?contains("?")?then("", "?") />
64<#assign firstPageURL = iteratorURL + '&start=1'/>
65<#assign lastPageURL = iteratorURL + '&start=' + totalPages?string/>
66<#assign previousURL = iteratorURL + '&start=' + (currentPage - 1)?string />
67<#assign nextURL = iteratorURL + '&start=' + (currentPage + 1)?string />
68
69<#assign startPage = (currentPage < 3)?then(1, currentPage - 1) />
70<#assign endPage = 2 + startPage />
71<#assign endPage = (totalPages < endPage)?then(totalPages, endPage) />
72<#assign diff = startPage - endPage + 2 />
73<#assign startPage -= (startPage - diff > 0)?then(diff, 0) />
74
75<#assign
76 categoriesIds = getVocabularyCategoriesIds()
77/>
78
79<div class="vale-widget-resultados-busca-imprensa">
80 <div class="d-sm-flex justify-content-between flex-wrap">
81 <#if entries?has_content >
82 <#list entries as entry >
83 <#if entry.getTitle()?has_content >
84 <#assign
85 structuredContent = structuredContentResource.getStructuredContent(entry.getClassPK())
86 url = getPressViewUrl(structuredContent)
87 structuredContentDataField = structuredContent.getContentFields()?filter(
88 field -> field.name == "data"
89 )?first
90 data = structuredContentDataField.getContentFieldValue().getData()?datetime.iso
91 date_localized = dateUtil.formatDate("yyyyMMdd", data?string("yyyyMMdd"), locale)
92 />
93 <#attempt>
94 <#assign
95 taxonomyCategory = structuredContent.getTaxonomyCategoryBriefs()?filter(category -> categoriesIds?seq_contains(category.getTaxonomyCategoryId()))?first
96 categoryName = taxonomyCategory.getTaxonomyCategoryName()
97 />
98 <#recover>
99 <#assign categoryName = "" />
100 </#attempt>
101 <a class="text-decoration-none" href="${url}">
102 <div
103 class="box d-flex mb-6"
104 >
105 <div class="yellow-bar h-100"></div>
106 <div
107 class=" d-flex flex-column justify-content-between h-100 p-3 overflow-hidden"
108 >
109 <div>
110 <p class="font-weight-medium text-verde-aqua mb-2">${categoryName}</p>
111 <p class="title text-verde-vale">${entry.getHighlightedTitle()}</p>
112 </div>
113 <p class="texto-sm text-cinza-escuro">
114 ${date_localized}
115 </p>
116 </div>
117 </div>
118 </a>
119 </#if>
120 </#list>
121 </#if>
122 </div>
123 <div class="line-divider"></div>
124 <div class="pagination d-flex justify-content-center my-5">
125 <a
126 class="pagination-option text-decoration-none mr-sm-5 ${isFirstPage?then('disabled', '')}"
127 href="${previousURL}"
128 disabled="${isFirstPage?string}"
129 >
130 <img
131 class="btn btn-primary border-amarelo-vale bg-amarelo-vale mr-2 p-1 rounded-circle"
132 src="${images_path}seta-2-esq_bra"
133 alt="button-prev"
134 />
135 <span class="btn btn-link text-amarelo-vale p-0 d-none d-sm-inline">
136 <@liferay.language key="previous" />
137 </span>
138 </a>
139
140 <#if (startPage > 1)>
141 <a
142 class="mr-2"
143 href="${firstPageURL}"
144 >
145 <span
146 class="pagination-item btn btn-primary p-1 rounded-circle"
147 alt="first-page-button"
148 >1
149 </span>
150 </a>
151 <#if currentPage != 3>
152 <span class="elipsis h-100 mt-auto mr-2">...</span>
153 </#if>
154 </#if>
155
156 <#list startPage..endPage as i>
157 <a
158 class="mr-2 ${(i == currentPage)?then('disabled', '')}"
159 href="${iteratorURL + '&start=' + i?string}"
160 >
161 <span
162 class="pagination-item ${(currentPage == i)?then('is-active', '')} btn btn-primary p-1 rounded-circle"
163 alt="first-page-button"
164 >${i}
165 </span>
166 </a>
167 </#list>
168
169 <#if (endPage < totalPages)>
170 <#if currentPage != totalPages - 2>
171 <span class="elipsis h-100 mt-auto mr-2">...</span>
172 </#if>
173 <a
174 class="mr-2"
175 href="${lastPageURL}"
176 >
177 <span
178 class="pagination-item btn btn-primary p-1 rounded-circle"
179 alt="last-page-button"
180 >${totalPages}
181 </span>
182 </a>
183 </#if>
184
185 <a
186 class="pagination-option text-decoration-none ml-sm-5 ${isLastPage?then('disabled', '')}"
187 href="${nextURL}"
188 disabled="${isLastPage?string}"
189 >
190 <span class="btn btn-link text-amarelo-vale mr-2 p-0 d-none d-sm-inline">
191 <@liferay.language key="next" />
192 </span>
193 <img
194 class="btn btn-primary border-amarelo-vale bg-amarelo-vale p-1 rounded-circle"
195 src="${images_path}seta-2-dir_bra"
196 alt="button-next"
197 />
198 </a>
199 </div>
200</div>
201
202<style>
203 .vale-widget-resultados-busca-imprensa .box {
204 background-image: url("/documents/d/guest/box-flutuante_com-borda");
205 background-size: cover;
206 aspect-ratio: 65/37;
207 width: 21.5625rem;
208}
209
210.vale-widget-resultados-busca-imprensa .yellow-bar {
211 background-color: var(--amarelo-vale);
212 flex-basis: 20px;
213 flex-grow: 0;
214 flex-shrink: 0;
215}
216
217.vale-widget-resultados-busca-imprensa .pagination img {
218 width: 2.03125rem;
219}
220
221.vale-widget-resultados-busca-imprensa .pagination-item {
222 color: var(--cinza-escuro);
223 background-color: var(--branco);
224 border: 2px solid var(--cinza-escuro);
225 line-height: 1.30625rem;
226 opacity: 0.6;
227 width: 2.03125rem;
228 height: 2.03125rem;
229}
230
231.vale-widget-resultados-busca-imprensa .pagination-item:hover {
232 box-shadow: 0px 0px 6px #55555594;
233}
234
235.vale-widget-resultados-busca-imprensa .pagination-item.is-active {
236 color: var(--branco);
237 background-color: var(--amarelo-vale);
238 border-color: var(--amarelo-vale);
239 opacity: 1;
240}
241
242.vale-widget-resultados-busca-imprensa .pagination-item.is-active:hover {
243 box-shadow: 0px 0px 6px #ecb11f94;
244}
245
246.vale-widget-resultados-busca-imprensa .title {
247 display: -webkit-box;
248 line-clamp: 3;
249 overflow: hidden;
250 -webkit-line-clamp: 3;
251 -webkit-box-orient: vertical;
252}
253
254.vale-widget-resultados-busca-imprensa .elipsis {
255 opacity: 0.6;
256}
257
258.vale-widget-resultados-busca-imprensa ~ form .pagination-bar {
259 display: none;
260}
261
262.vale-widget-resultados-busca-imprensa .pagination .disabled {
263 pointer-events: none;
264}
265
266.vale-widget-resultados-busca-imprensa .pagination .pagination-option.disabled {
267 opacity: 0.5;
268}
269
270.line-divider {
271 background-color: var(--cinza-escuro);
272 color: var(--cinza-escuro);
273 height: 1px;
274 width: 100%;
275 opacity: 0.2;
276}
277
278@media screen and (max-width: 992px) {
279 .vale-widget-resultados-busca-imprensa .box {
280 width: 20.625rem;
281 }
282}
283
284@media screen and (max-width: 768px) {
285 .vale-widget-resultados-busca-imprensa .box {
286 width: 15.625rem;
287 }
288
289 .vale-widget-resultados-busca-imprensa .title {
290 line-clamp: 2;
291 -webkit-line-clamp: 2;
292 }
293
294 .vale-widget-resultados-busca-imprensa .yellow-bar {
295 flex-basis: 10px;
296 }
297}
298
299@media screen and (max-width: 576px) {
300 .vale-widget-resultados-busca-imprensa .box {
301 width: 100%;
302 }
303
304 .vale-widget-resultados-busca-imprensa .title {
305 line-clamp: 3;
306 -webkit-line-clamp: 3;
307 }
308}
309
310</style>
Documents and Publications
Obtain access to all documents, announcements, and presentations released by PT Vale Indonesia Tbk
Tap and follow us on social media to learn more and stay updated!