
Risultati della ricerca
Scegli il tuo prodotto
Certificazione e prove
Norme
Libri
Corsi
Ispezione
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> getProduct(channelId, entry.getTitle()) [in template "34352066712900#33336#348141" at line 15, column 40]
----
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 product = getProduct(channelI... [in template "34352066712900#33336#348141" at line 15, column 21]
----
1<#setting url_escaping_charset="UTF-8">
2
3<section class="list-results-section">
4 <div class="results-container view-list">
5 <#if entries?has_content>
6 <#list entries as entry>
7 <#assign entryType = ''>
8 <#assign entrySubtype = ''>
9 <#assign typology = ''>
10 <#assign titulacionPropia = ''>
11 <#assign status = ''>
12 <#assign currentSatateDate = ''>
13 <#if entry.getClassName() == 'com.liferay.commerce.product.model.CPDefinition'>
14 <#assign channelId = getChannelId()>
15 <#assign product = getProduct(channelId, entry.getTitle())>
16 <#assign entryType = getProductEntryType(getProductCategories(channelId, product.productId))>
17 <#assign entryUrl = 'https://tienda.aenor.com/${product.slug}'>
18 <#if entryType == 'Curso' || entryType == 'Training'>
19 <#assign typology = getProductTypology(getProductSpecifications(channelId, product.productId))>
20 <#if product.expando.titulacionPropia?? && product.expando.titulacionPropia>
21 <#assign titulacionPropia = languageUtil.get(locale, "curso.titulacionPropia")>
22 </#if>
23 <#assign entryUrl = entry.getViewURL()?keep_before("?")>
24 </#if>
25 <#if entryType == 'Norma' || entryType == 'Standard'>
26 <#assign currentSatateDate = getCurrentSatateDate(getProductSpecifications(channelId, product.productId))>
27 <#assign status = getStatus(getProductCategories(channelId, product.productId))>
28 </#if>
29 <#elseif entry.getClassName() == 'com.liferay.portal.kernel.model.Layout'>
30 <#assign entryType = getLayoutEntryType(groupId, entry.getClassPK())>
31 <#assign entrySubtype = getLayoutEntrySubtype(groupId, entry.getClassPK())>
32 <#assign entryUrl = entry.getViewURL()?keep_before("?")>
33 <#elseif entry.getClassName() == 'com.liferay.journal.model.JournalArticle'>
34 <#assign entryType = getJournalArticleEntryType(entry.getClassPK())>
35 <#assign entryUrl = entry.getViewURL()?keep_before("?")>
36 </#if>
37 <div class="item-result">
38 <div class="info-result">
39 <a href="${entryUrl}" data-senna-off="true"><h3 class="title-result">${entry.getHighlightedTitle()}</h3></a>
40 <div class="tag-result-container">
41 <div class="tag-item white-tag">${entryType}</div>
42 <#if entrySubtype?? && entrySubtype?has_content>
43 <div class="tag-item blue-tag">${entrySubtype}</div>
44 </#if>
45 <#if typology?? && typology?has_content>
46 <#assign typologyTag = 'blue-tag'>
47 <#if typology == 'Máster' || typology == 'Master'>
48 <#assign typologyTag = 'orange-tag'>
49 </#if>
50 <div class="tag-item ${typologyTag}">${typology}</div>
51 </#if>
52 <#if titulacionPropia?? && titulacionPropia?has_content>
53 <div class="tag-item white-tag">${titulacionPropia}</div>
54 </#if>
55 <#if status?? && status?has_content>
56 <#assign statusTag = 'red-tag'>
57 <#if status == 'En Vigor' || status == 'In Force'>
58 <#assign statusTag = 'green-tag'>
59 </#if>
60 <div class="tag-item ${statusTag}">${status}</div>
61 </#if>
62 <#if currentSatateDate?? && currentSatateDate?has_content>
63 <div class="date-ISO">/${currentSatateDate?date.iso?string('yyyy-MM-dd')}</div>
64 </#if>
65 </div>
66 <#if entry.getContent()??>
67 <p class="description-text">${entry.getContent()}</p>
68 </#if>
69 </div>
70 </div>
71 </#list>
72 <#else>
73 <div class="search-results-add-custom-empty-message"></div>
74 </#if>
75 </div>
76</section>
77
78<#function getChannelId>
79 <#return restClient.get("/headless-commerce-delivery-catalog/v1.0/channels?filter=name eq 'Aenor España'&sort").items[0].id>
80</#function>
81
82<#function getProduct channelId name>
83 <#return restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/${channelId}/products?filter=name eq '${name?url}'&sort").items[0]>
84</#function>
85
86<#function getProductCategories channelId productId>
87 <#return restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/${channelId}/products/${productId}/categories?sort").items>
88</#function>
89
90<#function getProductSpecifications channelId productId>
91 <#return restClient.get("/headless-commerce-delivery-catalog/v1.0/channels/${channelId}/products/${productId}/product-specifications?sort").items>
92</#function>
93
94<#function getProductEntryType categories>
95 <#list categories as category>
96 <#if category.vocabulary == 'entity type'>
97 <#return category.title>
98 </#if>
99 </#list>
100</#function>
101
102<#function getProductTypology specifications>
103 <#list specifications as specification>
104 <#if specification.specificationKey == 'typology'>
105 <#return specification.value>
106 </#if>
107 </#list>
108</#function>
109
110<#function getCurrentSatateDate specifications>
111 <#list specifications as specification>
112 <#if specification.specificationKey == 'current-state-date'>
113 <#return specification.value>
114 </#if>
115 </#list>
116</#function>
117
118<#function getStatus categories>
119 <#list categories as category>
120 <#if category.vocabulary == 'status'>
121 <#return category.title>
122 </#if>
123 </#list>
124</#function>
125
126<#function getLayoutEntryType groupId layoutId>
127 <#attempt>
128 <#assign layouts = restClient.get("/headless-delivery/v1.0/sites/${groupId}/site-pages?fields=taxonomyCategoryBriefs&filter=id eq '${layoutId}'&sort").items[0]>
129 <#if layouts?has_content && layouts.taxonomyCategoryBriefs?has_content>
130 <#attempt>
131 <#return layouts.taxonomyCategoryBriefs[0].taxonomyCategoryName>
132 <#recover>
133 <#return "">
134 </#attempt>
135 </#if>
136 <#recover>
137 <#return "">
138 </#attempt>
139</#function>
140
141<#function getLayoutEntrySubtype groupId layoutId>
142 <#attempt>
143 <#assign layouts = restClient.get("/headless-delivery/v1.0/sites/${groupId}/site-pages?fields=taxonomyCategoryBriefs&filter=id eq '${layoutId}'&sort").items[0]>
144 <#if layouts?has_content && layouts.taxonomyCategoryBriefs?has_content>
145 <#attempt>
146 <#return layouts.taxonomyCategoryBriefs[1].taxonomyCategoryName>
147 <#recover>
148 <#return "">
149 </#attempt>
150 </#if>
151 <#recover>
152 <#return "">
153 </#attempt>
154</#function>
155
156<#function getJournalArticleEntryType journalArticleId>
157 <#assign journalArticle = restClient.get("/headless-delivery/v1.0/structured-contents/${journalArticleId}?fields=taxonomyCategoryBriefs")>
158 <#if journalArticle?has_content && journalArticle.taxonomyCategoryBriefs?has_content>
159 <#attempt>
160 <#return journalArticle.taxonomyCategoryBriefs[1].taxonomyCategoryName>
161 <#recover>
162 <#return "">
163 </#attempt>
164 </#if>
165</#function>
166
167<style>
168.list-results-section {
169 margin: 40px auto 35px;
170}
171
172.list-results-section .header-section {
173 border-bottom: 1px solid #dbdbdb;
174 margin-bottom: 32px;
175 display: flex;
176 justify-content: space-between;
177 margin-left: 2px;
178 margin-right: 2px;
179 align-items: center;
180}
181
182.list-results-section .header-section .order-elements {
183 font-family: Segoe-UI-This;
184 font-size: 16px;
185 font-weight: 400;
186 line-height: 23px;
187 text-align: left;
188 color: #2d2d2b;
189}
190
191.list-results-section .header-section .order-elements .fa-solid {
192 padding-left: 15px;
193 color: var(--brand-color-1, #1f57a3);
194 font-size: 14px;
195}
196
197.list-results-section .title-section {
198 font-family: SohoStd-Medium;
199 font-size: 24px;
200 font-weight: 500;
201 line-height: 28.8px;
202 text-align: left;
203 color: var(--brand-color-3, #29337f);
204}
205
206.list-results-section .filters-container {
207 padding: 0 14px;
208}
209
210.list-results-section .filters-container .checks-block {
211 display: flex;
212 flex-direction: column;
213 border: 1px solid #e0e0e0;
214 padding: 16px;
215 border-radius: 4px;
216 margin-bottom: 16px;
217}
218
219.list-results-section .filters-container .checks-block .title-block {
220 font-family: SohoStd-Medium;
221 font-size: 18px;
222 font-weight: 500;
223 line-height: 24px;
224 text-align: left;
225 color: var(--brand-color-1, #1f57a3);
226 display: flex;
227 justify-content: space-between;
228 margin-bottom: 0;
229}
230
231.list-results-section .filters-container .checks-block .subtitle-block {
232 font-family: SohoGothicPro-Regular;
233 font-size: 14px;
234 font-weight: 400;
235 line-height: 24px;
236 text-align: left;
237 color: #333;
238}
239
240.list-results-section .filters-container .checks-block .checks-container .check-item {
241 display: flex;
242 justify-content: space-between;
243}
244
245.list-results-section .filters-container .checks-block .checks-container>.check-item:first-child {
246 margin-top: 16px;
247}
248
249.list-results-section .filters-container .checks-block .norms-container {
250 display: flex;
251 flex-direction: row;
252 flex-wrap: wrap;
253 gap: 0 35px;
254 align-items: flex-end;
255}
256
257.list-results-section .filters-container .checks-block .norms-container .check-item {
258 margin-top: 0;
259}
260
261.list-results-section .filters-container .checks-block .norms-container .search-therms {
262 padding-top: 16px;
263 border-top: 1px solid #cfd6dc;
264 margin-top: 6px;
265}
266
267.list-results-section .filters-container .checks-block .norms-container .search-therms .search-note {
268 font-family: SohoGothicPro-Regular;
269 font-size: 14px;
270 font-weight: 400;
271 line-height: 20px;
272 text-align: left;
273 color: #444;
274}
275
276.list-results-section .filters-container .checks-block .norms-container .dates-block {
277 display: flex;
278 justify-content: flex-start;
279 width: 100%;
280 margin: 20px 0 8px;
281 gap: 0 8px;
282}
283
284.list-results-section .filters-container .checks-block .norms-container .dates-block .date {
285 min-width: 120px;
286}
287
288.list-results-section .filters-container .checks-block .norms-container .checks-block-buttons {
289 margin-top: 0;
290}
291
292.list-results-section .filters-container .checks-block .check-item {
293 display: flex;
294 justify-content: space-between;
295}
296
297.list-results-section .filters-container .checks-block .check-name {
298 margin-top: 7px;
299 display: inline-block;
300}
301
302.list-results-section .filters-container .checks-block .custom-check input:checked~.check-name {
303 color: var(--brand-color-3, #29337f);
304}
305
306.list-results-section .filters-container .checks-block .count-result {
307 font-family: Sora-Regular;
308 font-size: 12px;
309 font-weight: 400;
310 line-height: 12px;
311 text-align: left;
312 color: #848484;
313 display: flex;
314 align-items: center;
315 margin-bottom: 5px;
316}
317
318.list-results-section .filters-container .fa-circle-minus,
319.list-results-section .filters-container .fa-circle-plus {
320 color: var(--brand-color-2, #6a9bd3);
321 font-size: 20px;
322}
323
324.list-results-section .filters-container .show-more {
325 font-family: SohoGothicPro-Regular;
326 font-size: 14px;
327 font-weight: 400;
328 line-height: 24px;
329 text-align: left;
330 text-decoration-line: underline;
331 text-decoration-style: solid;
332 color: var(--brand-color-2, #6a9bd3);
333 padding: 10px 0;
334 cursor: pointer;
335}
336
337.list-results-section .filters-container .show-more,
338.list-results-section .filters-container .more-items,
339.list-results-section .filters-container .checks-block:has(.fa-solid) .checks-container {
340 max-height: 0;
341 overflow: hidden;
342}
343
344.list-results-section .filters-container .show-more.height-auto,
345.list-results-section .filters-container .more-items.height-auto,
346.list-results-section .filters-container .checks-block:has(.fa-solid) .checks-container.height-auto {
347 max-height: 1000px;
348 transition: max-height opacity 1s ease-in-out;
349}
350
351.list-results-section .filters-container .show-more.height-auto {
352 max-height: 0;
353 overflow: hidden;
354 display: block;
355 padding: 0;
356 opacity: 0;
357}
358
359.list-results-section .filters-container .checks-block-buttons {
360 display: flex;
361 justify-content: space-between;
362 padding: 10px 0;
363 border-top: 1px solid #cfd6dc;
364 margin-top: 12px;
365 width: 100%;
366}
367
368.list-results-section .filters-container .checks-block-buttons .btnae--,
369.list-results-section .filters-container .checks-block-buttons .btn-outline-ae {
370 padding: 8px 16px 8px 8px;
371 height: auto;
372 font-family: SohoStd-Medium;
373}
374
375.list-results-section .filters-container .checks-block-buttons .btnae--.btn-outline-ae--primary,
376.list-results-section .filters-container .checks-block-buttons .btn-outline-ae.btn-outline-ae--primary,
377.list-results-section .filters-container .checks-block-buttons .btnae--.btn-outline-ae,
378.list-results-section .filters-container .checks-block-buttons .btn-outline-ae.btn-outline-ae {
379 color: var(--brand-color-1, #1f57a3);
380}
381
382.list-results-section .filters-container .checks-block-buttons .btnae--.animated-button i,
383.list-results-section .filters-container .checks-block-buttons .btn-outline-ae.animated-button i {
384 padding-left: 4px;
385}
386
387.list-results-section .results-container {
388 display: flex;
389 flex-wrap: wrap;
390 gap: 20px 0;
391 padding-right: 0;
392 padding-left: 0;
393}
394
395@media (min-width: 1200px) {
396 .list-results-section .results-container {
397 padding-left: 30px;
398 }
399}
400
401.list-results-section .results-container .item-result {
402 border: 1px solid #e0e0e0;
403 padding: 24px 16px 8px;
404 border-radius: 4px;
405}
406
407.list-results-section .results-container .image-result {
408 width: 100%;
409 height: 210px;
410 object-fit: cover;
411}
412
413.list-results-section .results-container .tag-result-container {
414 display: flex;
415 flex-wrap: wrap;
416 margin: 20px 0 16px 0;
417 gap: 4px 0;
418}
419
420.list-results-section .results-container .tag-item {
421 font-family: Segoe-UI-This-Bold;
422 font-size: 12px;
423 line-height: 13.2px;
424 text-align: right;
425 padding: 4px;
426 border-radius: 4px;
427 text-transform: uppercase;
428 margin: 0 4px 0 0;
429}
430
431.list-results-section .results-container .tag-item.green-tag {
432 background-color: #138636;
433 border: 1px solid #138636;
434 color: #fff;
435}
436
437.list-results-section .results-container .tag-item.red-tag {
438 background-color: #c91432;
439 border: 1px solid #c91432;
440 color: #fff;
441}
442
443.list-results-section .results-container .tag-item.blue-tag {
444 background-color: #3cb4e5;
445 border: 1px solid #3cb4e5;
446 color: #fff;
447}
448
449.list-results-section .results-container .tag-item.orange-tag {
450 background-color: #ff7e33;
451 border: 1px solid #ff7e33;
452 color: #fff;
453}
454
455.list-results-section .results-container .tag-item.white-tag {
456 background-color: #fff;
457 border: 1px solid #8a8a8a;
458 color: #3a3a39;
459}
460
461.list-results-section .results-container .date-ISO {
462 font-family: Segoe-UI-This;
463 font-size: 14px;
464 font-weight: 400;
465 line-height: 18.62px;
466 text-align: left;
467 color: #444;
468}
469
470.list-results-section .results-container .title-result {
471 font-family: SohoStd-Medium;
472 font-size: 18px;
473 font-weight: 500;
474 line-height: 24px;
475 text-align: left;
476 color: #232f5e;
477 margin-bottom: 10px;
478}
479
480.list-results-section .results-container .description-text {
481 font-family: SohoGothicPro-Regular;
482 font-size: 16px;
483 font-weight: 400;
484 line-height: 24px;
485 text-align: left;
486 color: #212121;
487}
488
489.list-results-section .results-container .price-container {
490 display: flex;
491 flex-direction: column;
492 margin: 16px 0;
493 text-align: left;
494 letter-spacing: -0.02em;
495}
496
497.list-results-section .results-container .price-container .price-text {
498 font-family: SohoGothicPro-Regular;
499 font-size: 12px;
500 font-weight: 400;
501 line-height: 13.2px;
502 color: #000;
503}
504
505.list-results-section .results-container .price-container .price-ae {
506 font-family: SohoGothicPro-Medium;
507 font-size: 20px;
508 font-weight: 500;
509 line-height: 22px;
510 color: var(--brand-color-1, #1f57a3);
511 padding-top: 4px;
512}
513
514.list-results-section .results-container .result-button {
515 padding: 17px;
516 width: 100%;
517 text-align: center;
518 display: block;
519 background-color: var(--brand-color-1, #1f57a3);
520 color: #fff;
521 text-transform: uppercase;
522 font-family: SohoStd-Medium;
523 font-size: 14px;
524 font-weight: 500;
525 line-height: 14px;
526 text-align: left;
527}
528
529.list-results-section .results-container.view-list>div {
530 width: 100%;
531 max-width: 100%;
532 flex: auto;
533}
534
535.list-results-section .results-container.view-list .item-result {
536 display: flex;
537 border: none;
538 border-bottom: 1px solid #e0e0e0;
539}
540
541.list-results-section .results-container.view-list .item-result .image-result {
542 width: 33%;
543 object-fit: cover;
544}
545
546.list-results-section .results-container.view-list .item-result .info-result {
547 /* width: 66%;
548 */
549 padding: 0;
550}
551
552.list-results-section .results-container.view-list .item-result .info-result .tag-result-container {
553 margin: 0 0 8px 0;
554}
555
556.list-results-section .results-container.view-list .item-result .info-result .result-button {
557 width: fit-content;
558 float: right;
559}
560
561@media (max-width: 576px) {
562 .list-results-section .results-container.view-list .item-result {
563 flex-direction: column;
564 }
565
566 .list-results-section .results-container.view-list .item-result .image-result {
567 width: auto;
568 }
569
570 .list-results-section .results-container.view-list .item-result .info-result {
571 width: 100%;
572 padding: 0;
573 }
574
575 .list-results-section .results-container.view-list .item-result .info-result .tag-result-container {
576 margin: 16px 0;
577 }
578}
579
580.filters-container {
581 /* Hide the default date picker icon in Chrome and Edge */
582}
583
584.filters-container input,
585.filters-container textarea,
586.filters-container select {
587 width: 100%;
588 padding: 12px 16px;
589 gap: 8px;
590 border-radius: 4px;
591 background-color: #f5f5f5;
592 border: none;
593 margin-bottom: 16px;
594 background-repeat: no-repeat;
595}
596
597.filters-container input::placeholder,
598.filters-container textarea::placeholder,
599.filters-container select {
600 font-family: Inter;
601 font-size: 14px;
602 font-weight: 400;
603 line-height: 16.94px;
604 text-align: left;
605 color: #828282;
606}
607
608.filters-container input[type=date] {
609 color: #828282;
610 font-size: 14px;
611 font-family: Inter;
612}
613
614.filters-container textarea,
615.filters-container select {
616 height: 48px;
617 width: 100% !important;
618}
619
620.filters-container label {
621 font-family: "SohoGothicPro-Regular";
622 font-size: 14px;
623 font-weight: 400;
624 line-height: 24px;
625 text-align: left;
626}
627
628.filters-container input[type="date"]::-webkit-inner-spin-button,
629.filters-container input[type="date"]::-webkit-calendar-picker-indicator {
630 display: none;
631 -webkit-appearance: none;
632}
633
634.filters-container .checks-container {
635 overflow: visible;
636}
637
638.filters-container .custom-check {
639 font-family: Segoe-UI-This;
640 font-size: 14px;
641 font-weight: 400;
642 line-height: 12px;
643 text-align: left;
644 color: #66757f;
645 padding-left: 30px;
646}
647
648.filters-container .custom-check .checkmark {
649 border: 1px solid #e0e0e0;
650 background-color: #fff;
651}
652
653.filters-container .custom-check .checkmark::after {
654 left: 7px;
655 top: 3px;
656}
657
658.filters-container .custom-check input:hover~.checkmark {
659 background-color: #ccc;
660}
661
662.filters-container .custom-check input:checked~.checkmark {
663 border-radius: 3px;
664 background-color: var(--brand-color-1, #1f57a3);
665 border: none;
666}
667
668.filters-container .custom-check input[type="checkbox"]:focus~.checkmark {
669 /* background-color: transparent;
670 */
671 border-color: #80bdff;
672 box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, .25);
673 color: #495057;
674 outline: 0;
675}
676
677.filters-container .icon-accordion {
678 line-height: 0;
679 padding: 0;
680 margin: 0;
681 display: flex;
682 align-items: flex-start;
683 border-color: transparent;
684 background: #fff;
685}
686
687.filters-container .icon-accordion:focus-visible {
688 border-radius: 50px;
689 background: #fff;
690 border-color: transparent;
691 outline: none;
692 box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, .25);
693}
694
695.pagination .page-item.active .page-link {
696 background-color: var(--brand-color-1, #1f57a3);
697 border-color: var(--brand-color-1, #1f57a3);
698 color: #fff;
699}
700
701.pagination .page-item .page-link:active {
702 background-color: var(--brand-color-1, #1f57a3);
703 border-color: var(--brand-color-1, #1f57a3);
704}
705
706.pagination .page-item .page-link.hover, .page-link:hover {
707
708 color: var(--brand-color-1, #1f57a3);
709}
710
711.pagination .page-item .page-link {
712 color: var(--brand-color-1, #1f57a3);
713 border: none;
714}
715.pagination-items-per-page>a,
716.pagination-items-per-page>button{
717 color: var(--brand-color-1, #1f57a3);
718
719}
720.pagination-items-per-page>a:active, .pagination-items-per-page>button:active {
721 background-color: var(--brand-color-1, #1f57a3);
722 border-color: var(--brand-color-1, #1f57a3);
723}
724.pagination-items-per-page>a.show, .pagination-items-per-page>a[aria-expanded=true], .pagination-items-per-page>button.show, .pagination-items-per-page>button[aria-expanded=true] {
725 background-color: var(--brand-color-1, #1f57a3);
726 border-color: var(--brand-color-1, #1f57a3);
727}
728</style>