Publicador de contenidos

Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> articleName  [in template "20115#20151#119416624" at line 198, column 60]

----
Tip: If the failing expression is known to be 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: ${articleName}  [in template "20115#20151#119416624" at line 198, column 58]
----
1<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
2<!-- necesario para montar la url para realizar la donacion --> 
3<#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")/> 
4<#assign group = groupLocalService.getGroup(groupId)/> 
5<#assign groupFriendlyURL = group.getFriendlyURL() /> 
6<#assign friendlyURL = group.getPathFriendlyURL(false,themeDisplay) + groupFriendlyURL /> 
7 
8<#attempt> 
9	<#assign assetEntry = renderRequest.getAttribute('LIFERAY_SHARED_LAYOUT_ASSET_ENTRY') /> 
10 
11	<#assign classPK = assetEntry.classPK /> 
12 
13	<#assign article = journalArticleLocalService.fetchLatestArticle(classPK) /> 
14 
15	<#assign articleId = journalArticleLocalService.fetchLatestArticle(classPK).articleId /> 
16 
17	<#assign docXml = saxReaderUtil.read(article.getContent()) /> 
18 
19	<#if docXml?has_content> 
20		<#assign idExterno = docXml .valueOf("//dynamic-element[@name='idCampana']/dynamic-content/text()") /> 
21		<#assign articleName = htmlUtil.escape(article.getTitle(locale))/> 
22 
23		<div class="evr-donation" style="margin-top: 1.875rem;"> 
24			<div class="evr-donation__module"> 
25 
26				<div id="evr-donation__when" class="evr-donation__when clearfix"> 
27					<button class="btn btn-primary btn-normal selected" id="punctual"> <@liferay.language key="once-text"/> </button> 
28					<button class="btn btn-primary btn-normal btn-bordered-primary" id="periodic"> <@liferay.language key="monthly-text"/> </button> 
29				</div> 
30				<div class="evr-donation__quantity-area"> 
31					<div class="evr-donation__quantity-area__title"> 
32						<@liferay.language key="elige-cantidad-text"/> 
33					</div> 
34					<div class="evr-donation__quantity-area__actions"> 
35						<div id="euros" class="evr-donation__quantity-area__euros"> 
36							<#assign primerNumero = docXml .valueOf("//dynamic-element[@name='cantidadPrimera']/dynamic-content/text()") /> 
37							<a class="selected" id="primerNumero" data-amount="${primerNumero}">${primerNumero}€</a> 
38 
39							<#assign segundoNumero = docXml .valueOf("//dynamic-element[@name='cantidadSegunda']/dynamic-content/text()") /> 
40							<a id="segundoNumero"  data-amount="${segundoNumero}">${segundoNumero}€</a> 
41 
42							<#assign tercerNumero = docXml .valueOf("//dynamic-element[@name='cantidadTercera']/dynamic-content/text()") /> 
43							<a id="tercerNumero" data-amount="${tercerNumero}">${tercerNumero}€</a> 
44 
45							<!-- input de otra cantidad --> 
46							<div class="form-group input-text-wrapper evr-donation__quantity-area__other"> 
47								<input class="field form-control" id="otraCantidad" style="font-size:1.775rem; padding-right:0rem;" autocomplete="off" value="" aria-invalid="false" type="number" min="0" placeholder= <@liferay.language key="otra-cantidad-text"/> > 
48							</div> 
49							<div role="alert" class="required" id="errorAmount" 
50								 style="display:none; text-align:center; color:red;">La donación debe ser mayor que 0 
51							</div> 
52						</div> 
53						<button id="colaborarButton" class="btn btn-primary w100" 
54								onclick="colaborar()"><@liferay.language key="colaborar-link"/></button> 
55					</div> 
56				</div> 
57 
58			</div> 
59		</div> 
60 
61	</#if> 
62	<#recover> 
63</#attempt> 
64 
65 
66<script> 
67 
68	var amount = 0; 
69	var periodicity = 'punctual'; 
70	var url; 
71 
72	function when(){ 
73		periodicity = $("#evr-donation__when").find(".btn.selected").attr("id"); 
74		$("#evr-donation__when").find(".btn").click(function(){ 
75			$("#evr-donation__when").find(".btn").each(function(){ 
76				$(this).addClass("btn-bordered-primary"); 
77				$(this).removeClass("selected"); 
78			}); 
79			$(this).removeClass("btn-bordered-primary"); 
80			$(this).addClass("selected"); 
81			periodicity = $(this).attr("id"); 
82			updateDataLayer(amount, periodicity); 
83		}); 
84
85 
86	function howmuch(){ 
87		amount = $("#euros").find("a.selected").attr("data-amount"); 
88		$("#euros").find("a").click(function(){ 
89			$("#euros").find("a").each(function(){ 
90				$(this).removeClass("selected"); 
91			}); 
92			$(this).addClass("selected"); 
93			$("#otraCantidad").removeClass("hasval"); 
94			$("#otraCantidad").val(''); 
95			$("#otraCantidad").parent().removeClass("has-error"); 
96			$("#otraCantidad").removeClass("error-field"); 
97			$("#errorAmount").hide(); 
98			$("#colaborarButton").prop('disabled', false); 
99			amount = $(this).attr("data-amount"); 
100			updateDataLayer(amount, periodicity); 
101		}); 
102
103 
104	function other(){ 
105		$("#otraCantidad").removeClass("hasval"); 
106		$("#otraCantidad").val(''); 
107 
108		$("#otraCantidad").on("cut copy paste",function(e){ 
109			return false; 
110		}); 
111		$("#otraCantidad").keypress(function(e){ 
112			if(isNaN(String.fromCharCode(e.charCode))){ 
113				return false; 
114
115		}); 
116 
117		if($("#otraCantidad").val() !=""){ 
118			$("#otraCantidad").addClass("hasval"); 
119
120		else{ 
121			$("#otraCantidad").removeClass("hasval"); 
122
123 
124		$("#otraCantidad").change(function () { 
125			if ($(this).val() != "") { 
126				$(this).addClass("hasval"); 
127				$("#euros").find("a").each(function () { 
128					$(this).removeClass("selected"); 
129				}); 
130				const regexPositiveDonation = /^[1-9]\d*$/; 
131				const isValid = regexPositiveDonation.test($(this).val()); 
132				$("#otraCantidad").parent().toggleClass("has-error", !isValid); 
133				$("#otraCantidad").toggleClass("error-field", !isValid); 
134				$("#colaborarButton").prop('disabled', !isValid); 
135				$("#errorAmount").toggle(!isValid); 
136				} else { 
137					$(this).removeClass("hasval"); 
138
139			amount = $(this).val(); 
140			updateDataLayer(amount, periodicity); 
141		}); 
142 
143		$("#otraCantidad").click(function(){ 
144			$("#euros").find("a").each(function(){ 
145				$(this).removeClass("selected"); 
146			}); 
147			if($(this).val() !=""){ 
148				$(this).addClass("hasval"); 
149
150			else{ 
151				$(this).removeClass("hasval"); 
152
153			amount = $(this).val(); 
154			updateDataLayer(amount, periodicity); 
155		}); 
156
157 
158	function colaborar() { 
159		var articleIdCheck = "noArticle"; 
160		updateDataLayer(amount, periodicity); 
161		<#if articleId?has_content && articleId!=""> 
162		articleIdCheck = ${articleId}; 
163		</#if> 
164 
165		encryptParam(url, periodicity, amount, articleIdCheck); 
166
167 
168	function encryptParam(url, periodicity, amount, articleId){ 
169		var endpoint = "/o/utils-api/util/encrypt/"+periodicity+"/"+amount+"/"+articleId; 
170		$.ajax({ 
171			url: endpoint, 
172			type: 'GET', 
173			cache: false, 
174			dataType: "json" 
175		}).done(function (data, textStatus, jsqXHR) { 
176			var url = "${friendlyURL}/"+"donacion"+"?periodicity="+data.periodicityEncrypted + "&money=" + data.amountEncrypted + "&articleId=" + data.articleIdEncrypted; 
177			url = url.replace(/ /g, ""); 
178			location.href = url; 
179		}).fail(function (jqXHR, textStatus, errorThrown) { 
180			console.error(errorThrown); 
181		}); 
182
183 
184	otraCantidad.oninput = function () { 
185		if (this.value.length > 5) { 
186			this.value = this.value.slice(0,5); 
187
188
189 
190	function updateDataLayer(price,variant){ 
191		var data = { 
192			'event': 'productDetail', 
193			'ecommerce': { 
194				'detail': { 
195					'actionField': 
196							{'list': 'Haz un donativo'}, 
197					'products': [{ 
198						'name': '${articleName}', // articleName 
199						'id': '${articleId}', // articleId 
200						'price': price, // price 
201						'brand': 'Cruz Roja', // brand 
202						'variant': variant // periodicity 
203					}] 
204
205
206		}; 
207		if (dataLayer.length > 0) { 
208			for (let i = 0; i < dataLayer.length; i++) { 
209				if (typeof dataLayer[i].ecommerce !== 'undefined') { 
210					dataLayer.splice(i, 1); 
211
212
213
214		dataLayer.push(data); 
215
216 
217	$(document).ready(function () { 
218		when(); 
219		howmuch(); 
220		other(); 
221		updateDataLayer(amount, periodicity); 
222	}); 
223 
224</script> 
225 
226<style> 
227	/* Chrome, Safari, Edge, Opera */ 
228	input::-webkit-outer-spin-button, 
229	input::-webkit-inner-spin-button { 
230		-webkit-appearance: none; 
231		margin: 0; 
232
233 
234	/* Firefox */ 
235	input[type=number] { 
236		-moz-appearance: textfield; 
237
238</style> 

Publicador de contenidos

Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> articleName  [in template "20115#20151#119416624" at line 198, column 60]

----
Tip: If the failing expression is known to be 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: ${articleName}  [in template "20115#20151#119416624" at line 198, column 58]
----
1<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") /> 
2<!-- necesario para montar la url para realizar la donacion --> 
3<#assign groupLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.GroupLocalService")/> 
4<#assign group = groupLocalService.getGroup(groupId)/> 
5<#assign groupFriendlyURL = group.getFriendlyURL() /> 
6<#assign friendlyURL = group.getPathFriendlyURL(false,themeDisplay) + groupFriendlyURL /> 
7 
8<#attempt> 
9	<#assign assetEntry = renderRequest.getAttribute('LIFERAY_SHARED_LAYOUT_ASSET_ENTRY') /> 
10 
11	<#assign classPK = assetEntry.classPK /> 
12 
13	<#assign article = journalArticleLocalService.fetchLatestArticle(classPK) /> 
14 
15	<#assign articleId = journalArticleLocalService.fetchLatestArticle(classPK).articleId /> 
16 
17	<#assign docXml = saxReaderUtil.read(article.getContent()) /> 
18 
19	<#if docXml?has_content> 
20		<#assign idExterno = docXml .valueOf("//dynamic-element[@name='idCampana']/dynamic-content/text()") /> 
21		<#assign articleName = htmlUtil.escape(article.getTitle(locale))/> 
22 
23		<div class="evr-donation" style="margin-top: 1.875rem;"> 
24			<div class="evr-donation__module"> 
25 
26				<div id="evr-donation__when" class="evr-donation__when clearfix"> 
27					<button class="btn btn-primary btn-normal selected" id="punctual"> <@liferay.language key="once-text"/> </button> 
28					<button class="btn btn-primary btn-normal btn-bordered-primary" id="periodic"> <@liferay.language key="monthly-text"/> </button> 
29				</div> 
30				<div class="evr-donation__quantity-area"> 
31					<div class="evr-donation__quantity-area__title"> 
32						<@liferay.language key="elige-cantidad-text"/> 
33					</div> 
34					<div class="evr-donation__quantity-area__actions"> 
35						<div id="euros" class="evr-donation__quantity-area__euros"> 
36							<#assign primerNumero = docXml .valueOf("//dynamic-element[@name='cantidadPrimera']/dynamic-content/text()") /> 
37							<a class="selected" id="primerNumero" data-amount="${primerNumero}">${primerNumero}€</a> 
38 
39							<#assign segundoNumero = docXml .valueOf("//dynamic-element[@name='cantidadSegunda']/dynamic-content/text()") /> 
40							<a id="segundoNumero"  data-amount="${segundoNumero}">${segundoNumero}€</a> 
41 
42							<#assign tercerNumero = docXml .valueOf("//dynamic-element[@name='cantidadTercera']/dynamic-content/text()") /> 
43							<a id="tercerNumero" data-amount="${tercerNumero}">${tercerNumero}€</a> 
44 
45							<!-- input de otra cantidad --> 
46							<div class="form-group input-text-wrapper evr-donation__quantity-area__other"> 
47								<input class="field form-control" id="otraCantidad" style="font-size:1.775rem; padding-right:0rem;" autocomplete="off" value="" aria-invalid="false" type="number" min="0" placeholder= <@liferay.language key="otra-cantidad-text"/> > 
48							</div> 
49							<div role="alert" class="required" id="errorAmount" 
50								 style="display:none; text-align:center; color:red;">La donación debe ser mayor que 0 
51							</div> 
52						</div> 
53						<button id="colaborarButton" class="btn btn-primary w100" 
54								onclick="colaborar()"><@liferay.language key="colaborar-link"/></button> 
55					</div> 
56				</div> 
57 
58			</div> 
59		</div> 
60 
61	</#if> 
62	<#recover> 
63</#attempt> 
64 
65 
66<script> 
67 
68	var amount = 0; 
69	var periodicity = 'punctual'; 
70	var url; 
71 
72	function when(){ 
73		periodicity = $("#evr-donation__when").find(".btn.selected").attr("id"); 
74		$("#evr-donation__when").find(".btn").click(function(){ 
75			$("#evr-donation__when").find(".btn").each(function(){ 
76				$(this).addClass("btn-bordered-primary"); 
77				$(this).removeClass("selected"); 
78			}); 
79			$(this).removeClass("btn-bordered-primary"); 
80			$(this).addClass("selected"); 
81			periodicity = $(this).attr("id"); 
82			updateDataLayer(amount, periodicity); 
83		}); 
84
85 
86	function howmuch(){ 
87		amount = $("#euros").find("a.selected").attr("data-amount"); 
88		$("#euros").find("a").click(function(){ 
89			$("#euros").find("a").each(function(){ 
90				$(this).removeClass("selected"); 
91			}); 
92			$(this).addClass("selected"); 
93			$("#otraCantidad").removeClass("hasval"); 
94			$("#otraCantidad").val(''); 
95			$("#otraCantidad").parent().removeClass("has-error"); 
96			$("#otraCantidad").removeClass("error-field"); 
97			$("#errorAmount").hide(); 
98			$("#colaborarButton").prop('disabled', false); 
99			amount = $(this).attr("data-amount"); 
100			updateDataLayer(amount, periodicity); 
101		}); 
102
103 
104	function other(){ 
105		$("#otraCantidad").removeClass("hasval"); 
106		$("#otraCantidad").val(''); 
107 
108		$("#otraCantidad").on("cut copy paste",function(e){ 
109			return false; 
110		}); 
111		$("#otraCantidad").keypress(function(e){ 
112			if(isNaN(String.fromCharCode(e.charCode))){ 
113				return false; 
114
115		}); 
116 
117		if($("#otraCantidad").val() !=""){ 
118			$("#otraCantidad").addClass("hasval"); 
119
120		else{ 
121			$("#otraCantidad").removeClass("hasval"); 
122
123 
124		$("#otraCantidad").change(function () { 
125			if ($(this).val() != "") { 
126				$(this).addClass("hasval"); 
127				$("#euros").find("a").each(function () { 
128					$(this).removeClass("selected"); 
129				}); 
130				const regexPositiveDonation = /^[1-9]\d*$/; 
131				const isValid = regexPositiveDonation.test($(this).val()); 
132				$("#otraCantidad").parent().toggleClass("has-error", !isValid); 
133				$("#otraCantidad").toggleClass("error-field", !isValid); 
134				$("#colaborarButton").prop('disabled', !isValid); 
135				$("#errorAmount").toggle(!isValid); 
136				} else { 
137					$(this).removeClass("hasval"); 
138
139			amount = $(this).val(); 
140			updateDataLayer(amount, periodicity); 
141		}); 
142 
143		$("#otraCantidad").click(function(){ 
144			$("#euros").find("a").each(function(){ 
145				$(this).removeClass("selected"); 
146			}); 
147			if($(this).val() !=""){ 
148				$(this).addClass("hasval"); 
149
150			else{ 
151				$(this).removeClass("hasval"); 
152
153			amount = $(this).val(); 
154			updateDataLayer(amount, periodicity); 
155		}); 
156
157 
158	function colaborar() { 
159		var articleIdCheck = "noArticle"; 
160		updateDataLayer(amount, periodicity); 
161		<#if articleId?has_content && articleId!=""> 
162		articleIdCheck = ${articleId}; 
163		</#if> 
164 
165		encryptParam(url, periodicity, amount, articleIdCheck); 
166
167 
168	function encryptParam(url, periodicity, amount, articleId){ 
169		var endpoint = "/o/utils-api/util/encrypt/"+periodicity+"/"+amount+"/"+articleId; 
170		$.ajax({ 
171			url: endpoint, 
172			type: 'GET', 
173			cache: false, 
174			dataType: "json" 
175		}).done(function (data, textStatus, jsqXHR) { 
176			var url = "${friendlyURL}/"+"donacion"+"?periodicity="+data.periodicityEncrypted + "&money=" + data.amountEncrypted + "&articleId=" + data.articleIdEncrypted; 
177			url = url.replace(/ /g, ""); 
178			location.href = url; 
179		}).fail(function (jqXHR, textStatus, errorThrown) { 
180			console.error(errorThrown); 
181		}); 
182
183 
184	otraCantidad.oninput = function () { 
185		if (this.value.length > 5) { 
186			this.value = this.value.slice(0,5); 
187
188
189 
190	function updateDataLayer(price,variant){ 
191		var data = { 
192			'event': 'productDetail', 
193			'ecommerce': { 
194				'detail': { 
195					'actionField': 
196							{'list': 'Haz un donativo'}, 
197					'products': [{ 
198						'name': '${articleName}', // articleName 
199						'id': '${articleId}', // articleId 
200						'price': price, // price 
201						'brand': 'Cruz Roja', // brand 
202						'variant': variant // periodicity 
203					}] 
204
205
206		}; 
207		if (dataLayer.length > 0) { 
208			for (let i = 0; i < dataLayer.length; i++) { 
209				if (typeof dataLayer[i].ecommerce !== 'undefined') { 
210					dataLayer.splice(i, 1); 
211
212
213
214		dataLayer.push(data); 
215
216 
217	$(document).ready(function () { 
218		when(); 
219		howmuch(); 
220		other(); 
221		updateDataLayer(amount, periodicity); 
222	}); 
223 
224</script> 
225 
226<style> 
227	/* Chrome, Safari, Edge, Opera */ 
228	input::-webkit-outer-spin-button, 
229	input::-webkit-inner-spin-button { 
230		-webkit-appearance: none; 
231		margin: 0; 
232
233 
234	/* Firefox */ 
235	input[type=number] { 
236		-moz-appearance: textfield; 
237
238</style> 

Título Baja suscripciones

Baja suscripciones

Baja suscripciones embed