We are Innovation
Innovation is our strength
"The best way to predict the future is to create it"
Peter Ducker
PUBLICATIONS
An error occurred while processing the template.
When calling function "getField", required parameter "defaultLanguageId" (parameter #3) was specified, but had null/missing value. ---- Tip: If the parameter value expression on the caller side is known to be legally null/missing, you may want to specify a default value for it with the "!" operator, like paramValue!defaultValue. ---- ---- FTL stack trace ("~" means nesting-related): - Failed at: #function getField(field, languageId,... [in template "20099#20135#1726635" in function "getField" at line 124, column 1] ----
1<style>
2 .publications-list .row {
3 display: flex !important;
4 padding-right: 1.5rem;
5 }
6 .publications-list-item.featured {
7 grid-column: 1/12 !important;
8 }
9</style>
10<#if entries?has_content>
11<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")>
12 <#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")>
13 <#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetLinkLocalService")>
14 <#assign classNameLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService")>
15 <#assign ddmStructureLocalService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMStructureLocalService")>
16 <#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
17 <#assign assetCategoryPropertyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryPropertyLocalService")>
18 <#assign journalArticleExtLocalService = serviceLocator.findService("com.izertis.internet.journal.ext.service.service.JournalArticleExtLocalService")>
19 <#assign currentUrl = themeDisplay.getURLCurrent() + "/" />
20
21<div class="pr-xl-3">
22<#list entries as curEntry>
23 <#assign renderer = curEntry.getAssetRenderer()>
24 <#assign className = renderer.getClassName()>
25
26
27 <#assign journalArticle = renderer.getArticle()>
28
29 <#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", journalArticle.getResourcePrimKey()) />
30 <#assign relatedAssets = assetLinkLocalService.getDirectLinks(assetEntry.getEntryId())/>
31 <#assign journalArticleClassNameId = classNameLocalService.getClassNameId("com.liferay.journal.model.JournalArticle")/>
32
33
34 <#assign description = journalArticle.getDescription(locale) />
35 <#assign descriptionEllipsisClass = "" />
36 <#if description == "">
37 <#assign description = htmlUtil.extractText(getField("content", locale, defaultLanguageId, rootElement)!) />
38 <#assign descriptionEllipsisClass = "five-lines" />
39 </#if>
40
41 <#assign author = 0 />
42 <#list relatedAssets as relatedAssetLink>
43 <#assign relatedAsset = assetEntryLocalService.getAssetEntry(relatedAssetLink.getEntryId2()) />
44 <#if journalArticleClassNameId == relatedAsset.getClassNameId()>
45 <#assign relatedJournalArticle = journalArticleLocalService.getLatestArticle(relatedAsset.getClassPK()) />
46 <#assign relatedJournalArticleStructure = ddmStructureLocalService.getStructure(groupId, journalArticleClassNameId, relatedJournalArticle.getDDMStructureKey()) />
47 <#if relatedJournalArticleStructure.getName("es_ES") == "Autor">
48 <#assign author = relatedJournalArticle />
49 </#if>
50 </#if>
51 </#list>
52
53 <#assign link = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, curEntry)>
54 <#if ((assetLinkBehavior!"") != "showFullContent")>
55 <#assign link = renderer.getURLViewInContext(renderRequest, renderResponse, link) />
56 </#if>
57
58 <#attempt>
59 <#assign link = "/-/" + journalArticleExtLocalService.getFriendlyUrl(journalArticle, themeDisplay.getLocale()) />
60 <#recover>
61 </#attempt>
62
63 <#if !currentUrl?contains(link + "/") >
64
65 <#assign document = saxReaderUtil.read(journalArticle.getContent())>
66 <#assign rootElement = document.getRootElement()>
67 <#assign defaultLanguageId = parseXml ("@default-locale", rootElement)>
68
69 <#attempt>
70 <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='image']")>
71 <#assign imagePost = xPathSelector.selectSingleNode(rootElement).getStringValue()>
72 <#if isJson(imagePost)>
73 <#assign imgJson = jsonFactoryUtil.createJSONObject(imagePost)>
74 <#if imgJson.get("alt")??>
75 <#assign imgAlt = imgJson.alt />
76 <#else>
77 <#assign imgAlt = "" />
78 </#if>
79 <#assign urlimgmain = "/documents/" + imgJson.groupId + "/" + imgJson.uuid >
80 <#else>
81 <#assign imgAlt = "" />
82 <#assign urlimgmain = "/o/portal-izertis-theme/images/publications/" + journalArticle.getArticleId()[journalArticle.getArticleId()?length-1] + "_miniature.jpg">
83 </#if>
84 <#recover>
85 <#assign imgAlt = "" />
86 <#assign urlimgmain = "/o/portal-izertis-theme/images/publications/" + journalArticle.getArticleId()[journalArticle.getArticleId()?length-1] + "_miniature.jpg">
87 </#attempt>
88
89 <#attempt>
90 <#assign title = getField("title", locale, defaultLanguageId, rootElement)!>
91 <#recover>
92 <#assign title = "">
93 </#attempt>
94
95
96 <div class="publications-list-item featured">
97 <a href="${link}">
98 <div class="img">
99 <picture>
100 <img data-src="${urlimgmain}" data-srcset="${urlimgmain}" class="lazyload" alt="${imgAlt}" title="${title}">
101 </picture>
102 </div>
103 <div class="title">
104 <span>${title}</span>
105 </div>
106 <div class="author">
107 <#if !author?is_number>
108 <#assign model = objectUtil("com.liferay.portal.kernel.portlet.PortletRequestModel", renderRequest, renderResponse) />
109 ${journalArticleLocalService.getArticleContent(author, author.getDDMTemplateKey(), "VIEW", locale,model, themeDisplay)}
110 </#if>
111 </div>
112 </a>
113 <#if description != "">
114 <div class="info ${descriptionEllipsisClass}" style="color:#1F1F1F;">
115 <p>${description}</p>
116 </div>
117 </#if>
118
119 </div>
120 </#if>
121</#list>
122</div>
123</#if>
124<#function getField field languageId defaultLanguageId xml>
125 <#local defaultSelector = "//dynamic-content[@language-id='" + defaultLanguageId + "' and ancestor-or-self::*[@name='" + field + "']]">
126 <#local localeSelector = "//dynamic-content[@language-id='" + languageId + "' and parent::*[@name='" + field + "']]">
127
128 <#local selector = saxReaderUtil.createXPath(localeSelector)>
129 <#local value = selector.selectSingleNode(xml)!>
130
131 <#if value?has_content && value.getText()?has_content>
132 <#return value.getText()>
133 </#if>
134
135 <#local selector = saxReaderUtil.createXPath(defaultSelector)>
136 <#local value = selector.selectSingleNode(xml)!>
137
138 <#if value?has_content && value.getText()?has_content>
139 <#return value.getText()>
140 </#if>
141
142 <#return "">
143</#function>
144
145<#function parseXml xpath xml>
146 <#local selector = saxReaderUtil.createXPath(xpath)>
147 <#local result = selector.selectSingleNode(xml)!>
148
149 <#if result?has_content>
150 <#return result.getStringValue()>
151 </#if>
152
153 <#return "">
154</#function>
155
156<#function isJson json>
157 <#local value = json?trim>
158 <#return value?has_content && value?starts_with("{") && value?ends_with("}")>
159</#function>