حصل خطأ عند معالجة القالب.
The following has evaluated to null or missing: ==> image_snapshot [in template "20097#20123#145727" 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#145727" 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 <li>
229 <a onclick="window.location.replace('https://web.whatsapp.com/send?text=hello')">
230 <svg>
231 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#whatsapp"></use>
232 </svg>
233 </a>
234 </li>
235 <li>
236 <a
237 onclick="window.location.replace('https://telegram.me/share/url?url='+window.shortURL+'&text=${.vars['reserved-article-title'].data}')"
238 >
239 <svg>
240 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#send"></use>
241 </svg>
242 </a>
243 </li>
244 </ul>
245
246 <div class="short-link" onclick="myFunction()" onmouseout="outFunc()">
247 <div class="input-wr">
248 <div class="icon">
249 <svg>
250 <use href="${themeDisplay.getPathThemeImages()}/gu-icons.svg#copy-success"></use>
251 </svg>
252 </div>
253 <input type="text" value="" />
254 </div>
255 <div class="message">
256 <span>کپی در حافظه موقت</span>
257 </div>
258 </div>
259
260 <script>
261 window.shortURL = encodeURI(document.querySelector("#ShortURL-top input").value);
262 document.querySelector(".short-link input").value = decodeURI(shortURL);
263
264 function copyToClipboard(text) {
265 var textArea = document.createElement("textarea");
266 textArea.style.position = "fixed";
267 textArea.style.top = 0;
268 textArea.style.left = 0;
269 textArea.style.width = "2em";
270 textArea.style.height = "2em";
271 textArea.style.padding = 0;
272 textArea.style.border = "none";
273 textArea.style.outline = "none";
274 textArea.style.boxShadow = "none";
275 textArea.style.background = "transparent";
276 textArea.value = text;
277 document.body.appendChild(textArea);
278 textArea.focus();
279 textArea.select();
280 document.execCommand("copy");
281 document.body.removeChild(textArea);
282 }
283 function myFunction() {
284 copyToClipboard(shortURL);
285 var tooltip = document.querySelector(".short-link .message span");
286 tooltip.classList.add("success");
287 tooltip.innerHTML = "در حافظه موقت کپی شد";
288 }
289 function outFunc() {
290 setTimeout(() => {
291 var tooltip = document.querySelector(".short-link .message span");
292 tooltip.classList.remove("success");
293 tooltip.innerHTML = "کپی در حافظه موقت";
294 }, 300);
295 }
296 </script>
297
298 </div>
299 </div>
300</div>
301
302<style>
303.rtl .article-content * {
304 font-family: PeydaWebFaNum !important;
305 font-size: 1.00em !important;
306}
307.ltr .article-content * {
308 font-family: Peydaen !important;
309 font-size: 1.05em !important;
310}
311.display-content {
312 padding: 4.5em 0 2em 0;
313 font-size: 15px;
314 overflow: hidden;
315}
316
317.display-content .container > .title {
318 font-weight: 600;
319 font-size: 2em;
320 line-height: 1.7em;
321 color: #000000;
322 margin-bottom: 0;
323}
324
325.display-content .container > .sub-title {
326 font-weight: 400;
327 font-size: 1.312em;
328 color: #114088;
329 margin-bottom: 0.81em;
330}
331
332.display-content .container .breadcrumb-wrapper {
333 margin-bottom: 2.375em;
334}
335
336.display-content .container .breadcrumb-wrapper .demo {
337 font-weight: 400;
338 font-size: 0.93em;
339 color: #7e8aab;
340}
341
342.display-content .container .main-image {
343 z-index: 1;
344 position: relative;
345 float: left;
346 max-width: 45%;
347 position: relative;
348 margin: 0em 3em 3em 0;
349}
350
351html.ltr .display-content .container .main-image {
352 float: right;
353 margin: 0em 0 3em 3em;
354}
355
356.display-content .container .main-image::before, .display-content .container .main-image::after {
357 /*content: "";*/
358 position: absolute;
359 left: 3em;
360 right: 3.75em;
361 height: 5em;
362 background: #ff8134;
363 opacity: 0.1;
364 border-radius: 12px;
365 top: -1.125em;
366}
367
368.display-content .container .main-image::after {
369 left: 3.75em;
370 right: 3em;
371 bottom: -1.125em;
372 top: unset;
373 background: #119932;
374}
375
376.display-content .container .main-image img {
377 filter: drop-shadow(0px 14px 44px rgba(0, 0, 0, 0.05));
378 border-radius: 6px;
379 max-width: 100%;
380}
381
382.display-content .container .details {
383 display: flex;
384 column-gap: 2.4em;
385 margin: 1.375em 0;
386 flex-wrap: wrap;
387 row-gap: 1em;
388}
389
390.display-content .container .details div {
391 display: flex;
392 align-items: center;
393 column-gap: 0.437em;
394}
395
396.display-content .container .details div svg {
397 width: 1.25em;
398 height: 1.25em;
399}
400
401.display-content .container .details div svg use {
402 stroke: #0391CC !important;
403}
404
405.display-content .container .details div span {
406 font-weight: 400;
407 font-size: 1em;
408 color: #0391CC;
409}
410
411.display-content .container .article-content {
412 font-weight: 400;
413 font-size: 1.05em;
414 line-height: 3em;
415 color: #626E94;
416}
417
418.display-content .container .gallery-wr {
419 padding: 2.5em 0;
420 font-size: 0.88em;
421}
422
423.display-content .container .gallery-wr .list-gallery {
424 display: flex;
425 flex-wrap: wrap;
426 justify-content: center;
427 row-gap: 1.25em;
428 column-gap: 1.25em;
429}
430
431.display-content .container .gallery-wr .list-gallery a {
432 position: relative;
433 overflow: hidden;
434}
435
436.display-content .container .gallery-wr .list-gallery a:hover::before {
437 opacity: 1;
438 transform: scale(1);
439}
440
441.display-content .container .gallery-wr .list-gallery a::before {
442 content: "";
443 width: 100%;
444 height: 100%;
445 background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAYAAAAehFoBAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAFuSURBVHgB7ZiLbYMwEIYPqQN0BEbIBmWDskHZoOoEZYOoE5Rs0G7QDRjB2eR6Fo5kJWfjp2Sk+yQrCob/PpmHDQCCIAg+OlcHIs708wZ+Ll3XzRBBrVwdrHCfFSIJzFWu458gnCu1v7ttXxDPB7XXu20DtR5ycIzE3qlMqTPFjHCIsKolzciqEsLfTHC2NJdpauULuwpAIq6sosK+QiVkqwjvFcyRLSH8aaTH2MIpsmafE7VV14bSxEhjhZs2CUZkYPYZm5C1hGzpM9N/bkb2hhlFLdYzfb3pewFBEMqgH2cBN90ILXCoxxozcXDT+NDExIGtTc0UOuO2EDmVEMCwxY+egBRub9bRwsoEH2Z5+SCMR1rAYyOvSEHfJXQB+rEvjYm+zFwgETp2oUywMm//08EDv+ZXkfVI518Shis1PQkM1rZfOr0/EAFuj8l3JruHHDDzo50nd83J9Y3wQm0CPwvEo8/IM5TPFQRBIP4BZJehxxvkyUsAAAAASUVORK5CYII=')
446 no-repeat center, rgba(26, 27, 29, 0.82);
447 background-size: 2.7em 2.7em;
448 position: absolute;
449 opacity: 0;
450 transform: scale(0.9);
451 transition: all ease-in-out 0.3s;
452}
453
454.display-content .container .gallery-wr .list-gallery a img {
455 margin: 0 !important;
456 border-radius: 0 !important;
457 max-width: 100%;
458 width: 100%;
459 height: 11.5em;
460 width: 11.5em;
461 object-fit: cover;
462}
463
464.display-content .container hr {
465 background: rgba(115, 129, 141, 0.01);
466 margin: 1.5em 0;
467}
468
469.display-content .container .categories,
470.display-content .container .share {
471 display: flex;
472 justify-content: space-between;
473 flex-wrap: wrap;
474 padding: 1.5em 0;
475 column-gap: 1.75em;
476 row-gap: 1.5em;
477}
478
479.display-content .container .categories > .title,
480.display-content .container .share > .title {
481 display: flex;
482 column-gap: 0.5em;
483 align-items: center;
484}
485
486.display-content .container .categories > .title svg,
487.display-content .container .share > .title svg {
488 width: 1.5em;
489 height: 1.5em;
490 stroke: #1a1b1d;
491}
492
493.display-content .container .categories > .title span,
494.display-content .container .share > .title span {
495 font-weight: 400;
496 font-size: 0.93em;
497 color: #1a1b1d;
498}
499
500.display-content .container .categories .items {
501 display: flex;
502}
503
504.display-content .container .categories .items > div {
505 display: flex;
506 align-items: center;
507 column-gap: 0.375em;
508}
509
510.display-content .container .categories .items > div svg {
511 width: 1.125em;
512 height: 1.125em;
513 stroke: #7e8aab;
514}
515
516.display-content .container .categories .items > div span {
517 font-weight: 400;
518 font-size: 1em;
519 color: #7e8aab;
520}
521
522.display-content .container .categories .items > div + div::before {
523 content: "-";
524 margin: 0 0.875em;
525 color: #bfc4d5;
526 font-weight: bold;
527 display: flex;
528 align-items: center;
529}
530
531.display-content .container .share .short-link {
532 position: relative;
533 cursor: pointer;
534 width: fit-content;
535}
536
537.display-content .container .share .short-link::before {
538 content: "";
539 width: 100%;
540 height: 100%;
541 position: absolute;
542 z-index: 1;
543}
544
545.display-content .container .share .short-link:hover .message {
546 transform: translate3d(0, 100%, 0);
547 opacity: 1;
548}
549
550.display-content .container .share .short-link .message {
551 transition: all ease-in-out 0.2s;
552 position: absolute;
553 width: 100%;
554 bottom: 0;
555 padding-top: 0.3em;
556 opacity: 0;
557 pointer-events: none;
558 z-index: -1;
559}
560
561.display-content .container .share .short-link .message span {
562 display: flex;
563 justify-content: center;
564 align-items: center;
565 border-radius: 0.312em;
566 color: #fff;
567 font-size: 0.8em;
568 height: 2.5em;
569 background: #285eff;
570}
571
572.display-content .container .share .short-link .message span.success {
573 background: #29c450;
574}
575
576.display-content .container .share .short-link .input-wr {
577 background: #ffffff;
578 border: 0.3px solid #bdc5dd;
579 border-radius: 0.312em;
580 overflow: hidden;
581 display: flex;
582 width: 11.5em;
583 height: 2.812em;
584 position: relative;
585}
586
587.display-content .container .share .short-link .input-wr .icon {
588 background: #285eff;
589 width: 2.25em;
590 display: flex;
591 align-items: center;
592 justify-content: center;
593 flex-shrink: 0;
594}
595
596.display-content .container .share .short-link .input-wr .icon svg {
597 fill: #fafbfc;
598 width: 1.188em;
599 height: 1.188em;
600}
601
602.display-content .container .share .short-link .input-wr input {
603 direction: ltr;
604 cursor: pointer;
605 border: 0;
606 outline: 0;
607 box-shadow: 0;
608 width: 100%;
609 padding-left: 1em;
610 font-weight: 400;
611 font-size: 0.75em;
612 color: #7e8aab;
613}
614
615.display-content .container .share ul {
616 list-style: none;
617 margin: 0 auto 0 0;
618 display: flex;
619 column-gap: 2.62em;
620 align-items: center;
621}
622
623html.ltr .display-content .container .share ul {
624 margin: 0 0 0 auto;
625}
626
627.display-content .container .share ul li {
628 cursor: pointer;
629}
630
631.display-content .container .share ul li svg {
632 width: 1.5em;
633 height: 1.5em;
634}
635
636.display-content .container .share ul li span {
637 font-weight: 500;
638 font-size: 0.75em;
639 color: #7e8aab;
640}
641
642@media only screen and (max-width: 991px) {
643 .display-content {
644 font-size: 14px;
645 }
646 .display-content .container {
647 display: flex;
648 flex-direction: column;
649 }
650 .display-content .container > * {
651 order: 5;
652 }
653 .display-content .container > .breadcrumb-wrapper,
654 .display-content .container > .sub-title,
655 .display-content .container > .title,
656 .display-content .container > .details {
657 order: 1;
658 }
659 .display-content .container .main-image {
660 margin-left: 0;
661 margin-right: 0;
662 order: 4;
663 max-width: unset;
664 width: fit-content;
665 margin: 3em auto 3em auto !important;
666 }
667}
668
669@media only screen and (max-width: 767px) {
670 .display-content {
671 font-size: 13px;
672 }
673 .display-content .container .head {
674 padding-top: 4em;
675 }
676 .display-content .container .head::before {
677 background-position: -2.5em 1.5em;
678 }
679 .display-content .container .head .title {
680 font-size: 1.5em !important;
681 }
682}
683
684@media only screen and (max-width: 575px) {
685 .display-content {
686 font-size: 12px;
687 }
688 .display-content .container .article-content {
689 font-size: 1.2em;
690 }
691 .display-content .container .categories {
692 font-size: 1.2em;
693 }
694 .display-content .container .share {
695 font-size: 1.3em;
696 flex-direction: column;
697 }
698 .display-content .container .share ul {
699 margin: 0 !important;
700 justify-content: flex-start;
701 }
702}
703
704@media print {
705 .zahra-nav,
706 .la-news-po-2,
707 .footer,
708 .share ,
709 .hidden-in-print-mode {
710 display: none !important;
711 }
712}
713
714/* breadcrumb */
715
716.breadcrumb-wrapper .portlet {
717 margin-bottom:0;
718 margin: auto;
719}
720
721.breadcrumb-wrapper .portlet .portlet-header{
722 display:none;
723}
724
725.breadcrumb-wrapper .portlet .portlet-content {
726 padding-left:0;
727 padding-bottom:0;
728}
729html.rtl .breadcrumb-wrapper .portlet .portlet-content {
730 padding-right:0;
731}
732
733.breadcrumb-wrapper .portlet .breadcrumb {
734 background:none;
735 margin-bottom:0;
736 padding:0;
737 font-size:inherit;
738}
739.breadcrumb-wrapper .portlet .breadcrumb .breadcrumb-item+.breadcrumb-item::before {
740 background-image: none;
741 content: '/';
742 top: unset;
743 margin-top: unset;
744 color: #7e8aab;
745
746}
747
748.breadcrumb-wrapper .portlet .breadcrumb li {
749 font-size: 1em;
750}
751
752.breadcrumb-wrapper .portlet .breadcrumb li {
753 font-size: 1em;
754}
755
756.breadcrumb-wrapper .portlet .breadcrumb li a {
757 text-decoration:none;
758 color: #7e8aab;
759 font-weight: 400;
760 font-size: 0.93em;
761}
762
763.breadcrumb-wrapper .portlet .breadcrumb li span.active {
764 color: #7e8aab;
765 font-weight: 400;
766 font-size: 0.93em;
767
768 white-space: nowrap;
769 max-width: 300px;
770 overflow: hidden;
771 text-overflow: ellipsis;
772}
773
774/* breadcrumb */
775
776
777</style>