Во время обработки запрошенного шаблона произошла ошибка...
The following has evaluated to null or missing: ==> arrayUrl[4] [in template "49392#49420#53682" at line 19, column 108] ---- Tip: It's the final [] step that caused this error, not those before it. ---- 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: #assign smallUrl = arrayUrl[0] + "/" ... [in template "49392#49420#53682" at line 19, column 13] ----
1<#assign socialBookmarksRegistry = serviceLocator.findService("com.liferay.social.bookmarks.SocialBookmarksRegistry")/>
2
3<#if entries?has_content>
4 <#assign socialBookmarkTypesPref = portletPreferences["socialBookmarksTypes"]?first!"" />
5 <#assign socialBookmarkTypes = socialBookmarkTypesPref?split(",")![] />
6 <#attempt>
7 <#assign socialBookmarks = socialBookmarkTypes?map(socialBookmarkType -> socialBookmarksRegistry.getSocialBookmark(socialBookmarkType)!{})?filter(x -> x?has_content)>
8 <#recover>
9 <#assign socialBookmarks = [] />
10 </#attempt>
11
12<div class="medical_news medical_news_squared">
13 <div class="row">
14 <#list entries as entry>
15 <#assign entryRenderer = entry.getAssetRenderer()/>
16 <#assign entryUrl = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry, true)/>
17 <#assign title = entry.getTitle(locale)/>
18 <#assign arrayUrl = entryUrl?split("/")/>
19 <#assign smallUrl = arrayUrl[0]+ "/"+ arrayUrl[1]+ "/" + arrayUrl[2] + "/" + arrayUrl[3]+ "/"+ arrayUrl[4]+ "/" + arrayUrl[5]+ "/"+ arrayUrl[6]+ "/"+ arrayUrl[7]+ "/"+ title?replace(" ","-")+"/49420?"/>
20 <#assign date = entry.getPublishDate()/>
21 <div class="col-sm-6">
22 <article class="item">
23 <#assign portletId = themeDisplay.getPortletDisplay().getId()/>
24 <#assign editPermission = entryRenderer.hasEditPermission(permissionChecker)/>
25 <#if editPermission>
26 <div class="item__menu">
27 <#assign redirectUrl = portletURLFactory.create(renderRequest, themeDisplay.getPortletDisplay().getId(),themeDisplay.getPlid(), "RENDER_PHASE")/>
28 <#assign editUrl = entryRenderer.getURLEdit(renderRequest,renderResponse,windowStateFactory.getWindowState("NORMAL"),redirectUrl)/>
29 <#assign editTitle = languageUtil.format(locale, 'edit-x', htmlUtil.escape(entry.getTitle(locale))) />
30 <#assign menuId = portletId + '_' + entry.getEntryId()/>
31 <@liferay_ui["icon-menu"] cssClass="visible-interaction" direction="left-side" markupView="lexicon" showWhenSingleIcon=true>
32 <@liferay_ui.icon data={'destroyOnHide': true, 'id': menuId + '_edit', 'title': editTitle} message="edit" label=true method="get" url=editUrl.toString() useDialog=false/>
33 </@>
34 </div>
35 </#if>
36 <div class="date date-small">
37 <div>
38 <span class="d">${dateUtil.getDate(date, "dd", locale)}</span>
39 <span class="m">${dateUtil.getDate(date, "MMMM", locale)}</span>
40 <span class="y">${dateUtil.getDate(date, "yyyy", locale)}</span>
41 </div>
42 <div class="share">
43 <span class="share__btn small">
44 <svg width="14" height="15" viewBox="0 0 14 15" fill="none" xmlns="http://www.w3.org/2000/svg">
45 <path d="M11.25 10.56C10.68 10.56 10.17 10.785 9.78 11.1375L4.4325 8.025C4.47 7.8525 4.5 7.68 4.5 7.5C4.5 7.32 4.47 7.1475 4.4325 6.975L9.72 3.8925C10.125 4.2675 10.6575 4.5 11.25 4.5C12.495 4.5 13.5 3.495 13.5 2.25C13.5 1.005 12.495 0 11.25 0C10.005 0 9 1.005 9 2.25C9 2.43 9.03 2.6025 9.0675 2.775L3.78 5.8575C3.375 5.4825 2.8425 5.25 2.25 5.25C1.005 5.25 0 6.255 0 7.5C0 8.745 1.005 9.75 2.25 9.75C2.8425 9.75 3.375 9.5175 3.78 9.1425L9.12 12.2625C9.0825 12.42 9.06 12.585 9.06 12.75C9.06 13.9575 10.0425 14.94 11.25 14.94C12.4575 14.94 13.44 13.9575 13.44 12.75C13.44 11.5425 12.4575 10.56 11.25 10.56Z" fill="#A6AEBF"/>
46 </svg>
47 </span>
48 <div class="share__socials">
49 <ul class="share__socials-list">
50 <#list socialBookmarks as socialBookmark>
51 <#assign type = socialBookmarkTypes[socialBookmark?index] />
52 <#assign socialPostUrl = socialBookmark.getPostURL(entry.getTitle(locale), entryUrl) />
53 <#assign clickJSCall = getClickJSCall(entry.getClassName(), entry.getClassPK(), type, socialPostUrl, entryUrl) />
54 <#assign socialIcon = getSocialIcon(entry, entryUrl, type, locale) />
55 <li class="share__socials-item">
56 <a href="${socialPostUrl}" class="share__socials-button" target="_blank">
57 ${socialIcon}
58 </a>
59 </li>
60 </#list>
61 <span class="copy_text_hide">${smallUrl}</span>
62 <li class="share__socials-item">
63 <button class="copy-button"><svg xmlns="http://www.w3.org/2000/svg" height="20px" viewBox="0 -960 960 960" width="20px" fill="#a6aebf"><path d="M360-240q-33 0-56.5-23.5T280-320v-480q0-33 23.5-56.5T360-880h360q33 0 56.5 23.5T800-800v480q0 33-23.5 56.5T720-240H360Zm0-80h360v-480H360v480ZM200-80q-33 0-56.5-23.5T120-160v-560h80v560h440v80H200Zm160-240v-480 480Z"/></svg></button>
64 </li>
65 </ul>
66 </div>
67 </div>
68 </div>
69 <div class="excerpt">
70 <#--
71 <#assign summary = entryRenderer.getSummary(renderRequest,renderResponse)/>
72 <#assign summarySplitIndex = summary?index_of(" ", 90)/>
73 <#if summarySplitIndex gt 0>
74 <#assign summary = summary?substring(0,summarySplitIndex)?remove_ending(".") + '...'/>
75 </#if>
76 -->
77 <a href="${entryUrl}" style="text-decoration: none;"><p class="bvi-speech">${entry.getTitle(locale)}</p></a>
78 </div>
79 <a href="${entryUrl}" class="readmore">Подробнее</a>
80
81 </article>
82 </div><#--col-->
83
84 </#list>
85 </div><#--row-->
86</div>
87
88</#if>
89
90<#function getClickJSCall className classPK type postURL url >
91 <#return "socialBookmarks_handleItemClick(event, '${htmlUtil.escapeJS(className)}', ${classPK}, '${htmlUtil.escapeJS(type)}', '${htmlUtil.escapeJS(postURL)}', '${htmlUtil.escapeJS(url)}');" >
92</#function>
93
94<#function getSocialIcon entry entryUrl type locale>
95 <@liferay_util["buffer"] var="social_html">
96 <@social_bookmarks_ext["bookmark-wrapper"]
97 displayStyle="inline"
98 target="blank"
99 title=entry.getTitle(locale)
100 type=type
101 url=entryUrl
102 />
103 </@>
104 <#assign socialIcon = "\lsvg" + social_html?keep_after("\lsvg")?keep_before("\l/svg\g") + "\l/svg\g" />
105 <#return socialIcon />
106</#function>
107
108<style>
109 .copy_text_hide {
110 display:none !important;
111 }
112 .copy-button {
113 border: none;
114 background: none;
115 margin: 0px;
116 padding: 0px;
117 }
118</style>
119<script>
120 document.querySelectorAll('.share__socials').forEach((element, index) => (
121 element.querySelector('.copy-button').addEventListener('click', (e) => {
122 navigator.clipboard.writeText(element.querySelector('.copy_text_hide').innerText).then(function() {
123 console.log('Text copied to clipboard');
124 }).catch(function(error) {
125 console.error('Error:', error);
126 });
127 })))
128
129</script>