Новости
An error occurred while processing the template.
Java method "com.liferay.portal.kernel.util.DateUtil_IW.parseDate(String, String, Locale)" threw an exception when invoked on com.liferay.portal.kernel.util.DateUtil_IW object "com.liferay.portal.kernel.util.DateUtil_IW@2eb76117"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign displayDate = dateUtil.parseD... [in template "29173645033645#730199#759154" at line 11, column 1]
----
1<#assign jsonFactoryUtil = staticUtil["com.liferay.portal.kernel.json.JSONFactoryUtil"]>
2<#assign AssetEntryLocalService = staticUtil["com.liferay.asset.kernel.service.AssetEntryLocalServiceUtil"]>
3<#assign JournalArticleLocalService = staticUtil["com.liferay.journal.service.JournalArticleLocalServiceUtil"]>
4<#assign dlFileEntryService = staticUtil["com.liferay.document.library.kernel.service.DLFileEntryServiceUtil"]>
5<#assign dlAppService = staticUtil["com.liferay.document.library.kernel.service.DLAppServiceUtil"]>
6<#assign dlURLHelper = staticUtil["com.liferay.document.library.util.DLURLHelperUtil"]>
7
8<#assign articleModifiedDate = .vars["reserved-article-modified-date"].data />
9<#assign articleDisplayDate = .vars["reserved-article-display-date"].data />
10
11<#assign displayDate = dateUtil.parseDate("EEE, d MMM yyyy HH:mm:ss Z", articleDisplayDate, locale) />
12<#assign modifiedDate = dateUtil.parseDate("EEE, d MMM yyyy HH:mm:ss Z", articleModifiedDate, locale) />
13
14<#assign displayDateFormatted = dateUtil.getDate(displayDate, "dd MMM yyyy HH:mm", locale) />
15<#assign modifiedDateFormatted = dateUtil.getDate(modifiedDate, "dd MMM yyyy HH:mm", locale) />
16
17<#attempt>
18 <#assign articleId = .vars["reserved-article-id"].data />
19 <#assign article = JournalArticleLocalService.getArticle(groupId, articleId) />
20 <#assign entry = AssetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", article.getResourcePrimKey()) />
21 <#assign views = entry.getViewCount() />
22<#recover>
23 <#assign views = 1 />
24</#attempt>
25
26<#function isValidJSON jsonString>
27 <#attempt>
28 <#assign parsed = jsonFactoryUtil.createJSONObject(jsonString) />
29 <#return true>
30 <#recover>
31 <#return false>
32 </#attempt>
33</#function>
34
35<#function getImageUrl(imageData)>
36 <#attempt>
37 <#if isValidJSON(imageData)>
38 <#assign json = jsonFactoryUtil.looseDeserialize(imageData) />
39 <#return '/o/adaptive-media/image/' + json.classPK + '/Preview-1000x0/' + json.title />
40 </#if>
41 <#recover>
42 </#attempt>
43 <#return imageData />
44</#function>
45
46<#assign portletnamespace = portletDisplay.getNamespace() />
47<#assign isPrint = getterUtil.getBoolean(renderRequest.getAttribute('view.jsp-print'))?string('true', 'false') />
48<#assign adaptiveMediaId = 'Preview-1000x0' />
49
50<#assign thumbnailUrl = "" />
51<#if bigPreview?? && bigPreview.getData()?? && bigPreview.getData() != "">
52 <#assign thumbnailUrl = bigPreview.getData() />
53<#elseif .vars?? && .vars['reserved-article-small-image-url']??>
54 <#assign thumbnailUrl = .vars['reserved-article-small-image-url'].data />
55</#if>
56
57<div class="page_dates_news">
58 <p>Материал опубликован: <span>${displayDateFormatted}</span></p>
59 <p>Обновлён: <span>${modifiedDateFormatted}</span></p>
60 <p>Просмотров: <span>${views}</span></p>
61</div>
62
63<#if content??>
64 <div>${content.getData()}</div>
65</#if>
66
67<#if isPrint == "false" && videoLink?? && videoLink.getSiblings()?has_content>
68 <#list videoLink.getSiblings() as curVideoLink>
69 <#if curVideoLink.getData()?length gt 0>
70 <#assign videoInfo = jsonFactoryUtil.looseDeserialize(curVideoLink.getData()) />
71 <video class="video-js vjs-16-9"
72 poster="${defaultFullPosterURL}"
73 preload="metadata"
74 controls
75 width="100%"
76 height="354"
77 data-source="${videoInfo[0]}">
78 <source src="${videoInfo[3]}" type="video/${videoInfo[2]}" />
79 <source src="${videoInfo[5]}" type="video/${videoInfo[4]}" />
80 <source src="${videoInfo[7]}" type="video/${videoInfo[6]}" />
81 </video>
82 </#if>
83 </#list>
84</#if>
85
86<#assign hasGallery = false />
87<#assign galleryItems = [] />
88
89<#-- Проверяем альбом -->
90<#if album?? && album.getData()?has_content>
91 <#assign rootFileUrl = album.getData() />
92 <#assign groupId = rootFileUrl?keep_after("/")?keep_after("/")?keep_before("/")?number />
93 <#assign uuid = rootFileUrl?keep_after_last("/")?keep_before_last("?") />
94
95 <#assign rootFileEntry = dlFileEntryService.getFileEntryByUuidAndGroupId(uuid, groupId) />
96 <#assign albumFolder = rootFileEntry.getFolder() />
97 <#assign albumEntries = dlAppService.getFileEntries(groupId, albumFolder.getFolderId()) />
98
99 <#assign hasGallery = true />
100 <#list albumEntries as albumEntry>
101 <#assign galleryItems += [{
102 "url": dlURLHelper.getPreviewURL(albumEntry, albumEntry.getFileVersion(), themeDisplay, ""),
103 "alt": albumEntry.getDescription()!
104 }] />
105 </#list>
106
107<#-- Проверяем изображения -->
108<#elseif image?? && image.getSiblings()?has_content>
109 <#assign images = image.getSiblings() />
110 <#if images?size gt 1 || (images?size == 1 && images[0].getData()?has_content)>
111 <#assign hasGallery = true />
112 <#list images as curImage>
113 <#assign imageUrl = getImageUrl(curImage.getData()) />
114 <#assign galleryItems += [{
115 "url": imageUrl,
116 "alt": ""
117 }] />
118 </#list>
119 </#if>
120</#if>
121
122<#-- ВЫВОД ГАЛЕРЕИ -->
123<#if hasGallery && galleryItems?size gt 1>
124 <#if isPrint == "false">
125 <div style="clear:both"></div>
126 <div class="clg_u_novost_media">
127 <div class="js-universal-slider-hor gallery-slider"
128 id="${portletnamespace}gallerySlider"
129 data-slick='{
130 "slidesToShow": 1,
131 "slidesToScroll": 1,
132 "autoplay": true,
133 "dots": false,
134 "arrows": true,
135 "responsive": [
136 {
137 "breakpoint": 768,
138 "settings": {
139 "dots": true,
140 "arrows": false
141 }
142 }
143 ]
144 }'>
145 <#list galleryItems as item>
146 <div class="item">
147 <a href="${item.url}" class="item-img-click">
148 <img src="${item.url}" alt="${item.alt}" />
149 </a>
150 </div>
151 </#list>
152 </div>
153 <div class="slider-counter">1/${galleryItems?size}</div>
154 </div>
155
156 <@imageViewer selector="#${portletnamespace}gallerySlider .item-img-click" />
157 <@initSlider sliderId="${portletnamespace}gallerySlider" totalSlides=galleryItems?size />
158
159 <#else>
160 <#list galleryItems as item>
161 <p><img src="${item.url}" data-large="${item.url}" alt="${item.alt}" /></p>
162 </#list>
163 </#if>
164
165<#-- Если есть только одно изображение (не галерея) -->
166<#elseif thumbnailUrl?has_content>
167 <#if isPrint == "false">
168 <div style="clear:both"></div>
169 <div class="clg_u_novost_media">
170 <div class="js-universal-slider-hor gallery-slider"
171 id="${portletnamespace}singleImage"
172 data-slick='{
173 "slidesToShow": 1,
174 "slidesToScroll": 1,
175 "autoplay": true,
176 "dots": false,
177 "arrows": true
178 }'>
179 <div class="item">
180 <a href="${thumbnailUrl}" class="item-img-click">
181 <img src="${thumbnailUrl}" data-large="${thumbnailUrl}" alt="" />
182 </a>
183 </div>
184 </div>
185 </div>
186 <@imageViewer selector="#${portletnamespace}singleImage .item-img-click" />
187 <#else>
188 <p><img src="${thumbnailUrl}" data-large="${thumbnailUrl}" alt="" /></p>
189 </#if>
190</#if>
191
192<#macro imageViewer selector>
193 <script>
194 (function() {
195 if (typeof YUI !== 'undefined') {
196 YUI().use('aui-image-viewer', function(Y) {
197 new Y.ImageViewer({
198 caption: 'Фотогалерея',
199 captionFromTitle: true,
200 centered: true,
201 imageAnim: {
202 duration: 1,
203 easing: 'easeIn'
204 },
205 intervalTime: 2,
206 links: '${selector}',
207 playing: false,
208 preloadAllImages: false,
209 preloadNeighborImages: false,
210 showInfo: true,
211 showPlayer: true,
212 zIndex: 223
213 }).render();
214 });
215 }
216 })();
217 </script>
218</#macro>
219
220<#macro initSlider sliderId totalSlides>
221<script>
222(function () {
223
224 var sliderSelector = '#${sliderId}';
225 function attachCounter() {
226 var $slider = $(sliderSelector);
227 if (!$slider.length) {
228 return;
229 }
230
231 if (!$slider.hasClass('slick-initialized')) {
232 setTimeout(attachCounter, 100);
233 return;
234 }
235
236 var $counter = $slider
237 .closest('.clg_u_novost_media')
238 .find('.slider-counter');
239
240 if (!$counter.length) {
241 return;
242 }
243
244 if ($slider.data('counterAttached')) {
245 return;
246 }
247
248 $slider.data('counterAttached', true);
249
250 function updateCounter(currentSlide) {
251 var slick = $slider.slick('getSlick');
252 var current = (typeof currentSlide === 'number')
253 ? currentSlide + 1
254 : slick.currentSlide + 1;
255 var total = slick.slideCount;
256 $counter.text(current + '/' + total);
257 }
258
259 updateCounter();
260
261 $slider.on('afterChange', function (event, slick, currentSlide) {
262 updateCounter(currentSlide);
263 });
264
265 }
266
267 $(function () {
268 attachCounter();
269 });
270
271})();
272</script>
273</#macro>