An error occurred while processing the template.
Java method "it.dvel.rcf.profile.integration.model.impl.ProductImpl.getLineTitle(Locale)" threw an exception when invoked on it.dvel.rcf.profile.integration.model.impl.ProductImpl object "{uuid=1809d31a-20b6-a610-1912-a125c3abb56f, productId=626, companyId=20101, groupId=20128, userId=20130, userName=Eighty Twenty, createDate=Tue Nov 02 15:30:57 GMT 2021, modifiedDate=Tue Oct 08 16:45:26 GMT 2024, code=STP0284, productTypeName=Passive/PA Speakers, name=HD 21EN, nameSearchable=HD21EN, urlTitle=hd-21en, subtitle=<?xml version='1.0' encoding='UTF-8'?><root available-locales=\"en_US,it_IT,es_ES,fr_FR,de_DE\" default-locale=\"en_US\"><Subtitle language-id=\"en_US\">PLASTIC HORN SPEAKER</Subtitle><Subtitle language-id=\"de_DE\">HORNLAUTSPRECHER AUS KUNSTSTOFF</Subtitle><Subtitle language-id=\"es_ES\">ALTAVOZ CON TROMPETA DE PLÁSTICO</Subtitle><Subtitle language-id=\"fr_FR\">ENCEINTE À PAVILLON EN PLASTIQUE</Subtitle><Subtitle language-id=\"it_IT\">DIFFUSORE A TROMBA IN PLASTICA</Subtitle></root>, description=<?xml version='1.0' encoding='UTF-8'?><root available-locales=\"en_US,it_IT,es_ES,fr_FR,de_DE\" default-locale=\"en_US\"><Description language-id=\"en_US\">HD 21EN is a plastic horn speaker suitable for broadcasting alarm messages thanks to the highly intelligible sound reproduction and its environmenal resistance. The terminal connection blocks, for input and output flameproof cables, are made of ceramic material. A thermal fuse protects the integrity of the line in case of heat affecting the speaker. It can be easily aimed towards any direction through the adjustable wall-mount bracket, and thanks to its IP66 protection grade it can be installed both indoor and outdoor.</Description><Description language-id=\"de_DE\">Der HD 21EN ist ein Hornlautsprecher aus Kunststoff, der sich dank seiner guten Sprachverständlichkeit und hohen Witterungs- und Temperaturbeständigkeit zur Wiedergabe von Durchsagen und Alarmmeldungen eignet. Die Anschlussleisten für feuerfeste Ein- und Ausgangskabel sind aus keramischem Material gefertigt. Eine Thermosicherung schützt die angeschlossenen Kabel und Geräte, falls der Lautsprecher hohen Temperaturen ausgesetzt ist. Der HD 31EN lässt sich mit der justierbaren Wandhalterung einfach ausrichten und eignet sich dank Schutzgrad IP66 sowohl für den Einsatz in Innenräumen als auch in Außenbereichen.</Description><Description language-id=\"es_ES\">El modelo HD 21EN es un altavoz de trompeta ideal para la reproducción de mensajes de alarma gracias a su reproducción altamente inteligible del sonido y resistencia a la intemperie. Los bloques de los terminales de conexión para los cables de entrada y salida ignífugos están hechos de cerámica. Un fusible térmico protege la integridad de la línea en caso de que el calor afecte al altavoz. Se puede orientar en cualquier dirección gracias a su soporte de pared ajustable, y su protección de grado IP66 permite su instalación tanto en interiores como en exteriores.</Description><Description language-id=\"fr_FR\">La HD 21EN est une enceinte à pavillon en plastique qui convient particulièrement à la diffusion de messages d’alarme grâce à sa reproduction sonore d’une grande intelligibilité et à sa résistance aux conditions environnementales. Les borniers, destinés aux câbles d’entrée et de sortie résistants au feu, sont en céramique. Un fusible thermique protège l’intégrité de la ligne dans le cas où la chaleur affecte l’enceinte. Elle peut aisément être orientée vers n’importe quelle direction avec son support mural ajustable. Grâce à son indice de protection IP66 elle peut être installée en intérieur comme en plein air.</Description><Description language-id=\"it_IT\">HD 21EN è un diffusore a tromba in plastica, particolarmente indicato per la diffusione di messaggi di allarme, grazie alla elevata intellegibilità di riproduzione della voce e alla resistenza alle condizioni ambientali. Le morsettiere di collegamento per i cavi antifiamma di ingresso e uscita sono in materiale ceramico. Un fusibile termico protegge l’integrità della linea audio in caso di calore elevato. Si può facilmente orientare grazie alla staffa di montaggio a parete regolabile, ed è adatto all'installazione sia indoor che outdoor grazie al grado di protezione IP66.</Description></root>, type=PRODOTTO, accessoryTypeCode=, publication=RCF, ratio=70, readMoreURL=, youTubeVideos=, youTubeURL=, active=true}"; see cause exception in the Java stack trace.

