Detalle Campaña Donativo - Cruz Roja
Publicador de continguts
Apoya a los niños y jóvenes en dificultad
Apoya a los niños y jóvenes en dificultad Con tu ayuda Cruz Roja podrá apoyar a los más pequeños y a sus familias, facilitándoles...
Juguetes para educar y jugar
¡Necesitamos 75.000 juguetes para niños y niñas! Desde Cruz Roja Juventud estamos tratando de conseguir que los niños y niñas que se encuentran en familias con dificultades puedan disfrutar de...
Crisis humanitaria Gaza y Medio Oriente
Crisis humanitaria Gaza y Medio Oriente El conflicto entre Gaza e Israel ha desencadenado una grave crisis humanitaria regional en...
Ayuda a personas que padecen pobreza extrema
Ayuda a personas que padecen pobreza extrema Ahora acuden a Cruz Roja personas que nunca hubieran pensado tener que pedirnos ayuda....
Ayuda afectados incendios forestales 2025
Ayuda afectados incendios forestales 2025 Aunque la situación no es tan grave como en las últimas semanas, el fuego sigue muy...
Ayuda emergencia DANA
Ayuda emergencia DANA Las fuertes lluvias de los últimos días están ocasionando grandes daños materiales, así como decenas de...
Cruz Roja Reacciona por la empleabilidad de jóvenes y mujeres en dificultad
Cruz Roja Reacciona por la empleabilidad de jóvenes y mujeres en dificultad Cruz Roja sigue apoyando el empleo en personas jóvenes...
Crisis Alimentaria Mundial
Crisis Alimentaria Mundial El aumento de precios de alimentos y combustible, la escasez de cereales y fertilizantes, el impacto del...
Apoya el Fondo de Emergencias de Cruz Roja Española
Apoya el Fondo de Emergencias de Cruz Roja Española Movilizamos recursos del Fondo de Ayuda para Emergencias para atender a las...
Ayuda a las víctimas de las inundaciones en Libia
Ayuda a las víctimas de las inundaciones en Libia La tormenta Daniel ha dejado a su paso en el noreste de Libia una gran...
Plan Cruz Roja Reacciona ante la Crisis
Plan Cruz Roja Reacciona ante la Crisis Cruz Roja lanza el plan ‘Cruz Roja Reacciona: una respuesta directa, inmediata y...
Plan Cruz Roja Reacciona ante la Crisis
Plan Cruz Roja Reacciona ante la Crisis Cruz Roja lanza el plan ‘Cruz Roja Reacciona: una respuesta directa, inmediata y...
Apoya a las víctimas de violencia de género
Apoya a las víctimas de violencia de género La violencia de género impacta gravemente sobre la vida de las mujeres, incluyendo a...
DonationCounterModule
Mòdul de portal no està disponible temporalment.
Publicador de continguts
S'ha produït un error mentre es processava 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>