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