Fehler bei der Verarbeitung der Vorlage.
Java method "com.mecalux.util.service.impl.MlxJournalHelperServiceImpl.getStructureFieldValue(com.liferay.journal.model.JournalArticle, String, String)" threw an exception when invoked on com.mecalux.util.service.impl.MlxJournalHelperServiceImpl object "com.mecalux.util.service.impl.MlxJournalHelperServiceImpl@7db23e9"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign categoryName = mlxJournalHelp... [in template "20101#20128#VIDEO-STR-DEFAULT-TEMPLATE" at line 30, column 17] ----
1<#assign productsStrKeys = ["PRODUCT-STR","PRODUCT-CATEGORY-STR", "SOFTWARE-SOLUTIONS-PRODUCTS-STR"] />
2<#assign bannerContactMaster = "4013" />
3<#assign vidCategoryStrId = 415780 />
4<#assign videoStructureId = 415837/> <#--"video str" aqui el metodo recibe un long, por eso no podemos poner el structurekey -->
5<#assign vocabularyId = 388079 /> <#-- VideoCategories id mlxConstants.getLongConstant('???','?????') -->
6<#assign article = mlxAssetHelperService.fetchLatestApprovedArticle(groupId, .vars["reserved-article-id"].getData()) />
7<#assign articleId = article.getArticleId() />
8<#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" />
9
10<#--HEADER-->
11<div class="corporate--video--header--container">
12 <div class="corporate--video--header">
13 <h1 class="corporate--video--header--heading">${name.getData()}</h1>
14
15 <#if description?has_content>
16 <p class="corporate--video--header--subheading">${description.getData()}</p>
17 </#if>
18 </div>
19</div>
20
21
22<#--FILTERS-->
23<#assign videoCategoriesOrdered = mlxAssetHelperService.getJournalArticleListByStructureIdIdSortedByStructureFieldName(groupId, themeDisplay.getUserId(), vidCategoryStrId, "order", locale)>
24<div class="corporate--video--filters--container">
25 <ul class="corporate--video--filters">
26 <#list videoCategoriesOrdered as category>
27 <#if category?counter == 1>
28 <#assign categoryName><@corporate.mlxlanguage key='mlx.videocat.warehouse-videos' /></#assign>
29 <#else>
30 <#assign categoryName = mlxJournalHelperService.getStructureFieldValue(category, "name", locale)?string />
31 </#if>
32 <#assign categoryUrl = mlxUrlUtilService.getUrlByJournalArticle(category, locale, groupId)?string />
33 <li class="corporate--video--filters--item">
34 <a href="${categoryUrl}" title="${categoryName}" class="corporate--video--filters--item--link">${categoryName}</a>
35 </li>
36 </#list>
37 </ul>
38</div>
39
40
41<div class="corporate--video--container">
42
43 <#--VIDEO PLAYER-->
44 <div class="corporate--video--video-player--container">
45 <div class="corporate--video--video-player">
46 <#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/>
47 <#assign videoUuid = mlxUrlUtilService.getUuidFromLiferayUrl(video.getData()) />
48 <#assign videoFileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videoUuid, globalGroupId) />
49 <#assign youtubeEmbeddedCode = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","Mlxyoutubeembeddedcode",videoFileEntry.getFileVersion().getFileVersionId()).getString(locale)/>
50 <#assign videoDescription = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","Mlxdocumenttitle",videoFileEntry.getFileVersion().getFileVersionId()).getString(locale)/>
51 <#assign videoDuration = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry", "Mlxduration", videoFileEntry.getFileVersion().getFileVersionId())!"" />
52 <#assign videoUrl = mlxDocumentsHelperService.getDocumentUrlFromUUID(videoUuid, locale)!"" />
53
54 <#assign videoBackground = (mlxDLFileEntryHelperService.getDLFileEntryMlxFieldValuePersisted("background", videoFileEntry.getFileEntryId()))!"" />
55 <#if videoBackground?has_content>
56 <#assign videoBackground = videoBackground?replace('\\u','')?eval />
57 <#assign videoBackgroundfileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videoBackground.uuid, globalGroupId) />
58 <#assign videoBackground = mlxUrlUtilService.getLRUrl(videoBackgroundfileEntry) />
59 </#if>
60
61 <#if youtubeEmbeddedCode?has_content>
62 <figure class="corporate--video--video-player--figure-youtube">
63 <iframe class="corporate--video--video-player--youtube" width="100%" height="100%" src="https://www.youtube.com/embed/${youtubeEmbeddedCode}?rel=0" frameborder="0" allowfullscreen></iframe>
64 </figure>
65 <#else>
66 <figure class="corporate--video--video-player--figure">
67 <video class="corporate--video--video-player--vid" poster="${videoBackground}" controls="controls" controlsList="nodownload">
68 <source src="${videoUrl}" >
69 </video>
70 <#if videoDescription?has_content>
71 <figcaption class="corporate--video--video-player--figcaption">
72 <h3 class="corporate--video--video-player--figcaption-title">${videoDescription}</h3>
73 </figcaption>
74 </#if>
75 </figure>
76 </#if>
77 </div>
78
79 <!-- DATOS ESTRUCTURADOS SEO JSON+LD -->
80 <#assign domain = themeDisplay.getPortalDomain() />
81 <#assign organizationName = "Mecalux">
82 <#assign publicDate = dateUtil.getDate(article.displayDate, "dd/MM/yyyy", locale, timeZoneUtil.getTimeZone("UTC")) />
83 <#assign cdn = mlxUrlUtilService.getCdn(groupId)!""/> <!-- Añado CDN, en principio no debería hacer falta, si viene videoURL por duplicado se retira de aqui y las llamadas -->
84
85 <#-- logo -->
86 <#assign logo="/documents/20128/3456912/Mecalux-logo_600x60px.jpg/04c628fa-bb4c-0e81-75c9-2e598563979d?t=1582118551000" />
87 <#if (domain?contains("es")) || (domain?contains("mecalux.es")) >
88 <#assign logo="/documents/20128/3456912/MecaluxEsmena-logo_600x60px.jpg/55173d2f-aadd-3f09-d3fb-456a758b3bd6?t=1582118551000" />
89 </#if>
90 <#if (domain?contains("us")) || (domain?contains("interlake")) >
91 <#assign logo="/documents/20128/3456912/InterlakeMecalux-logo_600x60px.jpg/48f97d72-4230-e18c-9424-b06fae217c90?t=1582118551000">
92 </#if>
93
94 <!-- DATOS ESTRUCTURADOS SEO JSON+LD -->
95 <#assign domain = themeDisplay.getPortalDomain() />
96 <#assign organizationName = "Mecalux">
97 <#assign publicDate = dateUtil.getDate(article.displayDate, "dd/MM/yyyy", locale, timeZoneUtil.getTimeZone("UTC")) />
98 <#assign cdn = mlxUrlUtilService.getCdn(groupId)!""/> <!-- Añado CDN, en principio no debería hacer falta, si viene videoURL por duplicado se retira de aqui y las llamadas -->
99
100 <#-- logo -->
101 <#assign logo="/documents/20128/3456912/Mecalux-logo_600x60px.jpg/04c628fa-bb4c-0e81-75c9-2e598563979d?t=1582118551000" />
102 <#if (domain?contains("es")) || (domain?contains("mecalux.es")) >
103 <#assign logo="/documents/20128/3456912/MecaluxEsmena-logo_600x60px.jpg/55173d2f-aadd-3f09-d3fb-456a758b3bd6?t=1582118551000" />
104 </#if>
105 <#if (domain?contains("us")) || (domain?contains("interlake")) >
106 <#assign logo="/documents/20128/3456912/InterlakeMecalux-logo_600x60px.jpg/48f97d72-4230-e18c-9424-b06fae217c90?t=1582118551000">
107 </#if>
108
109 <script type="application/ld+json">
110 {
111 "@context": "https://schema.org",
112 "@type": "VideoObject",
113 "name": "${name.getData()?replace("\"","\\\"")?replace("“","\\\"")}",
114 "description": "${description.getData()}",
115 "thumbnailUrl": "${videoBackground!}",
116 "uploadDate": "${publicDate}",
117 <#if videoDuration?has_content>
118 "duration": "${videoDuration.getData()}",
119 </#if>
120 "publisher": {
121 "@type": "Organization",
122 "name": "${organizationName}",
123 "logo": {
124 "@type": "ImageObject",
125 "url": "${logo}",
126 "width": 600,
127 "height": 60
128 }
129 },
130 "contentUrl": "${cdn}${videoUrl}",
131 "embedUrl": "${cdn}${videoUrl}"
132 }
133
134 </script>
135
136 </div>
137
138 <#--RELATED PRODUCTS-->
139 <#assign productRelated = mlxAssetHelperService.getRelatedArticlesByStructure(groupId, articleId, productsStrKeys)!"{}" />
140
141 <#if productRelated?has_content>
142
143 <div class="corporate--video--related-prods--container">
144 <h3 class="corporate--video--related-prods--title">${languageUtil.get(locale,"mlx.video.related.products")}</h3>
145 <div class="corporate--video--related-prods">
146
147 <#list productRelated as product>
148 <#assign productValues = mlxJournalHelperService.getStructureFieldValues(product, locale) />
149 <#assign productImageContent = (productValues.list_imageFieldSet["list_image"]?eval)!"{}" />
150
151 <#assign productName = (productValues["name"]?string)!"" />
152 <#assign productUrl = mlxUrlUtilService.getUrlByJournalArticle(product,locale, groupId)?string />
153 <#assign productMasterName = mlxMastersHelperService.getMasterNameByJournalArticle(product) />
154 <#if !(productName?ends_with("*"))>
155 <article class="corporate--video--related-prods--item">
156 <#if productImageContent?has_content>
157 <#assign productImage = productImageContent />
158 </#if>
159 <#if productImage?has_content>
160 <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(productImage.uuid, globalGroupId)!"{}" />
161 <#assign productImageUrl = mlxUrlUtilService.getLRUrl(fileEntry) />
162 <figure class="corporate--video--related-prods--item--figure">
163 ${corporate.img(productImageUrl, true, 'alt="' + productName + '"', 'title="' + productName + '"', 'class="corporate--video--related-prods--item--image"')}
164 </figure>
165 </#if>
166 <h2 class="corporate--video--related-prods--item--link-wrapper">
167 <a href="${productUrl}" title="${productName}" class="corporate--video--related-prods--item--link" data-content-master="${product.getDDMStructure().getStructureKey()}" data-content-structure="${productMasterName}">${productName}</a>
168 </h2>
169 </article>
170 </#if>
171 </#list>
172
173 </div>
174 </div>
175
176 </#if>
177
178
179 <#-- TRANSCRIPTION
180
181
182 <#if video_transcription.getData()?has_content>
183 <section class="corporate--section">
184 <h2 class="mecalux--content--title"><@corporate.mlxlanguage key="mlx.video.transcription" /></h2>
185 <div class="mecalux--content--transcripcion">
186 ${video_transcription.getData()}
187 </div>
188 </section>
189 </#if>
190
191 -->
192
193 <#--BANNER CONTACTO -->
194
195 <#assign bannerContacto = (mlxMastersHelperService.getJournalArticleByMasterAndGroup(bannerContactMaster?number, scopeGroupId))!"">
196 <#if bannerContacto?has_content>
197 <#assign articleBanner = mlxJournalHelperService.getStructureFieldValues(bannerContacto, locale)>
198
199 <#assign headerText = articleBanner["header_text"]!"" />
200 <#assign btText = articleBanner["button_text"]!"" />
201 <#assign lbText = articleBanner["text"]!"" />
202
203 <aside class="corporate--quote-info--container">
204 <div class="corporate--quote-info">
205 <p class="corporate--quote-info--item-heading">
206 ${headerText}
207
208 <#assign serviceContext = mlxServiceContext/>
209 <#assign tel = (mlxPhoneUtilService.getTelephone(serviceContext))!"" />
210 <#assign rtl = (mlxExpandoService.getExpandoValueForClass("com.liferay.portal.kernel.model.Group","is-rtl", scopeGroupId).getBoolean())!false />
211
212 <#if rtl>
213 <#assign tel = "‪${tel}‬" >
214 </#if>
215 <#if tel?has_content>
216 <br><strong title="${tel}" class="corporate--quote-info--item-heading-phone">${tel}</strong>
217 </#if>
218
219 <p class="corporate--quote-info--item-content">${lbText}</p>
220 <a href="" data-fancybox data-type="ajax" class="corporate--quote-info--item-link product-contact-btn" data-sticky-btn="true" rel="nofollow">${btText}</a>
221 </div>
222 </aside>
223 </#if>
224
225
226 <#--RELATED VIDEOS-->
227 <#assign vidCatEntry = mlxAssetHelperService.getAssetEntryByJournalArticle(article)!"{}" />
228 <#assign category = mlxAssetHelperService.getAssetCategoryByAssetEntryAndVocabularyId(vidCatEntry, vocabularyId)!"{}" />
229
230 <#if category != "{}">
231 <#assign categoryId = category.categoryId />
232
233 <#--!!FALTA PODER ORDENAR ESTAS LISTAS por "fecha de creación"!! => idem que en 6.2 (se usaba el portlet de busqueda) -->
234 <#assign videosRelated = mlxAssetHelperService.getJournalArticleListByStructureIdAndCategoryId(groupId, themeDisplay.getUserId(), videoStructureId, categoryId) />
235
236 <#if (videosRelated?has_content) && (videosRelated?size > 1)>
237
238 <div class="corporate--video--related-vids--container">
239 <h3 class="corporate--video--related-vids--title"><@corporate.mlxlanguage key="mlx.video.related.videos" /></h3>
240 <div class="corporate--video--related-vids">
241 <#assign videosRelatedIndex = 0 />
242 <#list videosRelated as relatedVideo>
243 <#if (videosRelatedIndex < 3) && (relatedVideo.getArticleId() != articleId)>
244 <#assign videoValues = mlxJournalHelperService.getStructureFieldValues(relatedVideo, locale) />
245 <#assign videoName = (videoValues["name"]?string)!"" />
246 <#assign videoUrl = mlxUrlUtilService.getUrlByJournalArticle(relatedVideo,locale, groupId)?string />
247 <#assign videoUuid = (videoValues["video"])!"{}" />
248 <#if videoUuid?has_content>
249 <#assign videoUuid = jsonFactoryUtil.createJSONObject(videoUuid).uuid />
250 </#if>
251 <#assign videoFileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videoUuid, globalGroupId) />
252 <article class="corporate--video--related-vids--item" >
253
254 ${corporate.img(cdn + '/o/corporate-theme/images/common/th-play2.png', false, 'alt="' + videoName + '"', 'title="' + videoName + '"', 'class="corporate--video--related-vids--item--icon"')}
255 <#assign videobackground = (mlxDLFileEntryHelperService.getDLFileEntryMlxFieldValuePersisted("background", videoFileEntry.getFileEntryId()))!"" />
256 <#if videobackground?has_content>
257 <#assign videobackground = videobackground?replace('\\u','')?eval />
258 <#assign videobackgroundfileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videobackground.uuid, globalGroupId) />
259 <#assign videobackground = mlxUrlUtilService.getLRUrl(videobackgroundfileEntry) />
260 <figure class="corporate--video--related-vids--item--figure">
261 ${corporate.img(videobackground, true, 'alt="' + videoName + '"', 'title="' + videoName + '"', 'class="corporate--video--related-vids--item--image"')}
262 </figure>
263 </#if>
264 <div class="corporate--video--related-vids--item--content">
265 <a href="${videoUrl}" title="${videoName}" class="corporate--video--related-vids--item--link">${videoName}</a>
266 </div>
267 </article>
268 <#assign videosRelatedIndex = videosRelatedIndex + 1 />
269 </#if>
270 </#list>
271 </div>
272 </div>
273 </#if>
274 </#if>
275
276</div>
277
278
279
280<script> /*MKTG-848 Obtener portletInstance y reemplazar button href con marcacion gtm porque el portlet namespace difiere de paginas de producto */
281window.addEventListener('load', function(){
282 var portletNameSpace = Liferay.Portlet.list.find(pn => pn.includes('contact'));
283 mecalux.cache.$body.find('.corporate--quote-info--item-link').attr('href','?p_p_id='+portletNameSpace+'&p_p_lifecycle=0&p_p_state=exclusive&p_p_mode=view&cta_origin=CTA_Footer');
284 mecalux.cache.$body.find('.corporate--sticky-header--cta').attr('href','?p_p_id='+portletNameSpace+'&p_p_lifecycle=0&p_p_state=exclusive&p_p_mode=view&cta_origin=CTA_Sticky');
285});
286</script>