Při zpracování šablony došlo k chybě.
Java method "com.sun.proxy.$Proxy570.getArticleByUrlTitle(long, String)" threw an exception when invoked on com.sun.proxy.$Proxy570 object "com.liferay.journal.service.impl.JournalArticleLocalServiceImpl@1796cc9a"; see cause exception in the Java stack trace. ---- FTL stack trace ("~" means nesting-related): - Failed at: #assign journalArticle = journalArtic... [in template "20116#20152#394336" at line 1141, column 1] ----
1<style>
2body {
3 font-family: sans-serif, serif;
4 margin: 0;
5}
6.carousel-content{
7 margin-bottom:20px;
8}
9
10.modal-image-caption {
11 font-weight: bold;
12 text-align: center;
13 margin-top: 10px;
14}
15* {
16 box-sizing: border-box;
17}
18
19.row > .column {
20 padding: 0 8px;
21}
22
23.row:after {
24 content: "";
25 display: table;
26 clear: both;
27}
28
29.column {
30 float: left;
31 width: 25%;
32}
33.signed-in .my-modal{
34 top:140px;
35}
36
37/* The Modal (background) */
38.my-modal {
39 display:none;
40position: fixed;
41 top: 80px;
42 width: 70%;
43 height: 100%;
44 overflow: hidden;
45 background-image: none;
46 z-index: 1000;
47 left: 0;
48 right: 0;
49 margin: auto;
50
51}
52.modal-image{
53width: 100%;
54 height: 0; /* Reset the height to 0 to maintain aspect ratio */
55 padding-top: 75%; /* This corresponds to a 4:3 aspect ratio (3/4 = 0.75) */
56 background-size: cover; /* Maintain the image's aspect ratio and cover the container */
57 background-position: center center; /* Center the image within the container */
58 background-repeat: no-repeat;
59
60}
61/* Modal Content */
62.modal-content {
63 position: relative;
64 background-color: #fefefe;
65 margin: auto;
66 padding: 0;
67 width: 90%;
68 max-width: 600px;
69}
70
71@media(max-width:768px){
72 .modal-content {
73 height:auto;
74 }
75
76}
77
78/* The Close Button */
79.close-button {
80 color: black;
81 position: absolute;
82 top: 10px;
83 right: 10px;
84 font-size: 40px;
85 font-weight: bold;
86 opacity: 1;
87 z-index:1;
88}
89@media(max-width:992px){
90 .close-button {
91 right: 10px;
92 }
93}
94
95.close-button:hover,
96.close-button:focus {
97 color: #999;
98 text-decoration: none;
99 cursor: pointer;
100}
101
102.mySlides {
103 display: none;
104}
105
106.cursor {
107 cursor: pointer;
108}
109
110/* Next & previous buttons */
111.modal-prev,
112.modal-next {
113 cursor: pointer;
114 position: absolute;
115 top: 50%;
116 width: auto;
117 padding: 16px;
118 margin-top: -50px;
119 color: white;
120 font-weight: bold;
121 font-size: 20px;
122 transition: 0.6s ease;
123 border-radius: 0 3px 3px 0;
124 user-select: none;
125 -webkit-user-select: none;
126}
127
128/* Position the "next button" to the right */
129.modal-next {
130 right: 0;
131 border-radius: 3px 0 0 3px;
132}
133
134.modal-prev {
135 left: 0;
136 border-radius: 3px 0 0 3px;
137}
138
139
140/* On hover, add a black background color with a little bit see-through */
141.modal-prev:hover,
142.modal-next:hover {
143 background-color: rgba(0, 0, 0, 0.8);
144}
145
146/* Number text (1/3 etc) */
147.numbertext {
148 color: #f2f2f2;
149 font-size: 12px;
150 padding: 8px 12px;
151 position: absolute;
152 top: 0;
153}
154
155img {
156
157 margin-bottom: -4px;
158}
159
160.caption-container {
161 text-align: center;
162 background-color: black;
163 padding: 2px 16px;
164 color: white;
165}
166
167.demo {
168 opacity: 0.6;
169}
170
171.active,
172.demo:hover {
173 opacity: 1;
174}
175
176img.hover-shadow {
177 transition: 0.3s;
178}
179
180.hover-shadow:hover {
181 box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
182}
183
184/*.resimg{
185 height: -webkit-fill-available;
186 padding:10px;
187}*/
188
189.resimg{
190 width:100%;
191 padding:10px;
192}
193.responsive-image{
194 height:250px;
195}
196@media(max-width:768px){
197 .responsive-image{
198 height:150px;
199}
200}
201@media(max-width:576px){
202 .responsive-image{
203 height:130px;
204}
205}
206</style>
207<style>
208
209@media(max-width:768px){
210 .modal-image {
211 height: 300px;
212}
213}
214.multi-item-carousel{
215 .carousel-inner{
216 margin-bottom:20px;
217 }
218 .carousel-inner{
219 > .item{
220 transition: 500ms ease-in-out left;
221
222 }
223 .active{
224 &.left{
225 left:-33%;
226
227 }
228 &.right{
229 left:33%;
230
231 }
232 }
233 .next{
234
235 left: 33%;
236 }
237 .prev{
238
239 left: -33%;
240 }
241
242 }
243
244}
245
246@media (transform-3d), (-webkit-transform-3d){
247.multi-item-carousel .carousel-inner > .item {
248 transition: 500ms ease-in-out left;
249 transition: 500ms ease-in-out all;
250 -webkit-backface-visibility: visible;
251 backface-visibility: visible;
252 transform: none!important;
253}
254}
255
256</style>
257
258
259<#-- START text variables -->
260<#-- printNavigate = languageUtil.get(locale,"template.location-element-evo.print-navigate") -->
261<#assign printAdress = "Adresa",
262 printRegion = "Region",
263 printCountry = "Země",
264 printNavigate = "Navigovat",
265 printGps = "GPS",
266 printOrders = "Objednávky",
267 printOpen = "Otevírací doba",
268 printContacts = "Kontakty",
269 printPriceList = "Ceník produktů a služeb",
270 printGoods = "Nabízený sortiment",
271 printQuality = "Kvalita",
272 printConEmail = "E-mail: ",
273 printConPhone = "Tel.: ",
274 downloadLabel = "Stáhnout",
275 printGetQuote = "Odeslat poptávku"
276 >
277<#-- END text variables -->
278
279<#-- configuration -->
280<#assign dateFormat = "d. MMMM yyyy" />
281<#setting locale=locale.toString()>
282
283<#assign dLFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") />
284<#assign httpUtil = staticUtil["com.liferay.portal.kernel.util.HttpUtil"] />
285
286<link crossorigin="anonymous" href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" integrity="sha384-DNOHZ68U8hZfKXOrtjWvjxusGo9WQnrNx2sqG0tfsghAvtVlRW3tvkXWZh58N9jp" rel="stylesheet" />
287
288<link href="https://npmcdn.com/leaflet@0.7.3/dist/leaflet.css" rel="stylesheet" />
289
290<script src="https://npmcdn.com/leaflet@0.7.3/dist/leaflet.js" type="text/javascript"></script>
291
292
293<style type="text/css" >
294 .search-controls {
295 display: none;
296 }
297
298 .row.gap-default {
299 margin-right: -15px;
300 margin-left: -15px
301 }
302
303 .row.gap-default > [class*=col-] {
304 padding-right: 15px;
305 padding-left: 15px
306 }
307
308 .margin-bt-grid-gap-complement {
309 margin-bottom: 10px
310 }
311
312 .margin-bt-head {
313 margin-bottom: .5em
314 }
315
316 .margin-bt-block {
317 margin-bottom: 20px
318 }
319
320 .word-break {
321 word-wrap: break-word;
322 word-break: break-word
323 }
324
325 .inline-align-self-middle {
326 vertical-align: middle
327 }
328
329 .highlight-color {
330 color: #34a6f8
331 }
332
333 .font-size-2x {
334 font-size: 2em
335 }
336
337 .location-detail .heading {
338 margin-bottom: 40px
339 }
340
341 .location-detail h1 {
342 font-size: 40px
343 }
344
345 .location-detail p {
346 font-weight: 400
347 }
348
349 .location-detail [class*=col-] img {
350 width: 100%;
351 max-width: 100%
352 }
353
354 .location-detail .location-detail-alert-message {
355 background: #ee3a43;
356 color: #ffffff;
357 text-align: center;
358 }
359
360 .summary__collapsable-heading {
361 background-color: #f5f5f5;
362 padding: 20px 15px;
363 font-size: 24px;
364 font-weight: 600;
365 margin-bottom: 20px!important
366 }
367
368 .summary__collapsable-content {
369 padding: 0 30px 30px
370 }
371
372 .summary__collapsible-arrow,
373 .summary__collapsible-arrow:focus,
374 .summary__collapsible-arrow:hover {
375 color: #1a1c20
376 }
377
378 .b-cemex-button-ext {
379
380 height: 40px;
381 font-family: Roboto, sans-serif;
382 line-height: .91;
383 letter-spacing: 2px;
384 font-size: 10px;
385 text-align: center;
386 min-width: 70px;
387 text-transform: uppercase;
388 font-weight: 700;
389 padding: 16px;
390 border: 1px solid
391 }
392
393 .b-cemex-button-black a{
394 color: #000;
395 text-decoration: none;
396 }
397
398 .b-cemex-button__inline {
399 display: inline-block
400 }
401
402 .listcontacts ul {
403 padding: 0;
404 list-style: none;
405 }
406
407 .listcontacts > ul > li {
408 float: left;
409 padding: 0em 1.5em 2em 0;
410 }
411
412 @media screen and (max-width: 768px){
413
414 .location-detail .heading {
415 margin-bottom: 20px
416 }
417
418 .location-detail h1 {
419 font-size: 32px !important;
420 }
421
422 .summary__collapsable-heading h2 {
423 font-size: 32px !important;
424 }
425
426 }
427
428 @media screen and (max-width: 480px){
429 .location-detail h1 {
430 font-size: 26px !important;
431 }
432
433 .summary__collapsable-heading h2 {
434 font-size: 26px !important;
435 }
436
437 .location-detail h3 {
438 font-size: 18px !important;
439 }
440 }
441
442 @media screen and (min-width:1024px) {
443 .b-item-card {
444 margin-right: 22px
445 }
446 }
447
448 .b-item-card {
449 margin-bottom: 20px;
450 border: 1px solid #ccc
451 }
452
453 .b-item-card .b-item-card__image {
454 padding: 10%;
455 border-bottom: 1px solid #ccc;
456 background-color: rgba(0, 0, 0, .08)
457 }
458
459 .b-item-card .b-item-card__image>img {
460 width: 100%;
461 min-height: 280px;
462 max-height: 280px
463 }
464
465 .b-item-card .b-item-card__image .b-item-card__image-background {
466 width: 100%;
467 height: 280px;
468 position: relative;
469 background-repeat: no-repeat;
470 background-position: center;
471 background-size: contain
472 }
473
474 .b-item-card .b-item-card__info {
475 padding: 20px
476 }
477
478 .b-item-card__publish-date {
479 font-size: 12px;
480 text-align: left;
481 color: #5a5d66
482 }
483
484 .b-item-card__category {
485 font-size: 12px;
486 text-align: left;
487 color: #5a5d66;
488 font-weight: 700
489 }
490
491 .b-item-card__summary {
492 font-size: 12px;
493 line-height: 1.5;
494 text-align: left;
495 padding-top: 20px;
496 height: 136px;
497 overflow: hidden;
498 margin-bottom: 20px;
499 padding-bottom: 0 !important
500 }
501 .b-item-card__title {
502 font-size: 16px;
503 line-height: 1.5;
504 text-align: left;
505 padding-top: 10px;
506 height: auto;
507 overflow: hidden;
508 margin-bottom: 5px;
509 padding-bottom: 0 !important
510 }
511
512 .ld-contactbox-quote a.btn {
513 padding: 10px 35px;
514 text-transform: uppercase;
515 font-size: 16px;
516 font-weight: 700;
517 color: #FFF;
518 background-color: #d9534f;
519 border: #d9534f 1px solid;
520 border-radius: 5px;
521 }
522.galleryTitle{padding-left:20px; padding-right:20px; padding-top:20px; padding-bottom:20px;}
523.carousel-control{margin-left:20px; margin-right:20px; margin-top:20px; margin-bottom:20px;}
524.carousel-slide{padding:20px;}
525.carousel-caption{text-shadow: 3px 3px 4px #000000;}
526.thumbGallery{padding:20px;}
527.img-thumbnail:hover{cursor:pointer}
528.innerItem{padding-left:20px; padding-right:20px; padding-top:20px; padding-bottom:20px;}
529</style >
530
531<#assign categoryProductList = "Product list">
532<#assign categoryLocationType = "Location type">
533
534<#assign journalArticleId = .vars['reserved-article-id'].data>
535<#assign journalArticleResourceLocalServiceUtil = serviceLocator.findService('com.liferay.journal.service.JournalArticleResourceLocalService')>
536<#assign assetCategoryLocalServiceUtil = serviceLocator.findService('com.liferay.asset.kernel.service.AssetCategoryService')>
537
538<#assign articleResourcePK = journalArticleResourceLocalServiceUtil.getArticleResourcePrimKey(groupId, journalArticleId)/>
539<#assign categoryList=assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",articleResourcePK) >
540
541<#if alertBox??
542 && alertBox.alertMessage??
543 && alertBox.alertMessage.getData()??
544 && alertBox.alertMessage.getData()?has_content>
545
546 <#assign showBasedOnAlertMessageActiveFromDate = true />
547 <#assign nowDate = dateUtil.parseDate("yyyy-MM-dd", .now?string("yyyy-MM-dd"), locale)/>
548
549 <#if alertBox?? && alertBox.alertMessageActiveFrom?? && alertBox.alertMessageActiveFrom.getData()??>
550 <#assign alertMessageActiveFromData = getterUtil.getString(alertBox.alertMessageActiveFrom.getData())>
551 <#if alertMessageActiveFromData?? && alertMessageActiveFromData?has_content>
552 <#assign alertMessageActiveFromDate = dateUtil.parseDate("yyyy-MM-dd", alertMessageActiveFromData, locale)/>
553 <#if nowDate?date gte alertMessageActiveFromDate?date>
554 <#assign showBasedOnAlertMessageActiveFromDate = true />
555 <#else>
556 <#assign showBasedOnAlertMessageActiveFromDate = false />
557 </#if>
558 </#if>
559 </#if>
560
561 <#assign showBasedOnAlertMessageActiveToDate = true />
562
563 <#if alertBox?? && alertBox.alertMessageActiveTo?? && alertBox.alertMessageActiveTo.getData()??>
564 <#assign alertMessageActiveToData = getterUtil.getString(alertBox.alertMessageActiveTo.getData())>
565 <#if alertMessageActiveToData?? && alertMessageActiveToData?has_content>
566 <#assign alertMessageActiveToDate = dateUtil.parseDate("yyyy-MM-dd", alertMessageActiveToData, locale)/>
567 <#if nowDate?date lte alertMessageActiveToDate?date>
568 <#assign showBasedOnAlertMessageActiveToDate = true />
569 <#else>
570 <#assign showBasedOnAlertMessageActiveToDate = false />
571 </#if>
572 </#if>
573 </#if>
574
575 <#if showBasedOnAlertMessageActiveFromDate && showBasedOnAlertMessageActiveToDate>
576 <div class="location-detail">
577 <div class="location-detail-alert-message">
578 ${alertBox.alertMessage.getData()}
579 </div>
580 </div>
581 </#if>
582</#if>
583<#if specialOffers??>
584${specialOffers.getData()}
585</#if>
586
587<article class="location-detail container">
588 <div class="row" style="margin-top:40px">
589 <div class="wrapper col-xs-12">
590 <div class="row">
591 <#-- Head, photo, description -->
592 <div class="heading">
593 <h1>${locationName.getData()}</h1>
594
595 <#--
596 <@printLocationTypes/>
597 -->
598
599 </div>
600
601 <#if locationImage.getData() != '' || locationSummary.getData() != ''>
602 <div class="margin-bt-grid-gap-complement">
603 <div class="row gap-default">
604 <#if locationImage.getData() != ''>
605 <div class="col-md-4 col-sm-4 col-xs-12">
606 <img alt="${locationImage.getAttribute("alt")}" data-fileentryid="${locationImage.getAttribute("fileEntryId")}" src="${locationImage.getData()}" class="margin-bt-block" />
607 </div>
608 </#if>
609 <div class="<#if locationImage.getData() != ''>col-md-8 col-sm-8<#else>col-md-12 col-sm-12</#if> col-xs-12">
610 <p>${locationSummary.getData()}</p>
611 </div>
612 </div>
613 </div>
614 </#if>
615
616
617 <#-- Info, map -->
618 <#assign info_section_1_has_data = false />
619 <#assign info_section_2_has_data = false />
620 <#assign info_section_3_has_data = false />
621 <div class="margin-bt-grid-gap-complement">
622 <div class="row gap-default">
623 <div class="col-md-4">
624 <#if locationAddress.street.getData() != '' || locationAddress.postcode.getData() != '' || locationAddress.city.getData() != ''>
625 <h3 class="margin-bt-head">${printAdress}:</h3>
626 <p>${locationAddress.street.getData()}, ${locationAddress.postcode.getData()} ${locationAddress.city.getData()}<br>
627 <#if locationAddress.area.getData() != ''>${printRegion}: ${locationAddress.area.getData()}<br></#if>
628 <#if locationAddress.country.getData() != ''>${printCountry}: ${locationAddress.country.getData()}</#if></p>
629
630 <#assign info_section_1_has_data = true />
631 </#if>
632
633
634 <#if geoLoc_customgeolocation.getData() != "">
635
636 <#assign latitude = 0>
637 <#assign longitude = 0>
638
639 <#assign geolocationJSONObject = jsonFactoryUtil.createJSONObject(geoLoc_customgeolocation.getData())>
640
641 <#assign latitude = geolocationJSONObject.getDouble("latitude")>
642 <#assign longitude = geolocationJSONObject.getDouble("longitude")>
643 <div class="margin-bt-block">
644
645 <h3 class="margin-bt-head">${printNavigate}:</h3>
646 <div class="margin-bt-head">
647 <span class="glyphicon glyphicon-globe" aria-hidden="true"></span>
648 <a target="_blank" href="https://google.com/maps/dir//${latitude},${longitude}">${printGps}: ${latitude?string["00.000000"]}, ${longitude?string["00.000000"]}</a>
649 </div>
650 </div>
651 </#if>
652
653
654
655
656
657 <#if orders.phoneNumber.getData() != '' || orders.email.getData() != ''>
658 <div class="margin-bt-block">
659 <h3 class="margin-bt-head">${printOrders}:</h3>
660 <#if orders.phoneNumber.getData() != ''><div class="margin-bt-head"><span class="glyphicon glyphicon-earphone" aria-hidden="true"></span> <a href="tel:${orders.phoneNumber.getData()}">${orders.phoneNumber.getData()}</a></div></#if>
661 <#if orders.email.getData() != ''><div class="margin-bt-head"><span class="glyphicon glyphicon-envelope" aria-hidden="true"></span> <a href="mailto:${orders.email.getData()}" class="word-break">${orders.email.getData()}</a></div></#if>
662 </div>
663
664 <#assign info_section_2_has_data = true />
665 </#if>
666
667 <div class="margin-bt-block ld-contactbox-quote">
668 <a href="poptavkove-formulare" class="btn">${printGetQuote}</a>
669 </div>
670
671 <#if openingHours.getData() != ''>
672 <h3 class="margin-bt-head">${printOpen}:</h3>
673 <p>${openingHours.getData()}</p>
674
675 <#assign info_section_3_has_data = true />
676 </#if>
677 </div>
678
679 <#if geoLoc_customgeolocation.getData() != "">
680 <div class="<#if info_section_1_has_data || info_section_2_has_data ||info_section_3_has_data >col-md-8<#else>col-md-12</#if>">
681 <#assign latitude = 0>
682 <#assign longitude = 0>
683
684
685 <#assign geolocationJSONObject = jsonFactoryUtil.createJSONObject(geoLoc_customgeolocation.getData())>
686
687 <#assign latitude = geolocationJSONObject.getDouble("latitude")>
688 <#assign longitude = geolocationJSONObject.getDouble("longitude")>
689
690 <div class="margin-bt-block">
691 <div class="lfr-map" id="geoLoc_customgeolocationMap"></div>
692 <script>
693 // default zoom level is 17. as client requirement we have to zoom out it to 4x time
694 const ZoomLevel = 13;
695
696 (function(mapId, latitude, longitude){
697 var map = L.map(mapId).setView([latitude, longitude], ZoomLevel);
698
699 L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
700 attribution: '© <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors'
701 }).addTo(map);
702
703 L.marker([latitude, longitude]).addTo(map);
704 })('geoLoc_customgeolocationMap', ${latitude}, ${longitude});
705 </script>
706 </div>
707 </div>
708 </#if>
709 </div>
710 </div>
711
712
713 <#-- Contacts -->
714 <#assign location_contacts_has_data = false />
715 <#list locationContacts.getSiblings() as test>
716 <#if test.phone.getData() != ''>
717 <#assign location_contacts_has_data = true />
718 </#if>
719 </#list>
720 <#if location_contacts_has_data>
721 <a class="summary__collapsible-arrow" role="button" data-toggle="collapse" href="#contacts-list" aria-expanded="true" aria-controls="contacts-list">
722 <div class="row contacts summary__collapsable-heading b-collapsable__border-left">
723 <div class="col-xs-11">
724 <h2>${printContacts}</h2>
725 </div>
726 <div class="col-xs-1">
727 <span class="glyphicon glyphicon-menu-down" aria-hidden="false"></span>
728 </div>
729 </div>
730 </a>
731 <div class="row collapse in" id="contacts-list" aria-expanded="true">
732 <div class="summary__collapsable-content listcontacts">
733 <ul>
734 <#list locationContacts.getSiblings() as contact>
735 <#if contact.title.getData() != "" && contact.phone.getData() != "">
736 <li>
737 <ul>
738 <#if contact.cname?? && contact.cname.getData() != ''>
739 <li><strong>${contact.cname.getData()}</strong></li>
740 </#if>
741 <#if contact.title?? && contact.title.getData() != ''>
742 <li>${contact.title.getData()}</li>
743 </#if>
744 <#if contact.cemail?? && contact.cemail.getData() != ''>
745 <li>${printConEmail}<a href="mailto:${contact.cemail.getData()}">${contact.cemail.getData()}</a></li>
746 </#if>
747 <#if contact.phone?? && contact.phone.getData() != ''>
748 <li>${printConPhone}<a href="tel:${contact.phone.getData()}">${contact.phone.getData()}</a></li>
749 </#if>
750 </ul>
751 </li>
752 </#if>
753 </#list>
754 </ul>
755 </div>
756 </div>
757 </#if>
758
759
760 <#-- Price list -->
761 <#assign doksection_has_data = false />
762 <#if dokmessage.getData() != ''>
763 <#assign doksection_has_data = true />
764 </#if>
765 <#list dok.getSiblings() as doktest>
766 <#if doktest.getData() != ''>
767 <#assign doksection_has_data = true />
768 </#if>
769 </#list>
770
771 <#if doksection_has_data>
772 <a class="summary__collapsible-arrow" role="button" data-toggle="collapse" href="#files-list" aria-expanded="true" aria-controls="files-list">
773 <div class="row files summary__collapsable-heading b-collapsable__border-left">
774 <div class="col-xs-11">
775 <h2>${printPriceList}</h2>
776 </div>
777 <div class="col-xs-1">
778 <span class="glyphicon glyphicon-menu-down" aria-hidden="true"></span>
779 </div>
780 </div>
781 </a>
782 <div class="collapse row in" id="files-list" aria-expanded="true">
783 <div class="summary__collapsable-content">
784 <#if dokmessage.getData() != ''>
785 <#assign message = dokmessage.getData()!"" />
786 <p>${message}</p>
787 </#if>
788 <#assign dok_has_data = false />
789 <#list dok.getSiblings() as test>
790 <#if test.getData() != ''>
791 <#assign dok_has_data = true />
792 </#if>
793 </#list>
794 <#if dok_has_data>
795 <#list dok.getSiblings() as cur_dok>
796 <#assign odkaz = cur_dok.getData()!"" />
797 <#assign ikona = cur_dok.getChild("icon")!"" />
798 <#assign nazev = cur_dok.getChild("descript")!"" />
799 <p><i class="${ikona.data?replace('["','')?replace('"]','')} fa-2x inline-align-self-middle"> </i><a href="${odkaz}" target="_blank" class="inline-align -self-middle">${nazev.data}</a></p>
800 </#list>
801 </#if>
802 </div>
803 </div>
804 </#if>
805
806
807 <#-- Products -->
808 <a class="summary__collapsible-arrow" role="button" data-toggle="collapse" href="#products-list" aria-expanded="true" aria-controls="products-list">
809 <div class="row products summary__collapsable-heading b-collapsable__border-left">
810 <div class="col-xs-11">
811 <h2>${printGoods}</h2>
812 </div>
813 <div class="col-xs-1">
814 <span class="glyphicon glyphicon-menu-down" aria-hidden="true"></span>
815 </div>
816 </div>
817 </a>
818 <div class="collapse row in" id="products-list" aria-expanded="true">
819 <div class="summary__collapsable-content">
820 <ul>
821 <#list categoryList as categoryList>
822 <#if categoryList.getParentCategory().name = categoryProductList>
823 <li><strong>${categoryList.getName()} </strong>
824 <#if categoryList.getDescription() !="">
825 – ${categoryList.getDescription()}
826 </#if>
827 </li>
828 </#if>
829 </#list>
830 </ul>
831 <br/>
832 <p>Dostupnost výroby speciálních produktů (AnhyLevel, CemLevel, Poroflow, Compacton) je nutné si ověřit před objednávkou s obchodním zástupcem příslušné oblasti nebo přímo na provozovně (betonárně).</p>
833 </div>
834 </div>
835
836
837 <#-- Quality -->
838
839 <#assign existAttachedDocuments = false />
840 <#if attachedDocuments?has_content>
841 <#list attachedDocuments.getSiblings() as attachedDocument>
842 <#if attachedDocument.getData() != ''>
843 <#assign existAttachedDocuments = true />
844 </#if>
845 </#list>
846 </#if>
847
848 <#if existAttachedDocuments || locationQuality.text.getData() != '' || (locationQuality.link.getData() != '' && locationQuality.linkText.getData() != '')>
849 <a class="summary__collapsible-arrow" role="button" data-toggle="collapse" href="#quality-list" aria-expanded="true" aria-controls="quality-list">
850 <div class="row products summary__collapsable-heading b-collapsable__border-left">
851 <div class="col-xs-11">
852 <h2>${printQuality}</h2>
853 </div>
854 <div class="col-xs-1">
855 <span class="glyphicon glyphicon-menu-down" aria-hidden="true"></span>
856 </div>
857 </div>
858 </a>
859 <div class="collapse row in" id="quality-list" aria-expanded="true">
860
861 <#if existAttachedDocuments>
862 <div class="summary__collapsable-content">
863 <@printAttachedDocuments attachedDocuments />
864 </div>
865 </#if>
866
867 <div class="summary__collapsable-content b-cemex-button-black">
868 <#if locationQuality.text.getData() != ''><p>${locationQuality.text.getData()}</p></#if>
869 <#if locationQuality.link.getData() != '' && locationQuality.linkText.getData() != ''><p><a href="${locationQuality.link.getFriendlyUrl()}" class="b-cemex-button-ext b-cemex-button__inline">${locationQuality.linkText.getData()}</a></p></#if>
870 </div>
871 </div>
872 </#if>
873
874 </div>
875 </div>
876 </div>
877
878 <#-- IMAGE GALLERY(OPTIONAL) -->
879
880<#assign count = 0 />
881<#if imageGallery?has_content>
882<div class="container carousel-content">
883 <div class="row">
884 <div class="col-md-12">
885 <div class="carousel slide multi-item-carousel" id="theCarousel">
886 <div class="carousel-inner">
887 <#list imageGallery.getSiblings() as imageGallery>
888 <#if imageGallery.image.getData()?? && imageGallery.image.getData() != "">
889 <div class="item ">
890 <div class="col-xs-4">
891 <div class="responsive-image">
892 <#assign count = count + 1 />
893 <img class="resimg hover-shadow cursor" alt="${imageGallery.image.getAttribute("alt")}" data-fileentryid="${imageGallery.image.getAttribute("fileEntryId")}" src="${imageGallery.image.getData()}" onclick="openModal();currentSlide(${count})"/>
894
895
896 </div>
897 </div>
898 </div>
899 </#if>
900 </#list>
901 </div>
902 <a class="left carousel-control" href="#theCarousel" data-slide="prev"><i class="glyphicon glyphicon-chevron-left"></i></a>
903 <a class="right carousel-control" href="#theCarousel" data-slide="next"><i class="glyphicon glyphicon-chevron-right"></i></a>
904 </div>
905 </div>
906 </div>
907</div>
908</#if>
909
910
911<#if imageGallery?has_content>
912<#assign anotherCount = 0 />
913<div class="container">
914<div id="imageModal" class="my-modal">
915 <div class="modal-content">
916 <span class="close-button cursor" onclick="closeModal()">×</span>
917 <#list imageGallery.getSiblings() as imageGallery>
918 <#if imageGallery.image.getData()?? && imageGallery.image.getData() != "">
919 <#assign anotherCount = anotherCount + 1 />
920
921 <div class="mySlides">
922 <div class="numbertext"> ${anotherCount} / 4</div>
923 <div class="modal-image" style="background-image: url(${imageGallery.image.getData()});"></div>
924
925
926 <p class="modal-image-caption">${imageGallery.image.imageCaption.getData()}</p>
927
928 <a class="modal-prev" onclick="plusSlides(-1)">❮</a>
929 <a class="modal-next" onclick="plusSlides(1)">❯</a>
930 </div>
931 </#if>
932 </#list>
933 </div>
934 </div>
935 </div>
936
937</#if>
938
939</article>
940
941<#macro printLocationTypes>
942 <#if categoryList?has_content>
943 <ul class="list-inline <#-- highlight-color -->">
944 <#list categoryList as categoryList>
945 <#if categoryList.getParentCategory().name = categoryLocationType>
946 <li>${categoryList.getName()}</li>
947 </#if>
948 </#list>
949 </ul>
950 </#if>
951</#macro>
952
953<#macro printAttachedDocuments attachedDocuments>
954 <div class="row">
955 <#local processItems = 0 />
956 <#list attachedDocuments.getSiblings() as curItem>
957 <#if curItem?? && curItem.getData()?? && curItem.getData()?has_content && curItem.getData() != "" >
958 <#local fileEntry = getFileEntryByDocumentElement(curItem) />
959 <#if fileEntry != "">
960 <#local publishDate = fileEntry.getModifiedDate()?string[dateFormat] />
961 <#local thumbnail = httpUtil.addParameter(curItem.getData(),"documentThumbnail",1) />
962
963 <div class="col-xs-12 col-md-3">
964 <div class="b-item-card">
965 <div class="b-item-card__image">
966 <div class="b-item-card__image-background" style="background-image: url(${thumbnail});"></div>
967 </div>
968 <div class="b-item-card__info">
969 <span class="b-item-card__publish-date">${publishDate}</span>
970 <div class="b-item-card__summary">${fileEntry.getTitle()}</div>
971 <a class="b-button-link" href="${curItem.getData()}">${downloadLabel}</a>
972 </div>
973 </div>
974 </div>
975 <#local processItems = processItems + 1 />
976
977 </#if>
978 </#if>
979 <#if (processItems) % 3 == 0>
980 </div>
981 <div class="row">
982 </#if>
983 </#list>
984 </div>
985</#macro>
986
987<#function getFileEntryByDocumentElement documentItem>
988 <#assign documentLink = documentItem.getData() />
989 <#assign stringGroupId = documentLink?split("/")[2] />
990 <#assign longGroupId = getterUtil.getLong(stringGroupId) />
991 <#assign last = documentLink?split("/")[5] />
992 <#assign uuid = last?split("?")[0] />
993 <#attempt>
994 <#if dLFileEntryLocalService.getFileEntryByUuidAndGroupId(uuid, longGroupId)??>
995 <#return dLFileEntryLocalService.getFileEntryByUuidAndGroupId(uuid, longGroupId) />
996 </#if>
997 <#recover>
998 <#return "" />
999 </#attempt>
1000 <#return "" />
1001</#function>
1002
1003<script>
1004 const firstContentElement = document.querySelector(".item");
1005 if (firstContentElement) {
1006 firstContentElement.classList.add("active");
1007 }
1008</script>
1009
1010<script>
1011function openModal() {
1012 document.getElementById("imageModal").style.display = "block";
1013}
1014function closeModal() {
1015 document.getElementById("imageModal").style.display = "none";
1016}
1017
1018var slideIndex = 1;
1019showSlides(slideIndex);
1020
1021function plusSlides(n) {
1022 showSlides(slideIndex += n);
1023}
1024
1025function currentSlide(n) {
1026 showSlides(slideIndex = n);
1027}
1028
1029function showSlides(n) {
1030 var i;
1031 var slides = document.getElementsByClassName("mySlides");
1032
1033 if (n > slides.length) {slideIndex = 1}
1034 if (n < 1) {slideIndex = slides.length}
1035 for (i = 0; i < slides.length; i++) {
1036 slides[i].style.display = "none";
1037 }
1038
1039 slides[slideIndex-1].style.display = "block";
1040}
1041</script>
1042
1043
1044<script>
1045
1046
1047
1048// Instantiate the Bootstrap carousel
1049$('.multi-item-carousel').carousel({
1050 interval: false
1051});
1052
1053// for every slide in carousel, copy the next slide's item in the slide.
1054// Do the same for the next, next item.
1055$('.multi-item-carousel .item').each(function(){
1056 var next = $(this).next();
1057 if (!next.length) {
1058 next = $(this).siblings(':first');
1059 }
1060 next.children(':first-child').clone().appendTo($(this));
1061
1062 if (next.next().length>0) {
1063 next.next().children(':first-child').clone().appendTo($(this));
1064 } else {
1065 $(this).siblings(':first').children(':first-child').clone().appendTo($(this));
1066 }
1067});
1068
1069</script>
1070
1071<script>
1072
1073
1074var linkElement = document.querySelector('.margin-bt-block.ld-contactbox-quote a');
1075
1076var href = linkElement.getAttribute('href');
1077
1078var currentURL = window.location.href;
1079
1080var lastSegmentIndex = currentURL.lastIndexOf('/');
1081var modifiedURL = currentURL.substring(0, lastSegmentIndex + 1);
1082
1083
1084var modifiedHref = modifiedURL.replace("-/", "");
1085
1086var newUrl = modifiedHref+href;
1087linkElement.setAttribute('href', newUrl);
1088
1089
1090
1091 (function(window, $, undefined) {
1092 var onReady = function() {
1093 var $collapsibleArrows = $('.summary__collapsable-heading > div > a');
1094
1095 $collapsibleArrows.on('click', function(event) {
1096 event.preventDefault();
1097 var $currentSpan = $(this).find('span');
1098 var $currentHeading = $(this).closest('div.summary__collapsable-heading');
1099 if($(this)[0].getAttribute('aria-expanded') == "true"){
1100 $currentSpan.removeClass();
1101 $currentSpan.addClass("glyphicon glyphicon-menu-down");
1102 $currentHeading.css("background-color", "#f5f5f5");
1103 } else {
1104 $currentSpan.removeClass();
1105 $currentSpan.addClass("glyphicon glyphicon-menu-up");
1106 $currentHeading.css("background-color", "white");
1107 }
1108 });
1109 $($collapsibleArrows[0]).trigger('click');
1110
1111 };
1112 AUI().ready(onReady);
1113 })(window, jQuery);
1114</script>
1115
1116<#-- content group category -->
1117<#assign groupId=themeDisplay.getScopeGroupId() ?number>
1118<#assign assetVocabularyLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") />
1119<#assign categoryLocalService=serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
1120<#assign portletLocalService=serviceLocator.findService("com.liferay.portal.kernel.service.PortletPreferencesLocalService") />
1121<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
1122<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")>
1123
1124<#assign urlTitle = themeDisplay.getURLCurrent()/>
1125<#assign beginIndex = themeDisplay.getURLCurrent()?last_index_of("/")+1 />
1126<#assign endIndex = urlTitle?index_of("?fbclid")-1/>
1127<!-- Removes facebook tracking code that is added when a PR is open from a link on facebook's website -->
1128<#if endIndex gt -1>
1129 <#assign urlTitle = urlTitle[beginIndex..endIndex]/>
1130<#else>
1131 <#assign urlTitle=themeDisplay.getURLCurrent()?substring(themeDisplay.getURLCurrent()?last_index_of("/")+1) />
1132</#if>
1133
1134<#assign parentVocabularyName="Content Groups (GA4)">
1135<#assign parentVocabulary= assetVocabularyLocalService.getGroupVocabulary(groupId,parentVocabularyName) />
1136<#assign childCategories=categoryLocalService.getVocabularyCategories(parentVocabulary.getVocabularyId(),-1,-1,null)>
1137
1138<#assign finalCategories="" />
1139<#assign articleCategories=[]>
1140
1141<#assign journalArticle=journalArticleLocalService.getArticleByUrlTitle(groupId,urlTitle) >
1142<#assign assetEntry=assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle",journalArticle.getResourcePrimKey()) />
1143<#assign articleCategories=assetEntry.getCategories() />
1144
1145<#list childCategories as category>
1146 <#list articleCategories as articleCategory>
1147 <#if category.getName() == articleCategory.getName()>
1148 <#if finalCategories?has_content>
1149 <#assign finalCategories = finalCategories + ", "+(articleCategory.getName()) />
1150 <#else>
1151 <#assign finalCategories=articleCategory.getName() >
1152 </#if>
1153
1154 </#if>
1155 </#list>
1156</#list>
1157
1158<script>
1159 var contentGroupElement = $("#content_group");
1160
1161 if(location.pathname.includes("/-/")) {
1162 if(contentGroupElement.length !== 0) contentGroupElement.val("");
1163 }
1164
1165 if("${finalCategories}" !== ""){
1166 var elementValue = "${finalCategories}"
1167 if(contentGroupElement.length === 0) $("body").append('<input type="hidden" id="content_group" name="content_group" value="'+elementValue+'">')
1168 else contentGroupElement.val(elementValue)
1169 }
1170</script>
1171<#-- End content group category -->