----
FTL stack trace ("~" means nesting-related):
	- Failed at: ${relatedProduct.getLineTitle(locale)}  [in template "20101#20128#819037" at line 171, column 73]
----
1<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")> 
2<#assign journalArticleId = .vars['reserved-article-id'].data> 
3<#assign journalArticleResourceLocalServiceUtil = staticUtil["com.liferay.journal.service.JournalArticleResourceLocalServiceUtil"]> 
4<#assign assetCategoryLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil"]> 
5<#assign articleResourcePK = journalArticleResourceLocalServiceUtil.getArticleResourcePrimKey(groupId, journalArticleId)/> 
6<#assign categoryList=assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",articleResourcePK) > 
7<#assign LayoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")> 
8<#assign parentLayout = LayoutLocalService.getLayout(layout.getAncestorPlid()) /> 
9<#assign parentLayoutUrl = parentLayout.getFriendlyURL(locale) /> 
10<#assign journalArticle = journalArticleLocalService.getLatestArticle(scopeGroupId, journalArticleId) /> 
11<#assign relatedArticles = rcfTemplateHelper.getRelatedAssets(journalArticle, 'com.liferay.journal.model.JournalArticle', 'News Liferay 6.2') /> 
12<#assign relatedProducts = rcfTemplateHelper.getRelatedAssets(journalArticle, 'it.dvel.rcf.profile.integration.model.Product', '') /> 
13 
14<div class="news-detail"> 
15	<div class="bg-white pb-5"> 
16		<div class="py-4 px-2 bg-lighter mb-7 to-back"> 
17			<div class="container-fluid container-fluid-max-xl"> 
18				<a href="javascript: window.history.back();" class="d-flex align-items-center"> 
19					<i class="icon-arrow-right-custom"></i> 
20					<span class="pl-3"><@liferay.language key="back" /></span> 
21				</a> 
22			</div> 
23		</div> 
24		<div class="container-fluid container-fluid-max-xl px-4"> 
25			<div class="mb-2"> 
26				<span class="font-weight-medium category mr-3"> 
27					<#list categoryList as category> 
28						<span class="pr-3">${category.getName()}</span> 
29					</#list> 
30				</span> 
31				<span class="date"> 
32					<#setting time_zone = languageUtil.get(locale, "template-timezone") />  
33					<#assign originalLocale = locale />  
34					<#setting locale = localeUtil.getDefault() /> 
35					<#assign displaydate = .vars['reserved-article-display-date'].data> 
36					<#assign displaydate = displaydate?datetime("EEE, d MMM yyyy HH:mm:ss Z")> 
37					<#setting locale = originalLocale />  
38					${displaydate?string["dd MMM yyyy"]} 
39				</span> 
40			</div> 
41			 
42			<#if (FieldsGroup52652497.Text78515013.getData())??> 
43				<h1 class="mb-4 font-family-narrow-normal px-0">${FieldsGroup52652497.Text78515013.getData()}</h1> 
44			</#if> 
45			 
46			<#if FieldsGroup52652497.Upload45315688.getSiblings()?has_content> 
47				<div class="mb-6"> 
48					<div class="owl-carousel owl-theme" id="owl-carousel-hp"> 
49						<#list FieldsGroup52652497.Upload45315688.getSiblings() as cur_FieldsGroup52652497_Upload45315688> 
50							<div class="slide d-flex align-items-center justify-content-center" style="background-image:url(${cur_FieldsGroup52652497_Upload45315688.getData()})"> 
51							</div> 
52						</#list> 
53					</div> 
54				</div> 
55				<div class="d-none"> 
56					<#list FieldsGroup52652497.Upload45315688.getSiblings() as cur_FieldsGroup52652497_Upload45315688> 
57							<img src="${cur_FieldsGroup52652497_Upload45315688.getData()}" /> 
58						</#list> 
59				</div> 
60			</#if> 
61			 
62			 
63			<div class="d-md-flex align-items-center justify-content-between mb-md-9 mb-5"> 
64				<div class="social h6 mb-0 py-2 pl-2 mb-3 mb-md-0"> 
65					<#assign currentUrl = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent() /> 
66					<a href="http://www.linkedin.com/shareArticle?mini=true&url=${currentUrl}&title=${FieldsGroup52652497.Text78515013.getData()}" class="px-2" target="_blank"> 
67						<i class="icon-linkedin-custom px-1"></i> 
68					</a> 
69					<a href="https://www.facebook.com/sharer/sharer.php?u=${currentUrl}" class="px-2" target="_blank"> 
70						<i class="icon-facebook-custom px-1"></i> 
71					</a> 
72					<a href="https://twitter.com/intent/tweet?url=${currentUrl}" class="px-2" target="_blank"> 
73						<i class="icon-twitter-custom px-1"></i> 
74					</a> 
75				</div> 
76			</div> 
77		</div> 
78		<div class="container-fluid container-fluid-max-xl px-md-7 px-lg-9 px-4"> 
79			<#if FieldsGroup52652497.FieldsGroup95339333.getSiblings()?has_content> 
80				<#list FieldsGroup52652497.FieldsGroup95339333.getSiblings() as node> 
81					<div class="mb-md-7 mb-4"> 
82						<#if (FieldsGroup52652497.FieldsGroup95339333.Text94801507.getData())??> 
83							<h6 class="mb-md-6 mb-4">${node.Text94801507.getData()}</h6> 
84						</#if> 
85						<#if (node.RichText63313118.getData())??> 
86							<div class="mb-md-7 mb-4 paragraph font-family-narrow-normal"> 
87								${node.RichText63313118.getData()} 
88							</div> 
89						</#if> 
90						<#if (node.RichText45781737.getData())??> 
91							<div class="row mb-md-7 mb-4"> 
92								<#if (node.Image42436245.getData())?? && node.Image42436245.getData() != ""> 
93									<div class="col-md-8 mb-4 mb-md-0"> 
94										<img alt="${node.Image42436245.getAttribute("alt")}" data-fileentryid="${node.Image42436245.getAttribute("fileEntryId")}" src="${node.Image42436245.getData()}" class="w-100"/> 
95									</div> 
96									<#if (node.RichText45781737.getData())?? && node.RichText45781737.getData() != ""> 
97										<div class="col-md-4 font-family-narrow-normal"> 
98											${node.RichText45781737.getData()} 
99										</div> 
100									</#if> 
101								<#else> 
102									<#if (node.RichText45781737.getData())?? && node.RichText45781737.getData() != ""> 
103										<div class="col-md-12 font-family-narrow-normal"> 
104											${node.RichText45781737.getData()} 
105										</div> 
106									</#if> 
107								</#if> 
108							</div> 
109						</#if> 
110						<#if (node.Text34883111.getData())?? && node.Text34883111.getData() != ""> 
111							<div class="blockquote font-family-narrow-normal position-relative mb-7"> 
112								${node.Text34883111.getData()} 
113							</div> 
114						</#if> 
115					</div> 
116				</#list> 
117			</#if> 
118			<#if FieldsGroup52652497.FieldsGroup17972647.getData() !=''> 
119				<div class="mb-md-7 mb-4"> 
120					<#list FieldsGroup52652497.FieldsGroup17972647.getSiblings() as node> 
121						<div class="mb-2"> 
122							<#if (node.Text21652173.getData())??> 
123								<a target="_blank" href="${node.Text21652173.getData()}" class="d-flex align-items-center font-family-narrow-normal"> 
124									<i class="icon-download-custom mr-3 h5 font-weight-normal mb-0"></i> 
125									<#if node.Text31160069.getData() !=''> 
126										${node.Text31160069.getData()} 
127									<#else> 
128										<@liferay.language key="download" /> 
129									</#if> 
130								</a> 
131							</#if> 
132						</div> 
133					</#list> 
134				</div> 
135			</#if>	 
136		</div> 
137	</div> 
138	 
139	<#if relatedProducts?has_content> 
140	<div class="bg-lighter"> 
141	<div class="container-fluid container-fluid-max-xl pt-7 pb-8 px-4"> 
142			<h5 class="font-weight-normal mb-5 text-center secondary"><@liferay.language key="related-products" /></h5> 
143			<div class="owl-carousel owl-theme" id="owl-carousel-rel-prod"> 
144				<#list relatedProducts as relatedProduct> 
145				<#assign productFeatures = relatedProduct.getProductFeatures(true) /> 
146				<#assign productBadges2 = relatedProduct.getBadges(2) /> 
147				<#assign productBadges1 = relatedProduct.getBadges(1) /> 
148				 
149					<div class="related-news related-prod mb-4 mb-md-0 h-100"> 
150						<div class="bg-white h-100 p-5 position-relative rounded-sm d-flex flex-column"> 
151							<#if productBadges2?has_content> 
152								<#assign productStatusStyle = productBadges2[0].getBackColor() /> 
153								<div class="status px-4 mb-5 pt-3" style="border-color:${productStatusStyle}!important"> 
154									<#list productBadges2 as productBadge2> 
155										<div class="border-0 badge" style="color: ${productBadge2.getBackColor()}">${productBadge2.getCode()}</div> 
156									</#list> 
157								</div> 
158							</#if> 
159							<div class="image d-flex align-items-end mb-5">							 
160								<a data-senna-off="true" href="${portal.getLayoutFullURL(relatedProduct.getFirstAvailableLayout(rcfCurrentPublication), themeDisplay)}" class="d-flex align-items-center justify-content-center"> 
161									<img src="${relatedProduct.getFirstAvailableCoverImageURL(rcfCurrentPublication, themeDisplay)}" class="w-100" /> 
162								</a> 
163							</div> 
164							<div class="status normal mb-4 pt-3"> 
165									<#list productBadges1 as productBadge1> 
166										<div class="border-0 badge" style="background-color: ${productBadge1.getBackColor()}; color: ${productBadge1.getFontColor()};">${productBadge1.getCode()}</div> 
167									</#list> 
168							</div> 
169							<div class="mb-4"> 
170								<div class="meta font-weight-medium underline mb-3"> 
171									${relatedProduct.getLineTitle(locale)} 
172								</div> 
173								<h4 class="font-weight-medium mb-3 text-uppercase">${relatedProduct.name}</h4> 
174								<p class="mb-3 font-weight-medium text-uppercase">${relatedProduct.getSubtitle(locale)}</p> 
175								<small class="mb-3 font-family-narrow-normal d-block"> 
176									<ul class="mb-5 font-family-narrow-normal px-0"> 
177										<#list productFeatures as productFeature> 
178											<li>${productFeature.getTitle(locale)} 
179										</#list> 
180									</ul> 
181								</small> 
182							</div> 
183							<div class="mt-auto"> 
184								<#if relatedProduct.hasLayout(rcfCurrentPublication)> 
185									<a data-senna-off="true" href="${portal.getLayoutFullURL(relatedProduct.getFirstAvailableLayout(rcfCurrentPublication), themeDisplay)}" class="btn btn-link-normal"> 
186										<@liferay.language key="learn-more" /> 
187									</a> 
188								</#if> 
189							</div> 
190							</div> 
191					</div> 
192				</#list> 
193			</div> 
194		</div> 
195		</div> 
196		</#if> 
197 
198	<#if relatedArticles?has_content> 
199		<div class="container-fluid container-fluid-max-xl pt-8 pb-4 px-4"> 
200			<h5 class="font-weight-normal mb-5 text-center"><@liferay.language key="other" /> <@liferay.language key="news" /></h5> 
201			<div class="row pt-7"> 
202				<#list relatedArticles as relatedArticle> 
203						<#assign categoryListEntry=assetCategoryLocalServiceUtil.getCategories("com.liferay.journal.model.JournalArticle",relatedArticle.resourcePrimKey) > 
204						<#assign imageURL = rcfTemplateHelper.getJournalArticleField(relatedArticle, locale, 'FieldsGroup52652497.Upload45315688', 'url') /> 
205						<#assign title = rcfTemplateHelper.getJournalArticleField(relatedArticle, locale, 'FieldsGroup52652497.Text78515013') /> 
206						<#assign entryTitle = relatedArticle.getTitle(locale) /> 
207						<#if validator.isNull(title)>  
208							<#assign title = entryTitle />  
209						</#if>  
210						<#assign summary = relatedArticle.getDescription(locale) /> 
211						<#assign text = rcfTemplateHelper.getJournalArticleField(relatedArticle, locale, 'FieldsGroup52652497.FieldsGroup95339333.RichText63313118') /> 
212						<#if validator.isNull(summary)>  
213							<#assign summary = text />  
214						</#if>  
215						<div class="col-md-6 related-news mb-5"> 
216							<div class="bg-white h-100"> 
217								<div class="image bg-secondary" style="background-image:url(${imageURL})"> 
218								</div> 
219								<div class="p-5 pb-8"> 
220									<div class="meta"> 
221												<span class="font-weight-medium pr-3 text-uppercase"> 
222													<#list categoryListEntry as category> 
223														${category.getName()} 
224													</#list> 
225												</span> 
226												<span> 
227														${relatedArticle.createDate?string["dd MMM yyyy"]} 
228												</span> 
229									</div> 
230									<h6 class="font-weight-medium mb-3"> 
231										${title} 
232									</h6> 
233									<small class="mb-5 font-family-narrow-normal d-block">${stringUtil.shorten(htmlUtil.stripHtml(summary), 250)}</small> 
234									<a href="/-/${relatedArticle.urlTitle}" class="btn btn-link-normal"> 
235										<@liferay.language key="learn-more" /> 
236									</a> 
237								</div> 
238							</div> 
239						</div> 
240				</#list> 
241			</div> 
242		</div> 
243	</#if> 
244</div> 
245<script> 
246	var owl = $("#owl-carousel-hp").owlCarousel({ 
247		loop:true, 
248    nav:false, 
249		dots:true, 
250		items:1 
251	}); 
252	$("#owl-carousel-rel-prod").owlCarousel({ 
253	    margin:20, 
254	    nav:false, 
255			dots:true, 
256			items:3, 
257			responsive : { 
258				0 : { 
259						items:1 
260				}, 
261				768 : { 
262						items:2 
263				}, 
264				1000 : { 
265						items:3 
266
267
268	}); 
269</script> 
270<style> 
271 
272	@media only screen and (min-width: 600px) and (max-width: 768px){ 
273		.news-detail #owl-carousel-hp .slide { 
274			height:400px 
275
276
277	@media only screen and (max-width: 600px){ 
278		.news-detail #owl-carousel-hp .slide { 
279			height:200px 
280
281
282</style> 
Pulsante Torna su con Immagine
...
Torna su
Follow us on
Icone allineate
Linkedin Facebook X Youtube Instagram Spotufy