Регламент работы
Во время обработки запрошенного шаблона произошла ошибка...
The following has evaluated to null or missing: ==> entry.getPublishDate() [in template "20116#20152#3768232" at line 18, column 29] ---- 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: #assign date = entry.getPublishDate() [in template "20116#20152#3768232" at line 18, column 13] ----
1<style>
2.item__menu {
3 position: absolute;
4 top: 0;
5 right: 0;
6}
7</style>
8<#assign portletId = themeDisplay.getPortletDisplay().getId()/>
9<#if entries?has_content>
10 <section class="avo-section avo_news avo_news_inner">
11 <div class="avo_news_2col">
12
13 <div class="row">
14
15 <#list entries as entry>
16 <#assign entryRenderer = entry.getAssetRenderer()/>
17 <#assign imgUrl = entryRenderer.getURLImagePreview(renderRequest)!""/>
18 <#assign date = entry.getPublishDate()/>
19<#-- полная картинка -->
20
21 <#-- получение дополнительных полей -->
22 <#assign fields = entryRenderer.getDDMFormValuesReader().getDDMFormValues().getDDMFormFieldValuesMap() />
23
24 <#assign hasImages = false>
25 <#list fields['image']! as image>
26 <#if image.getValue().getString(locale)?has_content>
27 <#assign hasImages = true>
28 <#break>
29 </#if>
30 </#list>
31
32 <#assign hasVideos = false>
33 <#list fields['videoLink']! as videoLink>
34 <#if videoLink.getValue().getString(locale)?has_content>
35 <#assign hasVideos = true>
36 <#break>
37 </#if>
38 </#list>
39
40 <#assign bigPreviewFull = ''/>
41 <#assign bigPreviewSmall = ''/>
42 <#assign bigPreviews = fields['bigPreview']![]>
43 <#if bigPreviews?size gt 0>
44 <#assign bigPreviewJSON = bigPreviews[0].getValue().getString(locale) />
45 <#if bigPreviewJSON?length gt 0 >
46 <#assign bigPreview = bigPreviewJSON?eval />
47 <#assign bigPreviewFull = "/documents/${bigPreview.groupId}/0/${bigPreview.title}/${bigPreview.uuid}" />
48 <#assign bigPreviewSmall = bigPreviewFull + '?imagePreview=1' />
49
50 </#if>
51 </#if>
52
53 <#assign entryUrl = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry, true)/>
54
55 <div class="col-sm-6">
56 <article class="news_item">
57 <div class="picture">
58 <picture>
59 <#if bigPreviewSmall?has_content>
60 <img src="${bigPreviewSmall}" alt="${entry.getTitle(locale)}"/>
61 <#elseif imgUrl?has_content>
62 <img src="${imgUrl}" alt="${entry.getTitle(locale)}"/>
63 <#else/>
64 <span>${entry.getTitle(locale)}</span>
65 </#if>
66 </picture>
67
68 <div class="hover_box">
69 <a class="hover_link" href="${entryUrl}"></a>
70 <#if bigPreviewFull?has_content>
71 <div class="icons">
72 <a download="download" href="${bigPreviewFull}" title="Скачать">
73 <svg height="512pt" viewBox="0 0 512 512" width="512pt" xmlns="http://www.w3.org/2000/svg"><path d="m409.785156 278.5-153.785156 153.785156-153.785156-153.785156 28.285156-28.285156 105.5 105.5v-355.714844h40v355.714844l105.5-105.5zm102.214844 193.5h-512v40h512zm0 0"/></svg>
74 </a>
75 <a data-fancybox class="fullscreen" href="${bigPreviewFull}" title="Увеличить">
76 <svg aria-hidden="true" focusable="false" data-prefix="fas" data-icon="expand" class="svg-inline--fa fa-expand fa-w-14" role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path fill="currentColor" d="M0 180V56c0-13.3 10.7-24 24-24h124c6.6 0 12 5.4 12 12v40c0 6.6-5.4 12-12 12H64v84c0 6.6-5.4 12-12 12H12c-6.6 0-12-5.4-12-12zM288 44v40c0 6.6 5.4 12 12 12h84v84c0 6.6 5.4 12 12 12h40c6.6 0 12-5.4 12-12V56c0-13.3-10.7-24-24-24H300c-6.6 0-12 5.4-12 12zm148 276h-40c-6.6 0-12 5.4-12 12v84h-84c-6.6 0-12 5.4-12 12v40c0 6.6 5.4 12 12 12h124c13.3 0 24-10.7 24-24V332c0-6.6-5.4-12-12-12zM160 468v-40c0-6.6-5.4-12-12-12H64v-84c0-6.6-5.4-12-12-12H12c-6.6 0-12 5.4-12 12v124c0 13.3 10.7 24 24 24h124c6.6 0 12-5.4 12-12z"></path></svg>
77 </a>
78 </div>
79 </#if>
80 </div>
81 </div>
82 <div class="flex">
83 <span class="date">${dateUtil.getDate(date, "dd MMMM yyyy", locale)}</span>
84 <span class="avo_icons">
85 <#if hasImages>
86 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M22 16V4C22 2.9 21.1 2 20 2H8C6.9 2 6 2.9 6 4V16C6 17.1 6.9 18 8 18H20C21.1 18 22 17.1 22 16ZM11.4 12.53L13.03 14.71L15.61 11.49C15.81 11.24 16.19 11.24 16.39 11.49L19.35 15.19C19.61 15.52 19.38 16 18.96 16H9C8.59 16 8.35 15.53 8.6 15.2L10.6 12.53C10.8 12.27 11.2 12.27 11.4 12.53ZM2 7V20C2 21.1 2.9 22 4 22H17C17.55 22 18 21.55 18 21C18 20.45 17.55 20 17 20H5C4.45 20 4 19.55 4 19V7C4 6.45 3.55 6 3 6C2.45 6 2 6.45 2 7Z" fill="#B8BCCB"/></svg>
87 </#if>
88 <#if hasVideos>
89 <svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M18 4L19.82 7.64C19.9 7.8 19.78 8 19.6 8H17.62C17.24 8 16.89 7.79 16.73 7.45L15 4H13L14.82 7.64C14.9 7.8 14.78 8 14.6 8H12.62C12.24 8 11.89 7.79 11.73 7.45L10 4H8L9.82 7.64C9.9 7.8 9.78 8 9.6 8H7.62C7.24 8 6.89 7.79 6.72 7.45L5 4H4C2.9 4 2 4.9 2 6V18C2 19.1 2.9 20 4 20H20C21.1 20 22 19.1 22 18V5C22 4.45 21.55 4 21 4H18Z" fill="#B8BCCB"/></svg>
90 </#if>
91 </span>
92 </div>
93 <a href="${entryUrl}">
94 <h3>${entry.getTitle(locale)}</h3>
95 <#assign summary = entryRenderer.getSummary(renderRequest,renderResponse)/>
96 <#assign fullSummary = summary/>
97 <#assign abstractLength = getPreference(portletPreferences, "abstractLength", 200)/>
98 <#assign summarySplitIndex = summary?index_of(" ", abstractLength)/>
99 <#if summarySplitIndex gt 0>
100 <#assign summary = summary?substring(0,summarySplitIndex)?remove_ending(".") + '...'/>
101 </#if>
102 <p title="${fullSummary}">${summary}</p>
103 </a>
104 <#assign editPermission = entryRenderer.hasEditPermission(permissionChecker)/>
105 <#if editPermission>
106 <div class="item__menu">
107 <#assign redirectUrl = portletURLFactory.create(renderRequest, themeDisplay.getPortletDisplay().getId(),themeDisplay.getPlid(), "RENDER_PHASE")/>
108 <#assign editUrl = entryRenderer.getURLEdit(renderRequest,renderResponse,windowStateFactory.getWindowState("NORMAL"),redirectUrl)/>
109 <#assign editTitle = languageUtil.format(locale, 'edit-x', htmlUtil.escape(entry.getTitle(locale))) />
110 <#assign menuId = portletId + '_' + entry.getEntryId()/>
111 <@liferay_ui["icon-menu"] cssClass="visible-interaction" direction="left-side" markupView="lexicon" showWhenSingleIcon=true>
112 <@liferay_ui.icon data={'destroyOnHide': true, 'id': menuId + '_edit', 'title': editTitle} message="edit" label=true method="get" url=editUrl.toString() useDialog=false/>
113 </@>
114 </div>
115 </#if>
116 </article>
117 </div><!--col-->
118
119 </#list>
120 </div><!--/row-->
121
122 </div><!--/container-->
123 </section><!--/-->
124</#if>
125
126<#function getPreference preferences name defaultValue>
127 <#assign preferenceArray = preferences[name]![]/>
128 <#if preferenceArray?size gt 0>
129 <#return preferenceArray[0]?number!defaultValue>
130 </#if>
131 <#return defaultValue>
132</#function>