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