Fehler bei der Verarbeitung der Vorlage.
Java method "com.mecalux.util.service.impl.MlxJournalHelperServiceImpl.getStructureFieldValues(com.liferay.journal.model.JournalArticle, String)" threw an exception when invoked on com.mecalux.util.service.impl.MlxJournalHelperServiceImpl object "com.mecalux.util.service.impl.MlxJournalHelperServiceImpl@2abd8b32"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign productImageContentValues = (... [in template "20101#20128#PRACTICAL-CASE-STR-DEFAULT-TEMPLATE" at line 333, column 17] ----
1<#--HEADER-->
2<div class="corporate--case--header--container">
3 <figure class="corporate--case--header--background-figure">
4 ${corporate.img(list_image.getData(), false, 'alt="' + name.getData() + '"', 'title="' + name.getData() + '"', 'class="corporate--case--header--background-image"')}
5 </figure>
6 <div class="corporate--case--header">
7 <h1 data-sticky-title="true" class="corporate--case--header--heading">${name.getData()}</h1>
8 <p data-sticky-subheading="true" class="corporate--case--header--subheading">${subheader.getData()}</p>
9 </div>
10</div>
11
12<#--TOP DESCRIPTION-->
13<#assign cdn = (mlxUrlUtilService.getCdn(groupId))!"" />
14<#assign articleId = .vars["reserved-article-id"].data />
15<#assign globalGroupId = mlxConstants.getLongConstant("GroupIds","GLOBAL")/>
16<#assign clientStrKey = "CLIENT-STR" />
17<#assign clientRelated = (mlxAssetHelperService.getFirstRelatedArticle(groupId, articleId, clientStrKey))!"" />
18<div class="corporate--case--subheader--container">
19 <#if clientRelated?has_content>
20 <#assign clientLogoContentValues = (mlxJournalHelperService.getStructureFieldValues(clientRelated, locale))!{} />
21 <#assign clientLogoContent = (clientLogoContentValues["logo"])!{} />
22 <#if clientLogoContent?has_content>
23 <#assign clientLogo = jsonFactoryUtil.createJSONObject(clientLogoContent) />
24 <#assign clientName = (clientLogoContentValues["name"]?string)!"" />
25
26 <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(clientLogo.uuid, globalGroupId)!"" />
27 <#if fileEntry?has_content>
28 <#assign clientLogoUrl = mlxDocumentsHelperService.getDocumentUrlFromUUID(clientLogo.uuid, "${locale}")/>
29 <#assign clientLogoAlt = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle", fileEntry.getFileVersion().getFileVersionId()).getString(locale)!""/>
30
31 <#if clientLogoAlt == "">
32 <#assign clientLogoAlt = clientName />
33 </#if>
34
35 <figure class="corporate--case--subheader--figure">
36 ${corporate.img(cdn + clientLogoUrl, true, 'alt="' + clientLogoAlt + '"', 'title="' + clientLogoAlt + '"', 'class="corporate--case--subheader--figure-image"')}
37 </figure>
38 </#if>
39 </#if>
40 </#if>
41 <div class="corporate--case--subheader">
42 <p class="corporate--case--subheader--description">${description.getData()}</p>
43 </div>
44</div>
45
46<#--MEDIABAR-->
47<#assign technicalSheetStr = "TECHNICAL-SHEET-STR" />
48<#assign relatedTechnicalSheets = mlxAssetHelperService.getRelatedArticlesByStructure(groupId, articleId, technicalSheetStr) />
49<#if pdf.getData() != '' || relatedTechnicalSheets?has_content >
50 <div class="corporate--case--mediabar--container">
51 <ul class="corporate--case--mediabar" data-gtm-block-name="Case-study_Detail">
52 <#--technicalSheet tab-->
53 <#if relatedTechnicalSheets?has_content>
54 <li class="corporate--case--mediabar--item">
55 <a title='' data-fancybox data-src="#technicalsheet" href="javascript:;" class="techTr tech-gallery corporate--case--mediabar--item--link" data-gtm-event="clicktab" data-gtm-event-click-category="Practical_Case_Detail_Tab" data-gtm-event-label="technical-details-tab">
56 <#-- Cambiar url por otra del entorno -->
57 ${corporate.img('/documents/20128/594105/Tech+specs.svg/7401d7f0-d66c-3b49-1a9e-271878bfc795?t=1522060479000', true, 'class="corporate--case--mediabar--item--image"')}
58 <span class="corporate--case--mediabar--item--text"><@corporate.mlxlanguage key="mlx.mediabar.specifications" /></span>
59 </a>
60 <div style="display: none;" id="technicalsheet">
61 <#list relatedTechnicalSheets as technicalSheet>
62 <#assign technicalSheetView = mlxJournalContentService.getContent(technicalSheet, technicalSheet.getDDMTemplateKey(), locale, themeDisplay, 'view') />
63 ${technicalSheetView}
64 </#list>
65 </div>
66 </li>
67 </#if>
68
69 <#--PDF tab-->
70 <#if pdf.getData() != ''>
71 <li class="corporate--case--mediabar--item">
72 <a href="${pdf.getData()}" rel="nofollow" title='<@corporate.mlxlanguage key="mlx.practical-case.pdf-download" />' class="pdf-generator corporate--case--mediabar--item--link" target="_blank" data-gtm-event="download" data-gtm-event-click-category="Download" data-gtm-event-label="${clientName!""}">
73 <#-- Cambiar url por otra del entorno -->
74 ${corporate.img('/documents/20128/594105/Download+PDF.svg/2f94eda9-5ab4-754c-cef8-735d15686732?t=1522060427000', true, 'class="corporate--case--mediabar--item--image"')}
75 <span class="corporate--case--mediabar--item--text"><@corporate.mlxlanguage key="mlx.practical-case.pdf-download" /></span>
76 </a>
77 </li>
78 </#if>
79 </ul>
80 </div>
81</#if>
82
83
84<#-- PRIMER VIDEO -->
85<#if (video_gallery)?has_content>
86 <#if (video_gallery.getSiblings()?first.video_gallery_file.getData())?has_content>
87 <div class="corporate--case--container">
88 <div class="corporate--case--video-player--container">
89 <div class="corporate--case--video-player">
90 <#assign first_video = video_gallery.video_gallery_file.getData()>
91 <#assign videoUuid = mlxUrlUtilService.getUuidFromLiferayUrl(first_video)!"" />
92 <#assign videoFileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videoUuid, globalGroupId)!"" />
93
94 <#if videoFileEntry?has_content>
95 <#assign videoFileEntry = videoFileEntry />
96
97 <#if videoFileEntry?has_content>
98 <#assign VideoFile = videoFileEntry.getFileVersion().getFileVersionId()!"" />
99 <#assign videoYoutube = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","Mlxyoutubeembeddedcode",VideoFile).getString(locale))!"" />
100 <#assign videoDuration = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry", "Mlxduration", VideoFile)!"" />
101 <#assign videoUrl = mlxDocumentsHelperService.getDocumentUrlFromUUID(videoUuid, locale)!"" />
102 <#assign videoBackground = (mlxDLFileEntryHelperService.getDLFileEntryMlxFieldValuePersisted("background", VideoFile))!"" />
103
104 <#if (videoBackground)?has_content>
105 <#assign videoBackground = jsonFactoryUtil.createJSONObject(videoBackground) />
106 <#assign videoBackgroundfileEntry = mlxDLFileEntryHelperService.getDLFileEntry(videoBackground.uuid, globalGroupId) />
107 <#assign videoBackground = mlxUrlUtilService.getLRUrl(videoBackgroundfileEntry)!"" />
108 <#else>
109 <#assign videoBackground = "" />
110 </#if>
111 </#if>
112 </#if>
113
114 <#if videoYoutube?has_content>
115 <figure class="corporate--case--video-player--figure-youtube">
116 <iframe class="corporate--case--video-player--youtube" width="100%" height="100%" src="https://www.youtube.com/embed/${videoYoutube}?rel=0" frameborder="0" allowfullscreen></iframe>
117 </figure>
118 <#else>
119 <figure class="corporate--case--video-player--figure">
120 <video class="corporate--case--video-player--vid" poster="${videoBackground}" controls="controls" controlsList="nodownload">
121 <source src="${videoUrl}" >
122 </video>
123 </figure>
124 </#if>
125 </div>
126 </div>
127 </div>
128 </#if>
129</#if>
130
131
132<#--CONTENT-->
133<section class="corporate--section">
134 ${content.getData()}
135</section>
136
137<#--TECHNICAL SHEET-->
138<#assign technicalSheetRelated = (mlxAssetHelperService.getFirstRelatedArticle(groupId, articleId, technicalSheetStr)) ! "" />
139<#if technicalSheetRelated?has_content>
140 <#assign technicalSheet = mlxJournalContentService.getContent(technicalSheetRelated,technicalSheetRelated.getDDMTemplateKey(),locale,themeDisplay,'view') />
141 ${technicalSheet}
142</#if>
143
144<#--GALERY BANNERS-->
145<#assign typeLength = [] />
146<#assign existsImageGallery = false />
147<#assign existsVideoGallery = false />
148
149<#list video_gallery.getSiblings() as videoCategory >
150 <#if videoCategory.video_gallery_file.getData()?has_content >
151 <#assign typeLength = typeLength + [videoCategory] />
152 <#assign existsImageGallery = true />
153 </#if>
154</#list>
155
156<#list image_gallery.getSiblings() as imageCategory>
157 <#if imageCategory.image_gallery_file.getData()?has_content >
158 <#assign typeLength = typeLength + [imageCategory] />
159 <#assign existsVideoGallery = true />
160 </#if>
161</#list>
162
163<#if (existsImageGallery) || (existsVideoGallery)>
164 <div class="corporate--case--gallery" data-gtm-block-name="Multimedia">
165 <div class="corporate--case--gallery--container">
166 <h2 class="corporate--case--gallery--title"> <@corporate.mlxlanguage key="mlx.product.tab.gallery" /> </h2>
167
168 <div id="fancyGallery" style="display:none">
169 <#-- IMAGENES -->
170 <#assign imageCounter = 0 />
171 <#assign typesCounter = [] />
172
173 <#if image_gallery.getSiblings()?has_content >
174 <#list image_gallery.getSiblings() as curImageGallery >
175 <#list curImageGallery.image_gallery_file.getSiblings() as cur_file >
176 <#assign url = cur_file.getData() />
177 <#if url?has_content >
178 <#assign typesCounter = typesCounter + [ curImageGallery.image_gallery_type.getData()!"" ] />
179 <#assign uuid = mlxUrlUtilService.getUuidFromLiferayUrl(url) />
180 <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(uuid, globalGroupId) />
181 <#assign title = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale)/>
182 <#assign titleDocument = fileEntry.getTitle() />
183 <#assign urlParamConcat = cur_file.getData()?contains("?")?then("&","?")>
184 <#assign imageFancy = cur_file.getData()+urlParamConcat+'imwidth=1280&imdensity=1'/>
185 <#assign imageThumb = cur_file.getData()+urlParamConcat+'imwidth=320&imdensity=1'/>
186
187 <a href="${imageFancy}" data-fancybox='${curImageGallery.image_gallery_type.getData()?replace(" ", "-")}' data-caption="${title}" data-thumb='${imageThumb}'>
188 ${corporate.img(imageFancy, true, 'alt="' + title + '"', 'title="' + title + '"', 'class="corporate--case--gallery--image" data-js-urlparams="'+curImageGallery.image_gallery_type.getData()?replace(" ", "-")+'"')}
189 </a>
190
191 <#if imageCounter == 0>
192 <#assign firstImageGallery = {'src': imageFancy!"", 'title':title!""} />
193 <#assign imageCounter = imageCounter + 1 />
194 </#if>
195 </#if>
196 </#list>
197 </#list>
198 </#if>
199
200 <#-- VIDEOS -->
201 <#if video_gallery.getSiblings()?has_content >
202 <#list video_gallery.getSiblings() as curVideoGalley >
203 <#list curVideoGalley.video_gallery_file.getSiblings() as cur_file >
204 <#assign url = cur_file.getData() />
205 <#if url?has_content >
206
207 <#assign typesCounter = typesCounter + [ curVideoGalley.video_gallery_type.getData()!"" ] />
208 <#assign uuid = mlxUrlUtilService.getUuidFromLiferayUrl(url) />
209 <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(uuid, globalGroupId) />
210 <#assign title = mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxDocumentTitle",fileEntry.getFileVersion().getFileVersionId()).getString(locale)/>
211 <#assign titleDocument = fileEntry.getTitle() />
212 <#assign background = (mlxDLFileEntryHelperService.getDLFileEntryMlxFieldValuePersisted("background", fileEntry.getFileEntryId()))!"" />
213
214 <#if background?has_content>
215 <#assign background = background?eval />
216 <#assign videoBackgroundfileEntry = mlxDLFileEntryHelperService.getDLFileEntry(background.uuid, globalGroupId) />
217 <#assign background = mlxUrlUtilService.getLRUrl(videoBackgroundfileEntry) />
218 <#assign urlParamConcat = background?contains("?")?then("&","?")>
219 <#assign imageThumb = background+urlParamConcat+'imwidth=320&imdensity=1'/>
220 </#if>
221
222 <#assign youtubeEmbeddedCode = (mlxExpandoService.getExpandoValueForClass("com.liferay.document.library.kernel.model.DLFileEntry","mlxYoutubeEmbeddedCode",fileEntry.getFileVersion().getFileVersionId()).getString(locale))!"" />
223 <#assign href = url />
224 <#if youtubeEmbeddedCode?has_content >
225 <#assign href = "https://www.youtube.com/embed/${youtubeEmbeddedCode}?autoplay=1&rel=0" />
226 <#else>
227 <#assign htmlVideo = 'data-type="html5video"'>
228 </#if>
229
230 <a href="${href}" ${htmlVideo!} data-fancybox='${curVideoGalley.video_gallery_type.getData()?replace(" ", "-")}' data-caption="${title!''}" data-thumb='${imageThumb!""}'>
231 ${corporate.img(background, true, 'alt="' + title + '"', 'title="' + title + '"', 'class="corporate--case--gallery--image" data-js-urlparams="'+curVideoGalley.video_gallery_type.getData()?replace(" ", "-")+'"')}
232 </a>
233 </#if>
234 </#list>
235 </#list>
236 </#if>
237 </div>
238
239 <#if (typeLength?size > 0) >
240 <div class="corporate--case--gallery--filters">
241 <#assign imagesCheck = false>
242 <#assign illustrationsCheck = false>
243 <#assign plansCheck = false>
244
245 <#if (image_gallery.getSiblings()?size > 1)>
246 <#list image_gallery.getSiblings() as curImageGallery>
247 <#if curImageGallery.image_gallery_type.data == 'images'>
248 <#assign imagesCheck = true>
249 </#if>
250 <#if curImageGallery.image_gallery_type.data == 'illustrations'>
251 <#assign illustrationsCheck = true>
252 </#if>
253 <#if curImageGallery.image_gallery_type.data == 'plans'>
254 <#assign plansCheck = true>
255 </#if>
256 </#list>
257 </#if>
258
259 <#-- Todos -->
260 <#if (((existsImageGallery) && (existsVideoGallery)) || ((imagesCheck) && (illustrationsCheck)) || (plansCheck)) >
261 <button class="corporate--case--gallery--chip" data-js-filter="all" data-gtm-block-name="Multimedia" data-gtm-event="clickfilter" data-gtm-event-label='All' onclick="Fancybox.fromOpener('#fancyGallery [data-fancybox]')">
262 <@corporate.mlxlanguage key="mlx.theme.all" />
263 <span class="corporate--case--gallery--badge">${typesCounter?size}</span>
264 </button>
265 </#if>
266
267 <#-- IMAGENES -->
268 <#if image_gallery.getSiblings()?has_content >
269 <#list image_gallery.getSiblings() as curImageGallery >
270 <#if curImageGallery.image_gallery_file.getData()?has_content >
271 <#assign gtmTextFormat = curImageGallery.image_gallery_type.getData()?replace(" ", "-")?cap_first />
272 <button class="corporate--case--gallery--chip" data-gtm-block-name="Multimedia" data-gtm-event="clickfilter" data-gtm-event-label='${gtmTextFormat}' data-fancybox-trigger="${curImageGallery.image_gallery_type.getData()?replace(' ', '-')}">
273 <#if gtmTextFormat == 'Plans'>
274 <@corporate.mlxlanguage key='mlx.offers.doctype.Plane' />
275 <#else>
276 <@corporate.mlxlanguage key='mlx.mediabar.${curImageGallery.image_gallery_type.getData()}' />
277 </#if>
278 <span class="corporate--case--gallery--badge">${typesCounter?filter(x -> x = curImageGallery.image_gallery_type.getData()?replace(' ', '-'))?size}</span>
279 </button>
280 </#if>
281 </#list>
282 </#if>
283 <#-- VIDEOS -->
284 <#if video_gallery.getSiblings()?has_content >
285 <#list video_gallery.getSiblings() as curVideoGalley >
286 <#if curVideoGalley.video_gallery_file.getData()?has_content >
287 <#assign gtmTextFormat = curVideoGalley.video_gallery_type.getData()?replace(" ", "-")?cap_first />
288 <button class="corporate--case--gallery--chip" data-gtm-block-name="Multimedia" data-gtm-event="clickfilter" data-gtm-event-label='${gtmTextFormat}' data-fancybox-trigger="${curVideoGalley.video_gallery_type.getData()?replace(' ', '-')}">
289 <#if (curVideoGalley.video_gallery_type.getData())?has_content>
290 <@corporate.mlxlanguage key='mlx.mediabar.${curVideoGalley.video_gallery_type.getData()}' />
291 <#else>
292 <@corporate.mlxlanguage key='mlx.mediabar.videos' />
293 </#if>
294 <span class="corporate--case--gallery--badge">${typesCounter?filter(x -> x = curVideoGalley.video_gallery_type.getData()?replace(' ', '-'))?size}</button>
295 </button>
296 </#if>
297 </#list>
298 </#if>
299 </div>
300 </#if>
301
302 <div class="corporate--case--gallery--mosaic">
303 <#if (firstImageGallery.src)?has_content>
304 <figure class="corporate--case--gallery--figure-main" data-gtm-event="modal" data-gtm-event-label="open-product-gallery">
305 <img class="corporate--case--gallery--image" src="${firstImageGallery.src!''}" alt="${firstImageGallery.title!''}" onclick="Fancybox.fromOpener('#fancyGallery [data-fancybox]')">
306 </figure>
307 </#if>
308
309 <#if (firstImageGallery.title)?has_content>
310 <div class="corporate--case--gallery--ribbon">
311 <p>
312 ${firstImageGallery.title}
313 <button class="corporate--case--gallery--media-button">
314 ${corporate.img(cdn + '/o/corporate-theme/images/icons/ico-open-modal.svg', false,'class="corporate--case--gallery--media-button-image" alt="Gallery Media Button" width="18" height="18"')}
315 </button>
316 </p>
317 </div>
318 </#if>
319 </div>
320 </div>
321 </div>
322</#if>
323
324
325<#--RELATED PRODUCTS-->
326<#assign productStrKeys = ["PRODUCT-STR", "SOFTWARE-SOLUTIONS-PRODUCTS-STR"] />
327<#assign productRelated = mlxAssetHelperService.getRelatedArticlesByStructure(groupId, articleId, productStrKeys) />
328<#if productRelated?has_content>
329 <div class="corporate--case--relateds--container">
330 <h3 class="corporate--case--relateds--title"><@corporate.mlxlanguage key="mlx.practical-case.products" /></h3>
331 <div class="corporate--case--relateds">
332 <#list productRelated as product>
333 <#assign productImageContentValues = (mlxJournalHelperService.getStructureFieldValues(product, locale))!{} />
334
335 <#assign productImageContent = (productImageContentValues["list_imageFieldSet"])!{} />
336 <#assign productImageContent = productImageContent.list_image!"" />
337
338 <#assign productName = (productImageContentValues["name"]?string)!"" />
339 <#if !(productName?ends_with("*"))>
340 <#assign productUrl = mlxUrlUtilService.getUrlByJournalArticle(product,locale, groupId)?string />
341 <#assign productMasterName = mlxMastersHelperService.getMasterNameByJournalArticle(product) />
342 <div class="corporate--case--relateds--item">
343 <#if productImageContent?has_content>
344 <#assign productImage = jsonFactoryUtil.createJSONObject(productImageContent) />
345 </#if>
346 <#if productImage?has_content>
347 <#assign fileEntry = mlxDLFileEntryHelperService.getDLFileEntry(productImage.uuid, globalGroupId) />
348 <#assign productImageUrl = mlxUrlUtilService.getLRUrl(fileEntry) />
349 <#assign urlParamConcat = productImageUrl?contains("?")?then("&","?")>
350 <figure class="corporate--case--relateds--item--figure">
351 ${corporate.img(productImageUrl+urlParamConcat+'imwidth=320&imdensity=1', true, 'alt="' + productName + '"', 'title="' + productName + '"', 'class="corporate--case--relateds--item--image"')}
352 </figure>
353 </#if>
354 <div class="corporate--case--relateds--item--content">
355 <a href="${productUrl}" class="corporate--case--relateds--item--link" title="${productName}" data-content-master="${productMasterName}" data-content-structure="${product.getDDMStructure().getStructureKey()}">${productName}</a>
356 </div>
357 </div>
358 </#if>
359 </#list>
360 </div>
361 </div>
362</#if>
363
364<#-- DATOS ESTRUCTURADOS SEO JSON+LD -->
365
366<#assign article = mlxAssetHelperService.fetchLatestApprovedArticle(groupId, .vars["reserved-article-id"].getData()) />
367<#assign articleUrl = mlxUrlUtilService.getUrlByJournalArticle(article, locale, groupId)?string />
368<#assign domain = themeDisplay.getPortalDomain() />
369<#assign currentUrl = "https://"+ domain + articleUrl />
370
371<#--Valorar si hacerlo por el siteName o por el dominio. De momento lo haremos por dominio-->
372<#assign organizationName = 'Mecalux' />
373<#if (domain?contains("us")) || (domain?contains("interlake")) >
374 <#assign organizationName = 'Interlake Mecalux' />
375</#if>
376
377<#-- logo -->
378<#assign logo="/documents/20128/3456912/Mecalux-logo_600x60px.jpg/04c628fa-bb4c-0e81-75c9-2e598563979d?t=1582118551000" />
379<#if (domain?contains("es")) || (domain?contains("mecalux.es")) >
380 <#assign logo="/documents/20128/3456912/MecaluxEsmena-logo_600x60px.jpg/55173d2f-aadd-3f09-d3fb-456a758b3bd6?t=1582118551000" />
381</#if>
382<#if (domain?contains("us")) || (domain?contains("interlake")) >
383 <#assign logo="/documents/20128/3456912/InterlakeMecalux-logo_600x60px.jpg/48f97d72-4230-e18c-9424-b06fae217c90?t=1582118551000" />
384</#if>
385
386<script type="text/javascript">
387 window.addEventListener('load', function() {
388
389 var metaTag = document.querySelector("meta[property='og:image']");
390 var content = metaTag.getAttribute('content');
391
392 var imageSeo = '${list_image.getData()}' || content;
393
394 var image = new Image();
395 image.src = imageSeo;
396
397 image.onload = function() {
398 var imageWidth = this.width;
399 var imageHeight = this.height;
400
401 var domain = `https://${domain}`;
402 var currentUrl = "${currentUrl}";
403 var headline = "${.vars["name"].getData()}";
404 var description = "${html_description.getData()}";
405 var socialImage = content;
406 var datePublished = "${(article.getDisplayDate()?string['dd/MM/yyyy'])!''}";
407 var organizationName = "${organizationName}";
408 var logo = "${logo}";
409
410 var schema = {
411 "@context": "https://schema.org",
412 "@type": "Article",
413 "mainEntityOfPage": {
414 "@type": "WebPage",
415 "@id": currentUrl
416 },
417 "headline": headline,
418 "description": description,
419 "image": {
420 "@type": "ImageObject",
421 "url": imageSeo,
422 "width": imageWidth,
423 "height": imageHeight
424 },
425 "datePublished": datePublished,
426 "dateModified": datePublished,
427 "author": {
428 "@type": "Organization",
429 "name": organizationName,
430 "url": domain
431 },
432 "publisher": {
433 "@type": "Organization",
434 "name": organizationName,
435 "logo": {
436 "@type": "ImageObject",
437 "url": logo,
438 "width": 600,
439 "height": 60
440 }
441 }
442 }
443
444 var script = document.createElement('script');
445 script.type = 'application/ld+json';
446 script.text = JSON.stringify(schema);
447
448 document.querySelector('body').appendChild(script);
449 };
450 });
451</script>
Fragen Sie einen Experten