Во время обработки запрошенного шаблона произошла ошибка...
The following has evaluated to null or missing:
==> procUri  [in template "20100#20136#1583049" at line 105, column 24]

----
Tip: If the failing expression is known to be 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: ${procUri}  [in template "20100#20136#1583049" at line 105, column 22]
----
1<#assign images_folder = themeDisplay.getPathThemeRoot()+"/themelets/gpparf-base-themelet/images"/> 
2<#assign journalArticleId = .vars['reserved-article-id'].data> 
3<#assign journalArticleTitle = .vars['reserved-article-title'].data> 
4<#assign journalArticleDescription = .vars['reserved-article-description'].data> 
5<#assign siteUnitUuid = templateUtil.getUnitUid(themeDisplay) /> 
6 
7<#assign tagList = templateUtil.getArticleTagsWithId(groupId, journalArticleId?number, locale)/> 
8<#assign catList = templateUtil.getArticleCategoriesWithId(groupId, journalArticleId?number, false, locale)/> 
9 
10<#assign feedUrl = "/web" + themeDisplay.getSiteGroup().getFriendlyURL() + "/mass-media/news/archive"/> 
11<#assign url = themeDisplay.getPortalURL()/> 
12 
13<#assign repostUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() /> 
14 
15<#if journalArticleDescription??> 
16    <#assign journalArticleDescription = templateUtil.replaceLineBreak(journalArticleDescription)/> 
17</#if> 
18 
19<#assign isInternal = templateUtil.isInternalContur()> 
20 
21<#if gp_nsi_unit.getData()?has_content> 
22    <#attempt> 
23        <#assign objectDto = organizationService.getOrganizationUnitShortByUUID(gp_nsi_unit.getData())/> 
24        <#if objectDto??> 
25            <#assign proc = objectDto.getTitle()/> 
26            <#assign procStart = objectDto.getTitleStart() ! ""/> 
27            <#assign procUri = "/web/" + objectDto.getUri()/> 
28            <#if objectDto.getTitleEnd()??> 
29                <#assign procEnd = objectDto.getTitleEnd() ! ""/> <#-- этот параметр опционален в БД --> 
30            <#else> 
31                <#assign procEnd = ""/> 
32            </#if> 
33        </#if> 
34        <#recover> 
35            <#attempt> 
36                <#assign objectDto = organizationService.getInnerUnitInfo(siteUnitUuid, gp_nsi_unit.getData())/> 
37                <#assign proc = objectDto.getTitle() /> 
38                <#assign procUri = ""/> 
39                <#assign procStart = ""/> 
40                <#assign procEnd = ""/> 
41                <#recover> 
42                    <#assign proc = "Публикация от имени районной или специализированной прокуратуры"/> 
43                    <#assign procUri = ""/> 
44                    <#assign procStart = ""/> 
45                    <#assign procEnd = ""/> 
46            </#attempt> 
47    </#attempt> 
48    <#if organizationService.getNsiUnitContact(gp_nsi_unit.getData())??> 
49        <#assign current_unit_contact_info = organizationService.getNsiUnitContact(gp_nsi_unit.getData()) /> 
50    <#else> 
51        <#assign current_unit_contact_info = '' /> 
52    </#if> 
53<#else> 
54    <#assign proc = ""/> 
55    <#assign procStart = ""/> 
56    <#assign procEnd = ""/> 
57</#if> 
58 
59<#if current_unit_contact_info?has_content> 
60    <#assign datetimePubFieldFormatted = templateUtil.formatDateTimeByUid(gp_datetime.getData(), gp_nsi_unit.getData(), locale) /> 
61<#else> 
62    <#assign datetimePubFieldFormatted = '' /> 
63</#if> 
64 
65<#if gp_media_file?? && gp_media_file.getSiblings()?has_content> 
66    <#assign audioList = ddmService.getAudioFiles(gp_media_file.getSiblings()) /> 
67    <#assign videoList = ddmService.getVideoFiles(gp_media_file.getSiblings()) /> 
68</#if> 
69 
70<#assign anyImage = false /> 
71<#if gp_images?? && gp_images.getSiblings()?has_content > 
72    <#list gp_images.getSiblings() as cur_gp_images> 
73        <#if cur_gp_images.getData()?? && cur_gp_images.getData() != ""> 
74            <#assign anyImage = true /> 
75        </#if> 
76    </#list> 
77</#if> 
78 
79<style> 
80    button:focus { 
81        outline: unset; 
82
83 
84    .a_custom { 
85        padding-top: 10px !important; 
86        color: white; 
87
88 
89    .a_custom:hover, .a_custom:focus { 
90        color: #ffffff; 
91        text-decoration: none; 
92        outline: unset; 
93
94</style> 
95 
96<h2 class="news-page__title"> 
97    ${themeDisplay.portletDisplay.title} 
98</h2> 
99<div class="news-page__header"> 
100    <ul class="news-page__info"> 
101        <#if datetimePubFieldFormatted?has_content> 
102            <li class="news-page__info_item">${datetimePubFieldFormatted}</li> 
103        </#if> 
104        <li class="news-page__info_item"> 
105            <a href="${procUri}" title="" class="news-page__info_link">${proc}</a> 
106        </li> 
107    </ul> 
108    <div class="news-page__subtitle" id="text_printprw">${journalArticleTitle}</div> 
109</div> 
110<div class="news-page__body"> 
111    <div class="news-page__navigation"> 
112        <#if gp_content?has_content> 
113            <div class="news-page__navigation_item text-item is-active" 
114                 onclick="openTab('news-page__article_text_block', 'text-item')"> 
115                <span class="news-page__navigation_icon is-text">&nbsp;</span> 
116            </div> 
117        </#if> 
118        <#if anyImage> 
119            <div class="news-page__navigation_item photo-item" 
120                 onclick="openTab('news-page__article_gallery', 'photo-item')"> 
121                <span class="news-page__navigation_icon is-image">&nbsp;</span> 
122                <span class="news-page__navigation_badge">${gp_images.getSiblings()?size}</span> 
123            </div> 
124        </#if> 
125        <#if gp_media_file?? && gp_media_file.getSiblings()?has_content> 
126            <div class="news-page__navigation_item media-item" 
127                 onclick="openTab('news-page__article_media', 'media-item')"> 
128                <span class="news-page__navigation_icon is-video">&nbsp;</span> 
129                <span class="news-page__navigation_badge">${gp_media_file.getSiblings()?size}</span> 
130            </div> 
131        </#if> 
132        <#if gp_attachment?? && gp_attachment?has_content && gp_attachment.getSiblings()?has_content> 
133            <div class="news-page__navigation_item attach-item" 
134                 onclick="openTab('news-page__article_file', 'attach-item')"> 
135                <span class="news-page__navigation_icon is-attach">&nbsp;</span> 
136                <span class="news-page__navigation_badge">${gp_attachment.getSiblings()?size}</span> 
137            </div> 
138        </#if> 
139        <#if !isInternal> 
140            <div class="news-page__navigation_item share-item" 
141                 onclick="openTab('news-page__article_share', 'share-item')"> 
142                <span class="news-page__navigation_icon is-share">&nbsp;</span> 
143            </div> 
144        </#if> 
145    </div> 
146    <div class="news-page__article"> 
147        <#if gp_content?has_content> 
148            <div class="news-page__article_text_block"> 
149                <#if anyImage && gp_main_image_uuid.getData()??> 
150                    <#list gp_images.getSiblings() as cur_gp_image> 
151                        <#if cur_gp_image.getData()?? && cur_gp_image.getData() != "" && cur_gp_image.getAttribute("uuid") == gp_main_image_uuid.getData()> 
152                            <#if cur_gp_image.getAttribute("alt")??> 
153                                <#assign img_alt = cur_gp_image.getAttribute("alt")/> 
154                            <#else> 
155                                <#assign img_alt = ""/> 
156                            </#if> 
157 
158                            <#if cur_gp_image.getAttribute("displaySource")?? && cur_gp_image.getAttribute("displaySource") == "true"> 
159                                <#assign img_src = cur_gp_image.getData()/> 
160                            <#else> 
161                                <#assign img_src = "/o/adaptive-media/image/" + cur_gp_image.getAttribute("fileEntryId") + "/news/img"/> 
162                            </#if> 
163 
164                            <p class="news-page__article_image"> 
165                                <img src="${img_src}" alt="${img_alt}"> 
166                            </p> 
167                            <#break/> 
168                        </#if> 
169                    </#list> 
170                </#if> 
171 
172                <div class="news-page__article_text"> 
173                    ${gp_content.getData()} 
174                </div> 
175 
176                <div class="news-page__article_buttons"> 
177                    <a href="" class="button size-s a_custom" aria-label="<@liferay.language key="news.print" />" 
178                       id="button_printprw"><@liferay.language key="news.print" /> 
179                    </a> 
180                    <a href="${feedUrl}" 
181                       class="button button-contour size-s"><@liferay.language key="news.archive" /> 
182                    </a> 
183                    <div id="subscribeButtonPlaceHolder"></div> 
184                </div> 
185            </div> 
186        </#if> 
187 
188        <!-- Images begin --> 
189        <#if anyImage> 
190            <div class="news-page__article_gallery" style="display: none"> 
191                <h4 class="news-page__article_gallery-title">${gp_images.getSiblings()?size} <@liferay.language key="photo" /></h4> 
192                <ul class="news-page__article_gallery-list"> 
193                    <#list gp_images.getSiblings() as cur_gp_image> 
194                        <#if cur_gp_image.getData()?? && cur_gp_image.getData() != ""> 
195 
196                            <#if cur_gp_image.getAttribute("alt")??> 
197                                <#assign img_alt = cur_gp_image.getAttribute("alt")/> 
198                            <#else> 
199                                <#assign img_alt = ""/> 
200                            </#if> 
201 
202                            <#if cur_gp_image.getAttribute("displaySource")?? && cur_gp_image.getAttribute("displaySource") == "true"> 
203                                <#assign img_src = cur_gp_image.getData()/> 
204                            <#else> 
205                                <#assign img_src = "/o/adaptive-media/image/" + cur_gp_image.getAttribute("fileEntryId") + "/news/img"/> 
206                            </#if> 
207 
208                            <a data-epp-photo-modal="news-images" 
209                               data-title="${img_alt}" 
210                               href="${img_src}"> 
211                                <li class="news-page__article_gallery-item one-new-slider__item swiper-slide" 
212                                    style="background-image: url('${img_src}')" 
213
214                                </li> 
215                            </a> 
216                        </#if> 
217                    </#list> 
218                </ul> 
219            </div> 
220        </#if> 
221        <!-- Images end --> 
222 
223 
224        <!-- Media --> 
225        <#if gp_media_file?? && gp_media_file.getSiblings()?has_content> 
226            <div class="news-page__article_media" style="display: none"> 
227                <!-- Video slide --> 
228                <#if videoList?has_content> 
229                    <div class="news-page__article_video"> 
230                        <h4 class="news-page__article_video-title">${videoList?size} 
231                            <@liferay.language key="video" /> 
232                        </h4> 
233                        <ul class="news-page__article_video-list"> 
234                            <#list videoList as cur_gp_media_file> 
235                                <#assign url = templateUtil.getImagePath(cur_gp_media_file, themeDisplay) /> 
236                                <#assign previewUrl = url + "&videoThumbnail=1" /> 
237                                <#assign videoSizeTitle = templateUtil.fileSizeFormat(cur_gp_media_file.size, locale)/> 
238 
239                                <#if cur_gp_media_file.description?has_content > 
240                                    <#assign description = cur_gp_media_file.description /> 
241                                <#else> 
242                                    <#assign description = cur_gp_media_file.title /> 
243                                </#if> 
244 
245                                <li class="news-page__article_video-item"> 
246                                    <div class="news-page__article_video-preview"> 
247                                        <a data-epp-video-modal="news-images" 
248                                           data-title="${description}" 
249                                           data-preview="${previewUrl}" 
250                                           href="${url}" 
251
252                                            <span class="news-page__article_video-tumb" 
253                                                  style="background-image: url('${previewUrl}')" 
254
255                                            </span> 
256                                        </a> 
257                                        <p class="news-page__article_video-name"> 
258                                            ${description} 
259                                        </p> 
260                                    </div> 
261                                    <a href="${url}&download=true" target="_blank" class="button size-s"> 
262                                        <@liferay.language key="news.download" /> [ ${videoSizeTitle} ] 
263                                    </a> 
264                                </li> 
265                            </#list> 
266                        </ul> 
267                    </div> 
268                </#if> 
269                <!-- Video slide end --> 
270 
271                <!-- Audio slide --> 
272                <#if audioList?has_content> 
273                    <div class="news-page__article_audio "> 
274                        <h4 class="news-page__article_audio-title"> 
275                            ${audioList?size} <@liferay.language key="audio" /> 
276                        </h4> 
277                        <ul class="news-page__article_audio-list media-audio-wrapper"> 
278                            <#list audioList as cur_gp_media_file> 
279                                <#assign url = templateUtil.getImagePath(cur_gp_media_file, themeDisplay) /> 
280 
281                                <li class="news-page__article_audio-item media-a-wrapper"> 
282                                    <span class="news-page__article_audio-name"> 
283                                        <#if cur_gp_media_file.description?has_content > 
284                                            ${cur_gp_media_file.description} 
285                                        <#else> 
286                                            ${cur_gp_media_file.title} 
287                                        </#if> 
288                                    </span> 
289                                    <audio class="news_media_player" 
290                                           controls 
291                                           style="max-width:100%;" 
292                                           stretching="auto" 
293                                           pluginPath="js" 
294                                           loop="false" 
295                                           features="['playpause', 'progress', 'current', 'duration', 'tracks', 'volume']" 
296                                           alwaysShowControls="false" 
297                                           pauseOtherPlayers="true" 
298                                           preload="none" 
299
300                                        <source src="${url}" type="${cur_gp_media_file.getMimeType()}"> 
301                                    </audio> 
302                                </li> 
303                            </#list> 
304                        </ul> 
305                    </div> 
306                </#if> 
307                <!-- Audio slide end --> 
308            </div> 
309        </#if> 
310        <!-- Media end --> 
311 
312        <!-- Attachments begin --> 
313        <#if gp_attachment?? && gp_attachment?has_content && gp_attachment.getSiblings()?has_content> 
314            <div class="news-page__article_file" style="display: none"> 
315                <h4 class="news-page__article_file-title">${gp_attachment.getSiblings()?size} <@liferay.language key="file" /></h4> 
316                <ul class="news-page__article_file-list"> 
317                    <#list gp_attachment.getSiblings() as cur_gp_attachment> 
318                        <#assign fileSize = ddmService.getFileSizeByDataEntry(locale, groupId, cur_gp_attachment) /> 
319                        <#assign sizeTitle = templateUtil.fileSizeFormat(fileSize, locale)/> 
320                        <#assign fileMeta = cur_gp_attachment.data?replace('\\\\u(....)', '&#x$1;', 'r')?eval/> 
321 
322                        <li class="news-page__article_file-item"> 
323                            <p class="news-page__article_file-name"> 
324                                ${fileMeta.title} 
325                            </p> 
326                            <a href="${cur_gp_attachment.getData()}&download=true" target="_blank" 
327                               class="button size-s a_custom"> 
328                                <@liferay.language key="news.download" /> [ ${sizeTitle} ] 
329                            </a> 
330                        </li> 
331                    </#list> 
332                </ul> 
333            </div> 
334        </#if> 
335 
336        <!-- Attachments end --> 
337 
338        <#if !isInternal> 
339            <div class="news-page__article_share" style="display: none"> 
340                <span class="news-page__article_share-title"> 
341                    <@liferay.language key="news.direct-link" /> 
342                </span> 
343                <div class="text-field hidden-xs"> 
344                    <div class="text-field__value"> 
345                        <input type="search" class="text-field__input" placeholder="text" value="${repostUrl}"> 
346                    </div> 
347                    <span class="text-field__help">&nbsp;</span> 
348                </div> 
349                <button class="a_custom button hidden-lg hidden-sm  hidden-md size-s" 
350                        onclick="CopyToClipboard('${repostUrl}')" 
351
352                    <@liferay.language key="news.direct-link.copy" /> 
353                </button> 
354 
355                <span class="news-page__article_share-title"> 
356                    <@liferay.language key="news.share" /> 
357                </span> 
358                <ul class="news-page__article_share-list"> 
359                    <li class="news-page__article_share-item"> 
360                        <a href="#" title="" class="news-page__article_share-link s_vk">Вконтакте</a> 
361                    </li> 
362                    <li class="news-page__article_share-item"> 
363                        <a href="#" title="" class="news-page__article_share-link s_livejournal">LiveJournal</a> 
364                    </li> 
365                    <li class="news-page__article_share-item"> 
366                        <a href="#" title="" class="news-page__article_share-link s_facebook">Facebook</a> 
367                    </li> 
368                    <li class="news-page__article_share-item"> 
369                        <a href="#" title="" class="news-page__article_share-link s_twitter">Twitter</a> 
370                    </li> 
371                </ul> 
372            </div> 
373        </#if> 
374    </div> 
375</div> 
376<div class="news-page__footer"> 
377    <#if catList?has_content> 
378        <div class="news-page__footer_item"> 
379            <h4 class="news-page__footer_title"><@liferay.language key="news.rubrics" /></h4> 
380            <#list catList?keys as catName> 
381                <a class="chips" href="${feedUrl + "?rubrics=" + catList[catName]}"> 
382                    ${catName} 
383                </a> 
384            </#list> 
385        </div> 
386    </#if> 
387    <#if tagList?has_content> 
388        <div class="news-page__footer_item"> 
389            <h4 class="news-page__footer_title">Теги</h4> 
390            <#list tagList?keys as tagName> 
391                <a class="chips" href="${feedUrl + "?tags=" + tagList[tagName]}"> 
392                    ${tagName} 
393                </a> 
394            </#list> 
395        </div> 
396    </#if> 
397</div> 
398 
399<div id="printContent" class="print_data"> 
400    <div class="print_header"> 
401        <div class="print__wrapper"> 
402            <div class="print__logo"> 
403                <#if !isInternal> 
404                    <img src="/o/gpparf-public-theme/images/logo.png" alt="logo" width="50" height="54"> 
405                <#else> 
406                    <img src="/o/gpparf-internal-theme/images/logo.svg" alt="logo" width="50" height="54"> 
407                </#if> 
408                <h2 class="print__title">${procStart}<br><span>${procEnd}</span></h2> 
409            </div> 
410            <div class="print_button_wrapper no-print"> 
411                <a href="#" class="print_button" aria-label="<@liferay.language key="news.print" />" 
412                   id="button_print" onclick="self.print()"> 
413                    <svg xmlns="http://www.w3.org/2000/svg" width="24" height="19" viewBox="0 0 24 19"> 
414                        <path fill-rule="evenodd" 
415                              d="M7 17h10v-7H7v7zm-2 1v-4H0V3h24v11h-5v5H5v-1zm0-9V8h14v4h3V5H2v7h3V9zm0-9h14v2H5V0zm4 13h6v2H9v-2z"></path> 
416                    </svg> 
417                </a> 
418            </div> 
419        </div> 
420        <div class="container"> 
421            <div class="category__info row"> 
422                <div class="category__item col-xs-6 col-sm-6 col-md-6 col-lg-6"> 
423                    <span class="category__category"><@liferay.language key="news.source" />:</span> 
424                    <p>${proc}</p> 
425                </div> 
426                <div class="category__item col-xs-6 col-sm-6 col-md-6 col-lg-6"> 
427                    <span class="category__category"><@liferay.language key="news.publication-date" />:</span> 
428                    <p>${datetimePubFieldFormatted}</p> 
429                </div> 
430            </div> 
431        </div> 
432    </div> 
433 
434    <section class="one-new__content"> 
435        <h2 class="one-new__title">${journalArticleTitle}</h2> 
436        <#if gp_content?has_content> 
437            <div class="break-word">${gp_content.getData()}</div> 
438        </#if> 
439    </section> 
440    <div class="print_footer"> 
441        <div class="container"> 
442            <div class="row"> 
443                <div class="col-xs-6 col-sm-6 col-md-6 col-lg-6"> 
444                    © 2003-2020 ${proc}<br> 
445                    <@liferay.language key="footer.copyright" /> 
446                </div> 
447                <div class="col-xs-6 col-sm-6 col-md-6 col-lg-6"> 
448                    <#if current_unit_contact_info?has_content> 
449                        <@liferay.language key="news.address" />: ${current_unit_contact_info.address}<br> 
450                        <#if current_unit_contact_info.categoryPointTitle?? && current_unit_contact_info.phone??> 
451                            ${current_unit_contact_info.categoryPointTitle}: 
452                            <a href="tel:${current_unit_contact_info.phone}">${current_unit_contact_info.phone}</a> 
453                        </#if> 
454                    </#if> 
455                </div> 
456            </div> 
457        </div> 
458    </div> 
459</div> 
460 
461 
462<script> 
463  (function () { 
464    var init = function () { 
465      $(".news-page__article_share-link").ShareLink({ 
466        title: '${journalArticleTitle}', 
467        text: '${journalArticleTitle}', 
468        image: '${themeDisplay.getPortalURL()}/documents/1664002/1691794/emblem_big%281%29.PNG',//'http://cdn.myanimelist.net/images/characters/3/27890.jpg', 
469        url: '${repostUrl}' 
470      }); 
471 
472 
473      $("#button_printprw").printPreview({ 
474        obj2print: '#printContent', 
475        width: '980', 
476        style: '<style>.print_data{display:block;}</style>', 
477        resizable: 'no', 
478        status: 'no', 
479        title: '${proc?html}' 
480      }); 
481 
482      $('.news_media_player').mediaelementplayer({ 
483        audioVolume: "vertical", 
484        success: function (mediaElement, originalNode, instance2) { 
485          mediaElement.pause(); 
486          mediaElement.load(); 
487
488      }) 
489    }; 
490 
491    if ($().mediaelementplayer && $().ShareLink && $().printPreview) 
492      init(); 
493    else 
494      document.addEventListener("DOMContentLoaded", init); 
495  })(); 
496 
497  function openTab(blockName, tabName) { 
498 
499    var tab = $('.' + tabName); 
500 
501    if (!tab.hasClass('is-active')) { 
502 
503      $('.text-item').removeClass('is-active'); 
504      $('.photo-item').removeClass('is-active'); 
505      $('.media-item').removeClass('is-active'); 
506      $('.attach-item').removeClass('is-active'); 
507      $('.share-item').removeClass('is-active'); 
508 
509      tab.addClass('is-active'); 
510 
511      $('.news-page__article_text_block').css('display', 'none'); 
512      $('.news-page__article_gallery').css('display', 'none'); 
513      $('.news-page__article_media').css('display', 'none'); 
514      $('.news-page__article_file').css('display', 'none') 
515      $('.news-page__article_share').css('display', 'none'); 
516      $('.' + blockName).css('display', 'block'); 
517
518
519</script>