Přední Moderní Řešení Sklizně pro Efektivní Těžbu
Při zpracování šablony došlo k chybě.
The following has evaluated to null or missing:
==> assetRenderer.getArticle [in template "1812923#1812963#1814626" at line 48, column 34]
----
Tip: It's the step after the last dot 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: journalArticle = assetRenderer.getArt... [in template "1812923#1812963#1814626" at line 48, column 17]
----
1<#assign showNews = 8
2count = 0 />
3
4<div class="ponsse-news">
5 <div class="header">
6 <div class="title"><@liferay_ui["message"] key="ponsse.news" /></div>
7 <div class="all-events-text">
8 <a href=${themeDisplay.getThemeSetting("ponsse.news-link")}>
9 <i class="fas fa-arrow-right"></i>
10 <@liferay_ui["message"] key="ponsse.view-all-news" />
11 </a>
12 </div>
13 </div>
14
15
16 <div class="content" id="ponsse-news-content">
17 <div class="arrow-left" id="ponsse-news-left-arrow" onclick="scrollContent(false)">
18 <i class="fas fa-chevron-left"></i>
19 </div>
20 <div class="arrow-right" id="ponsse-news-right-arrow" onclick="scrollContent(true)">
21 <i class="fas fa-chevron-right"></i>
22 </div>
23 <#if !entries?has_content>
24 <#if !themeDisplay.isSignedIn()>
25 ${renderRequest.setAttribute("PORTLET_CONFIGURATOR_VISIBILITY", true)}
26 </#if>
27
28 <div class="alert alert-info">
29 <@liferay_ui["message"] key="there-are-no-results" />
30 </div>
31 </#if>
32
33 <#assign
34 dateFormat = "dd.MM.yyyy "
35 newsLink = themeDisplay.getThemeSetting("ponsse.news-link")
36 homeName = portalUtil.getLayoutFriendlyURL(layout, themeDisplay)?keep_after_last("/")
37 />
38
39 <#list entries as entry>
40 <#assign
41 entry = entry
42
43 assetRenderer = entry.getAssetRenderer()
44
45 entryTitle = htmlUtil.escape(entry.getTitle(locale))
46 entryDescription = htmlUtil.escape(entry.getDescription(locale))
47
48 journalArticle = assetRenderer.getArticle()
49 structureKey = journalArticle.getDDMStructureKey()
50
51 document = saxReaderUtil.read(journalArticle.getContentByLocale(locale))
52 rootElement = document.getRootElement()
53 elements = rootElement.elements()
54 imageContent = ""
55 displayLocales = ""
56 categories = entry.getCategories()
57 />
58
59 <#if categories?has_content>
60 <#list categories as cat>
61 <#if (cat.getVocabularyId()?long == 1814586)>
62 <#assign displayLocales = cat.getName() + ", " + displayLocales/>
63 </#if>
64
65 </#list>
66 </#if>
67
68 <#if ( !displayLocales?has_content || displayLocales?contains(locale) || ( stringUtil.equals("228126", structureKey) && displayLocales?contains("en_US") ) ) && (count < showNews)>
69 <#list elements as element>
70 <#if "cisionMainImage" == element.attributeValue("name") >
71 <#assign imageContent = element.element("dynamic-content").getText() />
72 <#elseif "cisionDocumentLibraryImage" == element.attributeValue("name")
73 && element.element("dynamic-content").getText()?has_content
74 && element.element("dynamic-content").getText() != "{}" >
75 <#assign imageContent = element.element("dynamic-content").getText()/>
76 <#break>
77 <#elseif "newsMainImage" == element.attributeValue("name")>
78 <#assign imageContent = getImageUrl(element.element("dynamic-content").getText()) />
79 </#if>
80 </#list>
81
82 <div class="asset-abstract news-item">
83 <div class="pull-right">
84 <@getEditIcon />
85 </div>
86
87 <a href="${getViewUrl(entry)}">
88 <div class="news-image">
89 <#if imageContent?has_content>
90 <img src="${imageContent}"/>
91 <#else>
92 <img src="/o/ponsse-theme/images/default-thumbnail-ponsse-290x200.jpg"/>
93 </#if>
94 </div>
95
96 <div class="news-details">
97 <div class="news-title">${entryTitle}</div>
98 <div class="news-date"><@getMetadataField fieldName="publish-date" /></div>
99 </div>
100 </a>
101 </div>
102 <#assign count = count + 1/>
103 <#if (count == showNews)><#break></#if>
104 </#if>
105 </#list>
106 </div>
107
108</div>
109
110<#macro getEditIcon>
111 <#if assetRenderer.hasEditPermission(themeDisplay.getPermissionChecker())>
112 <#assign redirectURL = renderResponse.createRenderURL() />
113
114 ${redirectURL.setParameter("mvcPath", "/add_asset_redirect.jsp")}
115 ${redirectURL.setWindowState("pop_up")}
116
117 <#assign editPortletURL = assetRenderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("pop_up"), redirectURL)!"" />
118
119 <#if validator.isNotNull(editPortletURL)>
120 <#assign title = languageUtil.format(locale, "edit-x", entryTitle, false) />
121
122 <@liferay_ui["icon"]
123 cssClass="icon-monospaced visible-interaction"
124 icon="pencil"
125 markupView="lexicon"
126 message=title
127 url="javascript:Liferay.Util.openWindow({id:'" + renderResponse.getNamespace() + "editAsset', title: '" + title + "', uri:'" + htmlUtil.escapeURL(editPortletURL.toString()) + "'});"
128 />
129 </#if>
130 </#if>
131</#macro>
132
133<#macro getMetadataField fieldName>
134 <#if stringUtil.split(metadataFields)?seq_contains(fieldName)>
135 <#assign dateFormat = "dd.MM.yyyy" />
136 <#if stringUtil.equals(fieldName, "author")>
137 <@liferay.language key="by" /> ${htmlUtil.escape(portalUtil.getUserName(assetRenderer.getUserId(), assetRenderer.getUserName()))}
138 <#elseif stringUtil.equals(fieldName, "categories")>
139 <@liferay_ui["asset-categories-summary"]
140 className=entry.getClassName()
141 classPK=entry.getClassPK()
142 portletURL=renderResponse.createRenderURL()
143 />
144 <#elseif stringUtil.equals(fieldName, "create-date")>
145 ${dateUtil.getDate(entry.getCreateDate(), dateFormat, locale)}
146 <#elseif stringUtil.equals(fieldName, "expiration-date")>
147 ${dateUtil.getDate(entry.getExpirationDate(), dateFormat, locale)}
148 <#elseif stringUtil.equals(fieldName, "modified-date")>
149 ${dateUtil.getDate(entry.getModifiedDate(), dateFormat, locale)}
150 <#elseif stringUtil.equals(fieldName, "priority")>
151 ${entry.getPriority()}
152 <#elseif stringUtil.equals(fieldName, "publish-date")>
153 ${dateUtil.getDate(entry.getPublishDate(), dateFormat, locale)}
154 <#elseif stringUtil.equals(fieldName, "tags")>
155 <@liferay_ui["asset-tags-summary"]
156 className=entry.getClassName()
157 classPK=entry.getClassPK()
158 portletURL=renderResponse.createRenderURL()
159 />
160 <#elseif stringUtil.equals(fieldName, "view-count")>
161 ${entry.getViewCount()} <@liferay.language key="views" />
162 </#if>
163 </#if>
164</#macro>
165
166<#function getViewUrl entry>
167 <#local
168 viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry.getAssetRenderer(), entry, !stringUtil.equals(assetLinkBehavior, "showFullContent"))
169 newViewUrl = viewURL?split("?")[0]?replace("/mYU7Sv3Vlsel/", "/P4s3zYhpxHUQ/")?replace("/${homeName}/", "/${newsLink}/")
170 />
171 <#return newViewUrl>
172</#function>
173
174<#function getImageUrl content>
175 <#local imageURL = "/o/ponsse-theme/images/default-thumbnail-ponsse-304x171.jpg" />
176 <#if content?has_content>
177 <#local
178 imageUUID = jsonFactoryUtil.createJSONObject(content).getString("uuid")
179 siteId = themeDisplay.getSiteGroupId()
180 imageURL = "/documents/${siteId}/${imageUUID}"
181 />
182 </#if>
183 <#return imageURL>
184</#function>
185
186
187<script>
188 var cachebuster = Math.round(new Date().getTime() / 1000);
189 var path = "/o/ponsse-theme/js/utils.js?cb=" + cachebuster;
190 document.write("<script type='text/javascript' src='"+ path + "'><\/scr" + "ipt>");
191</script>
192
193<script>
194 function hideArrowsNewsArrows(e) {
195 var target = e.target;
196 var scrollWidth = target.scrollWidth;
197 var offsetWidth = target.offsetWidth;
198 var scrollLeft = target.scrollLeft;
199 var scrollDistance = scrollWidth - offsetWidth;
200 var scrollPosition = scrollDistance - scrollLeft;
201 var leftArrow = document.getElementById('ponsse-news-left-arrow')
202 var rightArrow = document.getElementById('ponsse-news-right-arrow')
203
204 if (scrollPosition === scrollDistance) {
205 leftArrow.style.display = "none";
206 } else {
207 leftArrow.style.display = "flex";
208 }
209 if (scrollPosition === 0) {
210 rightArrow.style.display = "none";
211 } else {
212 rightArrow.style.display = "flex";
213 }
214 }
215
216 dragToScrollHorizontal('ponsse-news-content', 'news-item', function (e) {
217 hideArrowsNewsArrows(e);
218 })
219
220 function scrollContent(left) {
221 var content = document.getElementById('ponsse-news-content');
222 smooth_scroll_to_horizontal(content, content.scrollLeft + 290 * (left ? 1 : -1), 400)
223 }
224</script>