An error occurred while processing the template.
Java method "com.base22.liferay.journal.search.service.JournalSearchLocalServiceImpl.search(long, long, long, String, String, long, String, String[], String[], String, String, String, String, boolean)" threw an exception when invoked on com.base22.liferay.journal.search.service.JournalSearchLocalServiceImpl object "com.base22.liferay.journal.search.service.JournalSearchLocalServiceImpl@46db9969"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign relatedDocuments = journalSea... [in template "20116#20152#168572" at line 267, column 1] ----
1<style>
2 article p {
3 color: #000;
4 }
5 article hr {
6 margin: 40px 0;
7 }
8 .buttons-wrapper {
9 border-top: 2px solid #45474e;
10 border-bottom: 2px solid #45474e;
11 }
12 .buttons-container {
13 padding: 40px 0px;
14 }
15 .buttons-container .btn {
16 border-radius: 0px;
17 padding: 10px 50px;
18 color: #FFF;
19 background-color: #003876;
20 margin: 30px 0px;
21 }
22 .summary__description {
23 font-size: 24px;
24 line-height: 36px;
25 letter-spacing: 0.5px;
26 font-family: "Roboto",sans-serif;
27 margin-bottom: 40px;
28 }
29 .features-container {
30 margin: 40px 0px;
31 }
32 .buttons-container .btn.contact-us {
33 background-color: #003876;
34 }
35 .buttons-container .btn.get-quote {
36 background-color:#b32c32;
37 }
38 }
39 .portlet-journal-content .journal-content-article .features-list table img{
40 max-width: 180px;
41 }
42 .buttons-container span {
43 vertical-align: middle;
44 padding-left: 5px;
45 }
46
47 .buttons-container .btn i {
48 background-repeat: no-repeat;
49 background-size: contain;
50 height: 32px;
51 width: 32px;
52 display: inline-block;
53 vertical-align: middle;
54 }
55 .locate-us i {
56 background-image: url("/documents/45807659/45840069/icon-map.png/11d8bb8e-f815-32b5-2f85-a56aa78232bb?t=1522186225695");
57 }
58 .get-quote i {
59 background-image: url("/documents/45807659/45840069/icon-quote.png/e36b8940-2bcb-d2e8-176c-37f5b9b96bfc?t=1522186252612");
60 width: 24px;
61 }
62 .contact-us i {
63 background-image: url("/documents/45807659/45840069/icon-contact.png/df1fe862-f3fa-671f-ae94-38b843f76af8?t=1524172877042");
64 }
65 .features-list ul {
66 list-style: none;
67 padding: 0;
68 }
69 .features-list li {
70 padding-left: 1.3em;
71 }
72 .features-list li:before {
73 content: "\f00c";
74 font-family: FontAwesome;
75 display: inline-block;
76 margin-left: -1.3em;
77 width: 1.3em;
78 font-size: 10px;
79 }
80 .features-image img {
81 max-height: 250px;
82 width: 100%;
83 }
84 .file-download img {
85 max-height: 35px;
86 margin-right: 5px;
87 margin-top: 5px;
88 }
89 .locate-us-container {
90 text-align: right;
91 }
92 .get-quote-container {
93 text-align: center;
94 }
95 article .row.content-wrapper {
96 margin-top: 40px;
97 }
98 @media (max-width:767px) {
99 .locate-us-container, .get-quote-container, .contact-us-container {
100 text-align: center;
101 }
102 .get-quote-container .btn {
103 margin: 0px;
104 }
105 .buttons-container .btn {
106 width: 100%;
107 font-size: 20px;
108 }
109 }
110 @media (min-width:768px) and (max-width:1024px){
111 .buttons-container .btn {
112 padding: 10px 40px;
113 }
114 }
115 .file-detail {
116 margin-bottom: 28px;
117 height: 120px;
118 padding: 0 20px 0 0 !important;
119 }
120 .attachments-wrapper {
121 font-size: 15px;
122 }
123 .summary__title, .summary__title h1 {
124 font-size: 40px;
125 margin-bottom: 40px;
126 font-weight: bold;
127 }
128 .summary__collapsable-title {
129 margin: 25px 0;
130 padding: 15px;
131 color: #ffffff;
132 font-size: 16px;
133 letter-spacing: 0.3px;
134 }
135 .summary__collapsable-heading {
136 background-color: #f5f5f5;
137 padding: 20px 15px;
138 font-size: 24px;
139 font-weight: 600;
140 margin-bottom: 20px !important;
141 }
142 .summary__collapsable-content {
143 padding: 0 30px 30px 30px;
144 }
145 .summary__collapsible-arrow, .summary__collapsible-arrow:hover,
146 .summary__collapsible-arrow:focus {
147 color: #1a1c20;
148 }
149 .summary__collapsable-attachment-title {
150 font-weight: bold;
151 font-size: 16px;
152 margin: 15px 0;
153 }
154 .summary__collapsable-attachment-icon {
155 margin-right: 10px;
156 height: 40px;
157 }
158 .summary__collapsable-attachment-arrow {
159 top: 2px;
160 margin-left: 10px;
161 }
162 .summary__collapsable-attachment-icon {
163 width: 31px;
164 height: 40px;
165 background-position: -657px -592px;
166 }
167 .summary__collapsable-attachment {
168 display: flex;
169 }
170 .summary__collapsable-attachment-name {
171 margin-top: 10px;
172 }
173 .summary__collapsable-image {
174 background-repeat: no-repeat;
175 background-size: contain;
176 height: 100px;
177 margin-bottom: 20px;
178 background-position: center;
179 }
180 a.b-cemex-button {
181 color: #000;
182 }
183 .file-description {
184 font-size: 18px;
185 font-weight: bold;
186 line-height: 1.56;
187 color: #1a1c20;
188 letter-spacing: 0.4px;
189 margin-bottom: 19px
190 }
191 .benefitsAndApplications {
192 display: table-row;
193 }
194 .benefitsAndApplications .section {
195 display: table-cell;
196 background-color: #e4e4e4;
197 padding: 15px;
198 }
199 .benefitsAndApplications .separator {
200 display: table-cell;
201 width: 20px;
202 border: none;
203 background-color: #FFF;
204 }
205 .benefitsAndApplications .section h3 {
206 padding: 10px 0;
207 background-color: #b6b6b6;
208 text-align: center;
209 color: #FFF;
210 }
211 .benefitsAndApplications .section h4 {
212 font-weight: bold;
213 margin: 15px;
214 }
215 @media (max-width:767px) {
216 .benefitsAndApplications {
217 display: block;
218 }
219 .benefitsAndApplications .section {
220 display: block;
221 width: 100%;
222 }
223 .benefitsAndApplications .separator {
224 height: 20px;
225 }
226 }
227 .applications {
228 display: block;
229 width: 100%;
230 }
231 .applications .section {
232 background-color: #e4e4e4;
233 padding: 15px;
234 }
235 .applications .section h3 {
236 padding: 10px 0;
237 background-color: #b6b6b6;
238 text-align: center;
239 color: #FFF;
240 }
241 .applications .section h4 {
242 font-weight: bold;
243 margin: 15px;
244 }
245</style>
246<#assign journalArticleId = .vars['reserved-article-id'].data>
247<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
248<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
249<#assign journalArticle = journalArticleLocalService.getArticle(groupId, journalArticleId)/>
250<#assign articleResource = journalArticle.getArticleResource() />
251<#assign articleResourcePK = articleResource.getPrimaryKey() />
252<#assign categoryList=assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle",articleResourcePK) >
253<#assign serviceContext = staticUtil["com.liferay.portal.kernel.service.ServiceContextThreadLocal"].getServiceContext()>
254<#assign themeDisplay = serviceContext.getThemeDisplay() />
255<#if categoryList?size gt 0>
256 <#assign mainCategory = categoryList[0] />
257</#if>
258<#if categoryList?size gt 0>
259<#assign categories = []/>
260<#list categoryList as category>
261 <#assign categories = categories + [category.getCategoryId()?string]/>
262</#list>
263<#assign journalSearchService = serviceLocator.findService("com.base22.liferay.journal.search.service.JournalSearchLocalService") />
264<#assign userId = themeDisplay.getUserId() />
265<#assign plid = themeDisplay.getPlid() />
266<#assign structures = ["189596"] />
267<#assign relatedDocuments = journalSearchService.search(userId, plid, companyId, "", "", groupId, locale, structures, categories, null, "must", null, null, true) />
268</#if>
269
270<article class="container">
271 <div class="row" style="margin-top:40px">
272 <div class="col-xs-12 col-sm-12 col-md-offset-2 col-md-8 col-lg-offset-2 col-lg-8">
273 <#if displayTitle?? && displayTitle.getData()?? && displayTitle.getData()?trim != "">
274 <header class="row">
275 <div class="summary__title"><h1>${displayTitle.getData()}</h1></div>
276 </header>
277 </#if>
278
279 <#if summary?? && summary.getData()?? && summary.getData()!="">
280 <div class="row summary__intro-container">
281 <div class="col-md-12">
282 <div class="summary__description">
283 ${summary.getData()}
284 </div>
285 </div>
286 </div>
287 </#if>
288
289 <div class="row buttons-wrapper">
290 <div class="col-xs-12 buttons-container">
291 <div class="col-xs-12 col-sm-4 contact-us-container">
292 <a href="https://www.cemex.co.uk/technical-product-support-helpline" id="prodSupPhone" class="btn contact-us">
293 <i aria-hidden="true"></i>
294 <span>Product Support</span>
295 </a>
296 </div>
297 <div class="col-xs-12 col-sm-4 get-quote-container">
298 <#if overrideGetQuoteURL?? && overrideGetQuoteURL.getData()?? && overrideGetQuoteURL.getData()?trim != "">
299 <a href="${overrideGetQuoteURL.getData()}" class="btn get-quote">
300 <i aria-hidden="true"></i>
301 <span>Get a Quote</span>
302 </a>
303 <#else>
304 <a href="/quote-requests-link" class="btn get-quote">
305 <i aria-hidden="true"></i>
306 <span>Get a Quote</span>
307 </a>
308 </#if>
309 </div>
310 <div class="col-xs-12 col-sm-4 locate-us-container">
311 <a href="/find-your-location.aspx<#if mainCategory?? && mainCategory.getDescription()?trim != "">?categoryid=${mainCategory.getDescription(locale)}</#if>" class="btn locate-us">
312 <i aria-hidden="true"></i>
313 <span>Locate Us</span>
314 </a>
315 </div>
316 </div>
317 </div>
318
319 <#if (thumbnail?? && thumbnail.getData()?? && thumbnail.getData()!="") || (features?? && features.getData()?? && features.getData()!="")>
320 <div class="row features-wrapper">
321 <div class="col-xs-12 features-container">
322 <#if features?? && features.getData()?? && features.getData()!="">
323 <div class="<#if thumbnail?? && thumbnail.getData()?? && thumbnail.getData()!="">col-xs-6<#else>col-xs-12</#if> col-sm-6 features-list">
324 ${features.getData()}
325 </div>
326 </#if>
327 <#if thumbnail?? && thumbnail.getData()?? && thumbnail.getData()!="">
328 <div class="<#if features?? && features.getData()?? && features.getData()!="">col-xs-6<#else>col-xs-12</#if> col-sm-6 features-image">
329 <img src="${thumbnail.getData()}" alt="${displayTitle.getData()}">
330 </div>
331 </#if>
332 </div>
333 </div>
334 </#if>
335
336 <#if body?? && body.getData()?? && body.getData()!="">
337 <div class="row content-wrapper">
338 <div class="col-xs-12 content-container">
339 ${body.getData()}
340 </div>
341 </div>
342 </#if>
343
344 <div class="row">
345 <#if section?? && section.getSiblings()?has_content>
346 <#list section.getSiblings() as cur_section>
347
348 <#assign collapsible_index = cur_section.getName() + cur_section_index />
349
350 <#assign collapsible_title = "" />
351 <#assign cur_attachment = "" />
352 <#assign cur_body = "" />
353
354 <#list cur_section.getChildren() as children>
355
356 <#if ( children.getName() == "title" ) >
357 <#assign collapsible_title = children.getData() />
358 </#if>
359 <#if ( children.getName() == "file" ) >
360 <#assign cur_attachment = children.getData() />
361 </#if>
362 <#if ( children.getName() == "content" ) >
363 <#assign cur_body = children.getData() />
364 </#if>
365
366 </#list>
367
368 <#if collapsible_title?trim != "">
369 <div class="row summary__collapsable-heading b-collapsable__border-left" style="background-color: white;" >
370 <div class="col-xs-11">
371 <h2>${collapsible_title}</h2>
372 </div>
373 <div class="col-xs-1">
374 <a class="summary__collapsible-arrow" role="button"
375 data-toggle="collapse" href="#${collapsible_index}"
376 aria-expanded="true" aria-controls="${collapsible_index}">
377 <span class="glyphicon glyphicon-menu-up"
378 aria-hidden="true"></span>
379 </a>
380 </div>
381 </div>
382 </#if>
383 <div class="collapse row in" id="${collapsible_index}" aria-expanded="true" <#if collapsible_title?trim == "">style="display: block;"</#if>>
384 <div class="summary__collapsable-content">
385
386 <#if cur_body != "" >
387 ${cur_body}
388 </#if>
389
390 <#if cur_attachment != "">
391 <@generateAttachmentElement cur_attachment ""/>
392 </#if>
393
394 </div>
395 </div>
396 </#list>
397 </#if>
398 </div>
399 </div>
400 </div>
401 <#include "${templatesPath}/46036047" />
402
403 <#if relatedDocuments?? && relatedDocuments.getResults()?has_content>
404 <#if (!hideRelatedDocuemnts?? || !getterUtil.getBoolean(hideRelatedDocuemnts.getData()))>
405 <div class="row" style="margin-top:40px">
406 <div class="col-xs-12 col-sm-12 col-md-offset-2 col-md-8 col-lg-offset-2 col-lg-8">
407 <div class="row summary__collapsable-heading b-collapsable__border-left" style="background-color: white;">
408 <div class="col-xs-11">
409 <h2>Related Documents</h2>
410 </div>
411 <div class="col-xs-1">
412 <a class="summary__collapsible-arrow" role="button"
413 data-toggle="collapse" href="#relatedDocuments"
414 aria-expanded="true" aria-controls="relatedDocuments">
415 <span class="glyphicon glyphicon-menu-up"
416 aria-hidden="true"></span>
417 </a>
418 </div>
419 </div>
420 <div class="collapse row in" id="relatedDocuments" aria-expanded="true">
421 <div class="row attachments-wrapper ">
422 <#if (attachments?? && attachments.getSiblings()?has_content) >
423 <#list attachments.getSiblings() as attachment>
424 <#if attachment?? && attachment.getData()?? && attachment.getData()!="">
425 <@generateAttachmentElement attachmentURL=attachment.getData() title=""/>
426 </#if>
427 </#list>
428 </#if>
429 <#if (!hideRelatedDocuemnts?? || !getterUtil.getBoolean(hideRelatedDocuemnts.getData())) && (relatedDocuments?? && relatedDocuments.getResults()?has_content)>
430 <#attempt>
431 <#list relatedDocuments.getResults() as entry>
432 <#if entry.getValue("attachment")?trim != "" >
433 <#assign attachment = entry.getValue("attachment")?eval/>
434 <@generateAttachmentElement attachmentURL="/documents/" + attachment.groupId + "/" + attachment.folderId + "/" + attachment.fileName + "/" + attachment.uuid title=entry.getValue("displayTitle") />
435 </#if>
436 </#list>
437
438 <#recover>
439 <!-- something went wrong -->
440 </#attempt>
441 </#if>
442 </div>
443 </div>
444 </div>
445 </div>
446 </#if>
447 </#if>
448</article>
449
450<script>
451 (function(window, $, undefined) {
452 var onReady = function() {
453 var $collapsibleArrows = $('.summary__collapsable-heading > div > a'),
454 $attachmentsContainer = $('.attachments-wrapper');
455
456 $collapsibleArrows.on('click', function(event) {
457 event.preventDefault();
458 var $currentSpan = $(this).find('span');
459 var $currentHeading = $(this).closest('div.summary__collapsable-heading');
460 if($(this)[0].getAttribute('aria-expanded') == "true"){
461 $currentSpan.removeClass();
462 $currentSpan.addClass("glyphicon glyphicon-menu-down");
463 $currentHeading.css("background-color", "#f5f5f5");
464 } else {
465 $currentSpan.removeClass();
466 $currentSpan.addClass("glyphicon glyphicon-menu-up");
467 $currentHeading.css("background-color", "white");
468 }
469 });
470 var elements = location.href.split("#")
471 if(elements.length > 1 && $("#" + elements[1]).length > 0){
472 setTimeout(function(){
473 //$("#" + elements[1]).parent().parent().find("a.summary__collapsible-arrow").trigger('click');
474 var h = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
475 if($("#" + elements[1]).offset().top > h)
476 $("#content-footer-wrapper").scrollTop(($("#" + elements[1]).offset().top-80));
477
478 },400);
479
480 } else {
481 //$($collapsibleArrows[0]).trigger('click');
482 //if ( $attachmentsContainer.children().length > 0 ) {
483 // $attachmentsContainer.removeClass('hidden');
484 //}
485 }
486 };
487 AUI().ready(onReady);
488 })(window, jQuery);
489</script>
490
491<#if generateJsonld?? && getterUtil.getBoolean(generateJsonld.getData())>
492 <script type="application/ld+json">
493 {
494 "@context": "http://schema.org",
495 "@type": "Product",
496 "name": "${displayTitle.getData()}",
497 "image": "<#if thumbnail?? >${thumbnail.getData()}</#if>",
498 "description": "${summary.getData()?trim}",
499 "url" : "https://www.cemex.co.uk${themeDisplay.getURLCurrent()}",
500 <#if categoryList?size gt 1>"brand" : "${categoryList[1].getName()}",</#if>
501 <#if categoryList?size gt 0>"category" : "${categoryList[0].getName()}",</#if>
502 <#if isRelatedTo?trim != "">"isRelatedTo" : [${isRelatedTo}],</#if>
503 "manufacturer" : "CEMEX S.A.B. de C.V."
504 }
505 </script>
506</#if>
507
508<#macro generateAttachmentElement attachmentURL title>
509 <#assign counter = 0 >
510 <#list attachmentURL?split("/") as chunkURL>
511 <#if counter == 2>
512 <#assign groupId = chunkURL?number >
513 </#if>
514 <#if counter == 5>
515 <#if chunkURL?index_of("?") != -1>
516 <#assign uuId = chunkURL?substring(0, chunkURL?index_of("?")) >
517 <#else>
518 <#assign uuId = chunkURL >
519 </#if>
520 </#if>
521 <#assign counter = counter+1 >
522 </#list>
523
524 <#assign fileEntry = serviceLocator.findService('com.liferay.document.library.kernel.service.DLFileEntryService') />
525 <#assign file=fileEntry.getFileEntryByUuidAndGroupId(uuId, getterUtil.getLong(groupId)) >
526 <#assign fileName = file.getTitle()>
527 <#assign fileDescription = file.getDescription()>
528
529 <div class="col-xs-12 col-md-6 file-detail">
530 <div class="file-description"><#if fileDescription?trim != "" >${fileDescription}<#else>${title}</#if></div>
531 <div class="file-download"><img src="/documents/45807659/45840069/pdf-icon.png/e7af5019-3956-922d-161b-0de750ccadd1?t=1519847131363" alt="${fileDescription}"><a href="${attachmentURL}">${fileName}</a></div>
532 </div>
533</#macro>