Hogstmaskiner og Skogsmaskiner for Effektivt Skogbruk
En feil oppsto under behandling av malen.
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") && element.element("dynamic-content").getText()?has_content >
73 <#assign imageContent = element.element("dynamic-content").getText()/>
74 <#break>
75 <#elseif "newsMainImage" == element.attributeValue("name")>
76 <#assign imageContent = getImageUrl(element.element("dynamic-content").getText()) />
77 </#if>
78 </#list>
79
80 <div class="asset-abstract news-item">
81 <div class="pull-right">
82 <@getEditIcon />
83 </div>
84
85 <a href="${getViewUrl(entry)}">
86 <div class="news-image">
87 <#if imageContent?has_content>
88 <img src="${imageContent}"/>
89 <#else>
90 <img src="/o/ponsse-theme/images/default-thumbnail-ponsse-290x200.jpg"/>
91 </#if>
92 </div>
93
94 <div class="news-details">
95 <div class="news-title">${entryTitle}</div>
96 <div class="news-date"><@getMetadataField fieldName="publish-date" /></div>
97 </div>
98 </a>
99 </div>
100 <#assign count = count + 1/>
101 <#if (count == showNews)><#break></#if>
102 </#if>
103 </#list>
104 </div>
105
106</div>
107
108<#macro getEditIcon>
109 <#if assetRenderer.hasEditPermission(themeDisplay.getPermissionChecker())>
110 <#assign redirectURL = renderResponse.createRenderURL() />
111
112 ${redirectURL.setParameter("mvcPath", "/add_asset_redirect.jsp")}
113 ${redirectURL.setWindowState("pop_up")}
114
115 <#assign editPortletURL = assetRenderer.getURLEdit(renderRequest, renderResponse, windowStateFactory.getWindowState("pop_up"), redirectURL)!"" />
116
117 <#if validator.isNotNull(editPortletURL)>
118 <#assign title = languageUtil.format(locale, "edit-x", entryTitle, false) />
119
120 <@liferay_ui["icon"]
121 cssClass="icon-monospaced visible-interaction"
122 icon="pencil"
123 markupView="lexicon"
124 message=title
125 url="javascript:Liferay.Util.openWindow({id:'" + renderResponse.getNamespace() + "editAsset', title: '" + title + "', uri:'" + htmlUtil.escapeURL(editPortletURL.toString()) + "'});"
126 />
127 </#if>
128 </#if>
129</#macro>
130
131<#macro getMetadataField fieldName>
132 <#if stringUtil.split(metadataFields)?seq_contains(fieldName)>
133 <#assign dateFormat = "dd.MM.yyyy" />
134 <#if stringUtil.equals(fieldName, "author")>
135 <@liferay.language key="by" /> ${htmlUtil.escape(portalUtil.getUserName(assetRenderer.getUserId(), assetRenderer.getUserName()))}
136 <#elseif stringUtil.equals(fieldName, "categories")>
137 <@liferay_ui["asset-categories-summary"]
138 className=entry.getClassName()
139 classPK=entry.getClassPK()
140 portletURL=renderResponse.createRenderURL()
141 />
142 <#elseif stringUtil.equals(fieldName, "create-date")>
143 ${dateUtil.getDate(entry.getCreateDate(), dateFormat, locale)}
144 <#elseif stringUtil.equals(fieldName, "expiration-date")>
145 ${dateUtil.getDate(entry.getExpirationDate(), dateFormat, locale)}
146 <#elseif stringUtil.equals(fieldName, "modified-date")>
147 ${dateUtil.getDate(entry.getModifiedDate(), dateFormat, locale)}
148 <#elseif stringUtil.equals(fieldName, "priority")>
149 ${entry.getPriority()}
150 <#elseif stringUtil.equals(fieldName, "publish-date")>
151 ${dateUtil.getDate(entry.getPublishDate(), dateFormat, locale)}
152 <#elseif stringUtil.equals(fieldName, "tags")>
153 <@liferay_ui["asset-tags-summary"]
154 className=entry.getClassName()
155 classPK=entry.getClassPK()
156 portletURL=renderResponse.createRenderURL()
157 />
158 <#elseif stringUtil.equals(fieldName, "view-count")>
159 ${entry.getViewCount()} <@liferay.language key="views" />
160 </#if>
161 </#if>
162</#macro>
163
164<#function getViewUrl entry>
165 <#local
166 viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, entry.getAssetRenderer(), entry, !stringUtil.equals(assetLinkBehavior, "showFullContent"))
167 newViewUrl = viewURL?split("?")[0]?replace("/mYU7Sv3Vlsel/", "/P4s3zYhpxHUQ/")?replace("/${homeName}/", "/${newsLink}/")
168 />
169 <#return newViewUrl>
170</#function>
171
172<#function getImageUrl content>
173 <#local imageURL = "/o/ponsse-theme/images/default-thumbnail-ponsse-304x171.jpg" />
174 <#if content?has_content>
175 <#local
176 imageUUID = jsonFactoryUtil.createJSONObject(content).getString("uuid")
177 siteId = themeDisplay.getSiteGroupId()
178 imageURL = "/documents/${siteId}/${imageUUID}"
179 />
180 </#if>
181 <#return imageURL>
182</#function>
183
184
185<script>
186 var cachebuster = Math.round(new Date().getTime() / 1000);
187 var path = "/o/ponsse-theme/js/utils.js?cb=" + cachebuster;
188 document.write("<script type='text/javascript' src='"+ path + "'><\/scr" + "ipt>");
189</script>
190
191<script>
192 function hideArrowsNewsArrows(e) {
193 var target = e.target;
194 var scrollWidth = target.scrollWidth;
195 var offsetWidth = target.offsetWidth;
196 var scrollLeft = target.scrollLeft;
197 var scrollDistance = scrollWidth - offsetWidth;
198 var scrollPosition = scrollDistance - scrollLeft;
199 var leftArrow = document.getElementById('ponsse-news-left-arrow')
200 var rightArrow = document.getElementById('ponsse-news-right-arrow')
201
202 if (scrollPosition === scrollDistance) {
203 leftArrow.style.display = "none";
204 } else {
205 leftArrow.style.display = "flex";
206 }
207 if (scrollPosition === 0) {
208 rightArrow.style.display = "none";
209 } else {
210 rightArrow.style.display = "flex";
211 }
212 }
213
214 dragToScrollHorizontal('ponsse-news-content', 'news-item', function (e) {
215 hideArrowsNewsArrows(e);
216 })
217
218 function scrollContent(left) {
219 var content = document.getElementById('ponsse-news-content');
220 smooth_scroll_to_horizontal(content, content.scrollLeft + 290 * (left ? 1 : -1), 400)
221 }
222</script>