در حین انجام عملیات خطایی رخ داده است.
The following has evaluated to null or missing: ==> image_snapshot [in template "20097#20123#145718" at line 167, column 76] ---- Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)?? ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: ${image_snapshot.getData()} [in template "20097#20123#145718" at line 167, column 74] ----
1<#-- Retrieve the published date meta data field of the web content -->
2<#assign displaydate = .vars['reserved-article-display-date'].data>
3<#-- Save the original page locale for later -->
4<#assign originalLocale = .locale>
5
6<#-- Set the page locale to the portals default locale -->
7<#setting locale = localeUtil.getDefault()>
8
9<#-- Parse the date to a date object -->
10<#assign displaydate = displaydate?datetime("EEE, d MMM yyyy HH:mm:ss Z")>
11
12<#-- Set the page locale back to the original page locale -->
13<#--#assign locale = ''-->
14<#assign dateFormat = "dd MM yyyy" />
15<#assign publishDate=dateUtil.getDate(displaydate,dateFormat,locale)/>
16
17
18
19
20<!--publish view Count-->
21<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
22<#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService" )>
23<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService" )>
24<#assign getterUtil = staticUtil["com.liferay.portal.kernel.util.GetterUtil"] />
25<#assign currentArticle = JournalArticleLocalService.getArticle(getterUtil.getLong(groupId),.vars['reserved-article-id'].data)>
26<#assign currentArticleResourcePrimKey = currentArticle.getResourcePrimKey()>
27<#assign currentArticleAssetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", currentArticleResourcePrimKey)/>
28<#assign viewCount = currentArticleAssetEntry.viewCount/>
29
30
31
32
33<#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
34<#assign JournalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
35<#assign journalArticle = JournalArticleLocalService.getArticle(getterUtil.getLong(groupId),.vars['reserved-article-id'].data) />
36<#assign categories = AssetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) />
37
38
39
40
41<div class="display-content">
42 <div class="container">
43 <#if .vars['reserved-article-small-image-url'].getData() != "">
44 <div class="main-image">
45 <img class="" src="${.vars['reserved-article-small-image-url'].getData()}" alt="" />
46 </div>
47 </#if>
48
49
50 <div class="breadcrumb-wrapper hidden-in-print-mode">
51 <@liferay.breadcrumbs />
52 </div>
53
54 <h6 class="sub-title">${lead.getData()}</h6>
55
56 <h4 class="title">${.vars['reserved-article-title'].data}</h4>
57
58 <div class="details">
59 <div class="date">
60 <svg>
61 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#calendar-minus"></use>
62 </svg>
63 <span class="js-date" data-date="${publishDate} ?? DD MM YYYY ?? DD MMMM YYYY" >${publishDate}</span>
64 </div>
65 <div class="code">
66 <svg>
67 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#bill"></use>
68 </svg>
69 <span>کد خبر : ${.vars['reserved-article-id'].getData()}</span>
70 </div>
71 <div class="visitors">
72 <svg>
73 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#eye"></use>
74 </svg>
75 <span>تعداد بازدید : ${viewCount}</span>
76 </div>
77 </div>
78
79 <div class="article-content">
80 ${content.getData()}
81 </div>
82
83
84 <#if other_images?? && other_images.getSiblings()?has_content && other_images.getSiblings()[0].getData() != "" >
85
86 <#assign
87 theme_display = themeDisplay
88 css_folder = theme_display.getPathThemeCss()
89 javascript_folder = theme_display.getPathThemeJavaScript()
90 />
91
92 <div class="gallery-wr">
93
94 <link type="text/css" rel="stylesheet" href="${css_folder}/lightgallery/css/lightgallery.css" />
95
96 <!-- lightgallery plugins -->
97 <link type="text/css" rel="stylesheet" href="${css_folder}/lightgallery/css/lg-zoom.css" />
98 <link type="text/css" rel="stylesheet" href="${css_folder}/lightgallery/css/lg-thumbnail.css" />
99 <script src="${javascript_folder}/lightgallery/lightgallery.umd.js"></script>
100 <!-- Or use the minified version -->
101 <script src="${javascript_folder}/lightgallery/lightgallery.min.js"></script>
102
103 <!-- lightgallery plugins -->
104 <script src="${javascript_folder}/lightgallery/plugins/thumbnail/lg-thumbnail.umd.js"></script>
105 <script src="${javascript_folder}/lightgallery/plugins/zoom/lg-zoom.umd.js"></script>
106
107
108 <div id="animated-thumbnails" class="list-gallery">
109 <#if other_images.getSiblings()?has_content>
110 <#list other_images.getSiblings() as cur_other_images>
111
112 <a href="${cur_other_images.getData()}" data-aos="flip-left">
113 <img src="${cur_other_images.getData()}" />
114 </a>
115 </#list>
116 </#if>
117 </div>
118
119 <script>
120
121 lightGallery(document.getElementById("animated-thumbnails"), {
122 athumbnail: true,
123 animateThumb: !1,
124 pager: !1,
125 plugins: [lgZoom, lgThumbnail],
126 hash: !1,
127 zoomFromOrigin: !1,
128 toggleThumb: !0,
129 allowMediaOverlap: !0,
130 container: ".guilan-theme .display-content .gallery-wr",
131 });
132
133 </script>
134
135 <style>
136 .rtl .lg-outer {
137 text-align: right;
138 }
139 .lg-outer .lg-thumb-item {
140 float: right !important;
141 }
142 .lg-thumb-item img {
143 margin: 0 !important;
144 border-radius: 0 !important;
145 }
146 .lg-container {
147 font-family: inherit;
148 }
149
150 .gallery-wr .lg-backdrop , .gallery-wr .lg-outer {
151 position: fixed !important;
152 }
153 .gallery-wr .lg-backdrop {
154 z-index: 1040 !important;
155 }
156 .gallery-wr .lg-outer {
157 z-index: 1050 !important;
158 }
159 </style>
160
161 </div>
162 </#if>
163
164
165 <#if video?? && video.getData()!="">
166 <div class="m-auto py-3 hidden-in-print-mode" style="clear: both;max-width:50em">
167 <video style="width: 100%; border-radius : 10px" poster="${image_snapshot.getData()}" controls preload="none">
168 <source src="${video.getData()}" type="video/mp4">
169 Your browser does not support the video tag.
170 </video>
171 </div>
172 </#if>
173 <#if audio?? && audio.getData()!="">
174 <div class="m-auto py-3 hidden-in-print-mode" style="clear: both;max-width:50em">
175 <audio style="width: 100%; border-radius : 10px" controls>
176 <source src="${audio.getData()}">
177 Your browser does not support the audio element.
178 </audio>
179 </div>
180 </#if>
181 <#if files?? && files.getData()!="">
182 <a class="sp-link-nextSibling btn btn-info hidden-in-print-mode my-3" href="${files.getData()}" download>
183 <i class="icon-download"></i>
184 ${languageUtil.format(locale, "download-x", "فایل", false)}
185 </a>
186 </#if>
187
188 <hr />
189
190 <#if categories?has_content>
191 <div class="categories">
192 <div class="title">
193 <svg>
194 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#calendar-minus"></use>
195 </svg>
196 <span>دسته بندی :</span>
197 </div>
198 <div class="items">
199 <#list categories as category>
200 <div>
201 <svg>
202 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#hashtag"></use>
203 </svg>
204 <span>${category.getName()}</span>
205 </div>
206 </#list>
207 </div>
208 </div>
209 </#if>
210
211 <div class="share">
212 <div class="title">
213 <svg>
214 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#share"></use>
215 </svg>
216 <span>اشتراک گذاری</span>
217 </div>
218
219 <ul class="d-flex p-0">
220 <li>
221 <div onclick="window.print();">
222 <svg>
223 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#receipt"></use>
224 </svg>
225 <span>چاپ کردن</span>
226 </div>
227 </li>
228
229 <div class="short-link" onclick="myFunction()" onmouseout="outFunc()">
230 <div class="input-wr">
231 <div class="icon">
232 <svg>
233 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#copy-success"></use>
234 </svg>
235 </div>
236 <input type="text" value="" />
237 </div>
238 <div class="message">
239 <span>کپی در حافظه موقت</span>
240 </div>
241 </div>
242
243 <script>
244 window.shortURL = encodeURI(document.querySelector("#ShortURL-top input").value);
245 document.querySelector(".short-link input").value = decodeURI(shortURL);
246
247 function copyToClipboard(text) {
248 var textArea = document.createElement("textarea");
249 textArea.style.position = "fixed";
250 textArea.style.top = 0;
251 textArea.style.left = 0;
252 textArea.style.width = "2em";
253 textArea.style.height = "2em";
254 textArea.style.padding = 0;
255 textArea.style.border = "none";
256 textArea.style.outline = "none";
257 textArea.style.boxShadow = "none";
258 textArea.style.background = "transparent";
259 textArea.value = text;
260 document.body.appendChild(textArea);
261 textArea.focus();
262 textArea.select();
263 document.execCommand("copy");
264 document.body.removeChild(textArea);
265 }
266 function myFunction() {
267 copyToClipboard(shortURL);
268 var tooltip = document.querySelector(".short-link .message span");
269 tooltip.classList.add("success");
270 tooltip.innerHTML = "در حافظه موقت کپی شد";
271 }
272 function outFunc() {
273 setTimeout(() => {
274 var tooltip = document.querySelector(".short-link .message span");
275 tooltip.classList.remove("success");
276 tooltip.innerHTML = "کپی در حافظه موقت";
277 }, 300);
278 }
279 </script>
280
281 </div>
282 </div>
283</div>
284
285<style>
286.display-content {
287 padding: 4.5em 0 2em 0;
288 font-size: 15px;
289 overflow: hidden;
290}
291
292.display-content .container > .title {
293 font-weight: 600;
294 font-size: 2em;
295 line-height: 1.7em;
296 color: #000000;
297 margin-bottom: 0;
298}
299
300.display-content .container > .sub-title {
301 font-weight: 400;
302 font-size: 1.312em;
303 color: #114088;
304 margin-bottom: 0.81em;
305}
306
307.display-content .container .breadcrumb-wrapper {
308 margin-bottom: 2.375em;
309}
310
311.display-content .container .breadcrumb-wrapper .demo {
312 font-weight: 400;
313 font-size: 0.93em;
314 color: #7e8aab;
315}
316
317.display-content .container .main-image {
318 z-index: 1;
319 position: relative;
320 float: left;
321 max-width: 45%;
322 position: relative;
323 margin: 0em 3em 3em 0;
324}
325
326html.ltr .display-content .container .main-image {
327 float: right;
328 margin: 0em 0 3em 3em;
329}
330
331.display-content .container .main-image::before, .display-content .container .main-image::after {
332 /*content: "";*/
333 position: absolute;
334 left: 3em;
335 right: 3.75em;
336 height: 5em;
337 background: #ff8134;
338 opacity: 0.1;
339 border-radius: 12px;
340 top: -1.125em;
341}
342
343.display-content .container .main-image::after {
344 left: 3.75em;
345 right: 3em;
346 bottom: -1.125em;
347 top: unset;
348 background: #119932;
349}
350
351.display-content .container .main-image img {
352 filter: drop-shadow(0px 14px 44px rgba(0, 0, 0, 0.05));
353 border-radius: 6px;
354 max-width: 100%;
355}
356
357.display-content .container .details {
358 display: flex;
359 column-gap: 2.4em;
360 margin: 1.375em 0;
361 flex-wrap: wrap;
362 row-gap: 1em;
363}
364
365.display-content .container .details div {
366 display: flex;
367 align-items: center;
368 column-gap: 0.437em;
369}
370
371.display-content .container .details div svg {
372 width: 1.25em;
373 height: 1.25em;
374}
375
376.display-content .container .details div svg use {
377 stroke: #0391CC !important;
378}
379
380.display-content .container .details div span {
381 font-weight: 400;
382 font-size: 1em;
383 color: #0391CC;
384}
385
386.display-content .container .article-content {
387 font-weight: 400;
388 font-size: 1.05em;
389 line-height: 3em;
390 color: #626E94;
391}
392
393.display-content .container .gallery-wr {
394 padding: 2.5em 0;
395 font-size: 0.88em;
396}
397
398.display-content .container .gallery-wr .list-gallery {
399 display: flex;
400 flex-wrap: wrap;
401 justify-content: center;
402 row-gap: 1.25em;
403 column-gap: 1.25em;
404}
405
406.display-content .container .gallery-wr .list-gallery a {
407 position: relative;
408 overflow: hidden;
409}
410
411.display-content .container .gallery-wr .list-gallery a:hover::before {
412 opacity: 1;
413 transform: scale(1);
414}
415
416.display-content .container .gallery-wr .list-gallery a::before {
417 content: "";
418 width: 100%;
419 height: 100%;
420 background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFuSURBVHgB7ZiLbYMwEIYPqQN0BEbIBmWDskHZoOoEZYOoE5Rs0G7QDRjB2eR6Fo5kJWfjp2Sk+yQrCob/PpmHDQCCIAg+OlcHIs708wZ+Ll3XzRBBrVwdrHCfFSIJzFWu458gnCu1v7ttXxDPB7XXu20DtR5ycIzE3qlMqTPFjHCIsKolzciqEsLfTHC2NJdpauULuwpAIq6sosK+QiVkqwjvFcyRLSH8aaTH2MIpsmafE7VV14bSxEhjhZs2CUZkYPYZm5C1hGzpM9N/bkb2hhlFLdYzfb3pewFBEMqgH2cBN90ILXCoxxozcXDT+NDExIGtTc0UOuO2EDmVEMCwxY+egBRub9bRwsoEH2Z5+SCMR1rAYyOvSEHfJXQB+rEvjYm+zFwgETp2oUywMm//08EDv+ZXkfVI518Shis1PQkM1rZfOr0/EAFuj8l3JruHHDDzo50nd83J9Y3wQm0CPwvEo8/IM5TPFQRBIP4BZJehxxvkyUsAAAAASUVORK5CYII=')
421 no-repeat center, rgba(26, 27, 29, 0.82);
422 background-size: 2.7em 2.7em;
423 position: absolute;
424 opacity: 0;
425 transform: scale(0.9);
426 transition: all ease-in-out 0.3s;
427}
428
429.display-content .container .gallery-wr .list-gallery a img {
430 margin: 0 !important;
431 border-radius: 0 !important;
432 max-width: 100%;
433 width: 100%;
434 height: 11.5em;
435 width: 11.5em;
436 object-fit: cover;
437}
438
439.display-content .container hr {
440 background: rgba(115, 129, 141, 0.01);
441 margin: 1.5em 0;
442}
443
444.display-content .container .categories,
445.display-content .container .share {
446 display: flex;
447 justify-content: space-between;
448 flex-wrap: wrap;
449 padding: 1.5em 0;
450 column-gap: 1.75em;
451 row-gap: 1.5em;
452}
453
454.display-content .container .categories > .title,
455.display-content .container .share > .title {
456 display: flex;
457 column-gap: 0.5em;
458 align-items: center;
459}
460
461.display-content .container .categories > .title svg,
462.display-content .container .share > .title svg {
463 width: 1.5em;
464 height: 1.5em;
465 stroke: #1a1b1d;
466}
467
468.display-content .container .categories > .title span,
469.display-content .container .share > .title span {
470 font-weight: 400;
471 font-size: 0.93em;
472 color: #1a1b1d;
473}
474
475.display-content .container .categories .items {
476 display: flex;
477}
478
479.display-content .container .categories .items > div {
480 display: flex;
481 align-items: center;
482 column-gap: 0.375em;
483}
484
485.display-content .container .categories .items > div svg {
486 width: 1.125em;
487 height: 1.125em;
488 stroke: #7e8aab;
489}
490
491.display-content .container .categories .items > div span {
492 font-weight: 400;
493 font-size: 1em;
494 color: #7e8aab;
495}
496
497.display-content .container .categories .items > div + div::before {
498 content: "-";
499 margin: 0 0.875em;
500 color: #bfc4d5;
501 font-weight: bold;
502 display: flex;
503 align-items: center;
504}
505
506.display-content .container .share .short-link {
507 position: relative;
508 cursor: pointer;
509 width: fit-content;
510}
511
512.display-content .container .share .short-link::before {
513 content: "";
514 width: 100%;
515 height: 100%;
516 position: absolute;
517 z-index: 1;
518}
519
520.display-content .container .share .short-link:hover .message {
521 transform: translate3d(0, 100%, 0);
522 opacity: 1;
523}
524
525.display-content .container .share .short-link .message {
526 transition: all ease-in-out 0.2s;
527 position: absolute;
528 width: 100%;
529 bottom: 0;
530 padding-top: 0.3em;
531 opacity: 0;
532 pointer-events: none;
533 z-index: -1;
534}
535
536.display-content .container .share .short-link .message span {
537 display: flex;
538 justify-content: center;
539 align-items: center;
540 border-radius: 0.312em;
541 color: #fff;
542 font-size: 0.8em;
543 height: 2.5em;
544 background: #285eff;
545}
546
547.display-content .container .share .short-link .message span.success {
548 background: #29c450;
549}
550
551.display-content .container .share .short-link .input-wr {
552 background: #ffffff;
553 border: 0.3px solid #bdc5dd;
554 border-radius: 0.312em;
555 overflow: hidden;
556 display: flex;
557 width: 11.5em;
558 height: 2.812em;
559 position: relative;
560}
561
562.display-content .container .share .short-link .input-wr .icon {
563 background: #285eff;
564 width: 2.25em;
565 display: flex;
566 align-items: center;
567 justify-content: center;
568 flex-shrink: 0;
569}
570
571.display-content .container .share .short-link .input-wr .icon svg {
572 fill: #fafbfc;
573 width: 1.188em;
574 height: 1.188em;
575}
576
577.display-content .container .share .short-link .input-wr input {
578 direction: ltr;
579 cursor: pointer;
580 border: 0;
581 outline: 0;
582 box-shadow: 0;
583 width: 100%;
584 padding-left: 1em;
585 font-weight: 400;
586 font-size: 0.75em;
587 color: #7e8aab;
588}
589
590.display-content .container .share ul {
591 list-style: none;
592 margin: 0 auto 0 0;
593 display: flex;
594 column-gap: 2.62em;
595 align-items: center;
596}
597
598html.ltr .display-content .container .share ul {
599 margin: 0 0 0 auto;
600}
601
602.display-content .container .share ul li {
603 cursor: pointer;
604}
605
606.display-content .container .share ul li svg {
607 width: 1.5em;
608 height: 1.5em;
609}
610
611.display-content .container .share ul li span {
612 font-weight: 500;
613 font-size: 0.75em;
614 color: #7e8aab;
615}
616
617@media only screen and (max-width: 991px) {
618 .display-content {
619 font-size: 14px;
620 }
621 .display-content .container {
622 display: flex;
623 flex-direction: column;
624 }
625 .display-content .container > * {
626 order: 5;
627 }
628 .display-content .container > .breadcrumb-wrapper,
629 .display-content .container > .sub-title,
630 .display-content .container > .title,
631 .display-content .container > .details {
632 order: 1;
633 }
634 .display-content .container .main-image {
635 margin-left: 0;
636 margin-right: 0;
637 order: 4;
638 max-width: unset;
639 width: fit-content;
640 margin: 3em auto 3em auto !important;
641 }
642}
643
644@media only screen and (max-width: 767px) {
645 .display-content {
646 font-size: 13px;
647 }
648 .display-content .container .head {
649 padding-top: 4em;
650 }
651 .display-content .container .head::before {
652 background-position: -2.5em 1.5em;
653 }
654 .display-content .container .head .title {
655 font-size: 1.5em !important;
656 }
657}
658
659@media only screen and (max-width: 575px) {
660 .display-content {
661 font-size: 12px;
662 }
663 .display-content .container .article-content {
664 font-size: 1.2em;
665 }
666 .display-content .container .categories {
667 font-size: 1.2em;
668 }
669 .display-content .container .share {
670 font-size: 1.3em;
671 flex-direction: column;
672 }
673 .display-content .container .share ul {
674 margin: 0 !important;
675 justify-content: flex-start;
676 }
677}
678
679@media print {
680 .zahra-nav,
681 .la-news-po-2,
682 .footer,
683 .share ,
684 .hidden-in-print-mode {
685 display: none !important;
686 }
687}
688
689/* breadcrumb */
690
691.breadcrumb-wrapper .portlet {
692 margin-bottom:0;
693 margin: auto;
694}
695
696.breadcrumb-wrapper .portlet .portlet-header{
697 display:none;
698}
699
700.breadcrumb-wrapper .portlet .portlet-content {
701 padding-left:0;
702 padding-bottom:0;
703}
704html.rtl .breadcrumb-wrapper .portlet .portlet-content {
705 padding-right:0;
706}
707
708.breadcrumb-wrapper .portlet .breadcrumb {
709 background:none;
710 margin-bottom:0;
711 padding:0;
712 font-size:inherit;
713}
714.breadcrumb-wrapper .portlet .breadcrumb .breadcrumb-item+.breadcrumb-item::before {
715 background-image: none;
716 content: '/';
717 top: unset;
718 margin-top: unset;
719 color: #7e8aab;
720
721}
722
723.breadcrumb-wrapper .portlet .breadcrumb li {
724 font-size: 1em;
725}
726
727.breadcrumb-wrapper .portlet .breadcrumb li {
728 font-size: 1em;
729}
730
731.breadcrumb-wrapper .portlet .breadcrumb li a {
732 text-decoration:none;
733 color: #7e8aab;
734 font-weight: 400;
735 font-size: 0.93em;
736}
737
738.breadcrumb-wrapper .portlet .breadcrumb li span.active {
739 color: #7e8aab;
740 font-weight: 400;
741 font-size: 0.93em;
742
743 white-space: nowrap;
744 max-width: 300px;
745 overflow: hidden;
746 text-overflow: ellipsis;
747}
748
749/* breadcrumb */
750
751
752</style>