IFAD Asset Request Portlet

Agrégateur de contenus

Une erreur s'est produite lors du traitement du modèle.
For "." left-hand operand: Expected a hash, but this has evaluated to a string (wrapper: f.t.SimpleScalar):
==> titleNode  [in template "10154#10192#NEWS" at line 110, column 81]

----
FTL stack trace ("~" means nesting-related):
	- Failed at: ${titleNode.getStringValue()}  [in template "10154#10192#NEWS" at line 110, column 79]
----
1<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") 
2groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService") 
3classNameLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService") 
4assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") /> 
5 
6<#assign globalGroup = groupLocalService.getFriendlyURLGroup(companyId, "/global")> 
7<#assign destMacroClassId = classNameLocalService.getClassNameId("com.liferay.asset.kernel.model.AssetEntry")> 
8<#include "_TEMPLATE_CONTEXT_/${companyId}/${globalGroup.groupId}/${destMacroClassId}/ASSET_ENTRY_MACROS" /> 
9 
10<#assign article = journalArticleLocalService.getArticle(getterUtil.getLong(articleGroupId), .vars['reserved-article-id'].data)> 
11 
12<#assign asset = assetEntryLocalService.getEntry('com.liferay.journal.model.JournalArticle', article.resourcePrimKey) > 
13 
14<div class="abstract-article news"> 
15 
16    <div class="header-section"> 
17        <#if news_title?hasContent> 
18            <h1 class="title">${news_title.getData()}</h1> 
19        </#if> 
20 
21        <#if news_subtitle?hasContent> 
22            <h3 class="subtitle">${news_subtitle.getData()}</h3> 
23        </#if> 
24 
25        <#if subtitle?hasContent && subtitle.getData()?hasContent> 
26            <h3 class="text-center">${subtitle.getData()}</h3> 
27        </#if> 
28 
29        <#assign publicationDateFormatted = getFormattedDateForAbstractArticle(article, abstract_publication_date!"", locale, "dd MMMM yyyy")!"" /> 
30 
31        <#if publicationDateFormatted?hasContent> 
32            <small class="text-mitted article-date d-block mb-4">${publicationDateFormatted}</small> 
33        </#if> 
34    </div> 
35 
36    <div id="shareButtons" class="hidden-print"></div> 
37 
38    <#if news_image?hasContent> 
39        <img class="img-fluid" src="${news_image.getData()}"/> 
40        <small class="text-right d-block">${news_image.news_image_credits.data}</small> 
41 
42        <#if news_image.news_image_caption??> 
43            <p class="text-center text-muted">${news_image.news_image_caption.data}</p> 
44        </#if> 
45    </#if> 
46 
47    <#if .vars['section-divider-before-main-content']?hasContent && .vars['section-divider-before-main-content'].data> 
48        <hr/> 
49    </#if> 
50 
51    <div class="container main-content"> 
52        <div class="row"> 
53            <div class="col-lg-10 offset-lg-1 col-md-12"> 
54                ${main_content.getData()} 
55            </div> 
56        </div> 
57    </div> 
58 
59    <#assign linkedProfiles = getLinkedProfiles(asset) /> 
60 
61    <#if (linkedProfiles?size > 0)> 
62        <div class="container"> 
63            <div class="row"> 
64                <div class="col-lg-10 offset-lg-1 col-md-12"> 
65 
66                    <h2 class="title-underline mt-3 mb-3"><@liferay.language key="media-contact" /></h2> 
67 
68                    <div class="row"> 
69                        <#list linkedProfiles as linkedProfileAssetEntry> 
70                            <#assign linkedProfileUrl = getURLViewInContext(themeDisplay, linkedProfileAssetEntry, currentUrl!"")> 
71 
72                            <#assign relatedlinkedProfile = linkedProfileAssetEntry.getAssetRenderer().getArticle() /> 
73                            <#assign document = saxReaderUtil.read(relatedlinkedProfile.getContent()) /> 
74 
75                            <#assign titleNode = document.selectSingleNode( 
76                            "/root/dynamic-element[@name='title']/dynamic-content[@language-id='" + locale + "']/text()")!"" /> 
77                            <#assign emailNode = document.selectSingleNode( 
78                            "//dynamic-element[@name='email']/dynamic-content/text()")!"" /> 
79 
80                            <#assign bioNode = document.selectSingleNode( 
81                            "/root/dynamic-element[@name='bio']/dynamic-content[@language-id='" + locale + "']/text()")!"" /> 
82 
83                            <#assign hasBio = false /> 
84 
85                            <#if bioNode?hasContent> 
86                                <#assign bioNodeValue = bioNode.getStringValue() /> 
87                                <#if (bioNodeValue?? && bioNodeValue?hasContent)> 
88                                    <#assign hasBio = true> 
89                                </#if> 
90                            </#if> 
91 
92                            <div class="col-lg-4 col-md-6 col-sm-12"> 
93                                <div> 
94                                    <div class="expert-photo-container"> 
95                                        <a href="${hasBio?then(linkedProfileUrl + "?p_l_back_url=${themeDisplay.getURLCurrent()}", "")}" 
96                                           style="${hasBio?then("", "cursor: default")}" 
97                                           onclick="${hasBio?then("", "return false;")}"> 
98 
99                                            <div class="expert-photo"> 
100                                                <img class="expert-image" src="${getProfileCloseupUrl(document)}" 
101                                                     alt="Image of ${linkedProfileAssetEntry.getTitle(locale)}"/> 
102                                            </div> 
103                                        </a> 
104 
105                                        <a href="${hasBio?then(linkedProfileUrl + "?p_l_back_url=${themeDisplay.getURLCurrent()}", "")}" 
106                                           style="${hasBio?then("", "cursor: default")}" 
107                                           onclick="${hasBio?then("", "return false;")}"> 
108                                            <div class="expert-photo-label"> 
109                                                <p class="expert-photo-name">${linkedProfileAssetEntry.getTitle(locale)}</p> 
110                                                <p class="expert-photo-title">${titleNode.getStringValue()}</p> 
111 
112                                                <#if emailNode?hasContent> 
113                                                    <p class="expert-photo-email"> 
114                                                        <a href="mailto:${emailNode.getStringValue()}">${emailNode.getStringValue()}</a> 
115                                                    </p> 
116                                                </#if> 
117                                            </div> 
118                                        </a> 
119                                    </div> 
120                                </div> 
121                            </div> 
122                        </#list> 
123                    </div> 
124                </div> 
125            </div> 
126        </div> 
127    </#if> 
128 
129    <#if related_documents_labelFieldSet.related_documents_labelFieldSetFieldSet.related_documents_file?hasContent && 
130    related_documents_labelFieldSet.related_documents_labelFieldSetFieldSet.related_documents_file.getData()?hasContent> 
131        <div class="container"> 
132            <div class="row"> 
133                <div class="col-lg-10 offset-lg-1 col-md-12"> 
134                    <h2 class="title-underline mt-3 mb-3"><@liferay.language key="related-documents" /></h2> 
135 
136                    <#if related_documents_labelFieldSet?hasContent && (related_documents_labelFieldSet.getSiblings()?size > 0)> 
137                        <#list related_documents_labelFieldSet.getSiblings() as cur_related_documents_label> 
138                            <div class="row border-bottom pb-3 mb-3"> 
139                                <div class="col-lg-1 col-xs-2"> 
140                                    <img class="img-fluid" 
141                                         src="/o/ifad-global-theme/images/placeholders/document-orange-icon.png"> 
142                                </div> 
143 
144                                <div class="col-xs-10 col-lg-11"> 
145                                    <a class="text-dark" target="_blank" 
146                                       href="${cur_related_documents_label.related_documents_labelFieldSetFieldSet.related_documents_file.getData()}"> 
147                                        <strong>${cur_related_documents_label.related_documents_label.getData()}</strong> 
148                                    </a> 
149                                </div> 
150                            </div> 
151                        </#list> 
152                    <#else> 
153                        <p><@liferay.language key="err-msg-no-related-documents-found" /></p> 
154                    </#if> 
155                </div> 
156            </div> 
157        </div> 
158    </#if> 
159 
160</div>