Dona't d'alta a la T-mobilitat i gaudeix de la T-jove
La T-jove, la T-jove FM/FN general i la T-jove FM/FN especial són exclusives per a la T-mobilitat.
Dona-t'hi d'alta ara i compra el títol que més et convingui.
T-jove FM/FN especial
Targeta de transport per a menors de 30 anys amb bonificació especial. Preu únic per a totes les zones tarifàries. Disponible de forma exclusiva per a la T-mobilitat.
Fehler bei der Verarbeitung der Vorlage.
Error on line 41, column 1 in 20155#20195#51237 typeSelector.selectSingleNode(rootElement) is undefined. It cannot be assigned to option
1<#assign images_folder = request["theme-display"]["path-theme-images"]>
2<#assign apiTool = utilLocator.findUtil("tmb-hook", "cat.tmb.web.hook.service.TmbClientServiceTool")>
3<#attempt>
4 <#assign jTitlePrices = apiTool.getTarifesBitllet(groupId, codi_bitllet.getData())>
5 <#assign jTitle = jsonFactoryUtil.createJSONObject(jTitlePrices).getJSONObject("data").getJSONArray("titols").getJSONObject(0).getString("descripcioExtesa")>
6<#recover>
7 <#assign jTitlePrices = "">
8 <#assign jTitle = "">
9</#attempt>
10<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.portlet.journal.service.JournalArticleLocalService")>
11<#assign journalStructureLocalService = serviceLocator.findService("com.liferay.portlet.journal.service.JournalStructureLocalService")>
12<#assign structureService = serviceLocator.findService("com.liferay.portlet.dynamicdatamapping.service.DDMStructureLocalService")>
13<#assign classNameService = serviceLocator.findService("com.liferay.portal.service.ClassNameLocalService")>
14<#assign imagesFolder = request["theme-display"]["path-theme-images"]>
15<#assign groupId = getterUtil.getLong(groupId)>
16<#assign group = serviceLocator.findService("com.liferay.portal.service.GroupLocalService").getGroup(groupId)>
17<#assign domain = group.getExpandoBridge().getAttribute("MAPS_TMB_DOMAIN")>
18<#assign api_id = group.getExpandoBridge().getAttribute("API_ID")>
19<#assign api_key = group.getExpandoBridge().getAttribute("API_KEY")>
20<#assign equipmentCode = group.getExpandoBridge().getAttribute("ECOMMERCE_EQUIPMENT_CODE")>
21<#assign ecommerceDomain = group.getExpandoBridge().getAttribute("ECOMMERCE_DOMAIN")>
22<#assign ecommerceEndpoint = group.getExpandoBridge().getAttribute("ECOMMERCE_ENDPOINT")>
23<#assign urlCompra = languageUtil.get(locale, "context.ecommerce.url")>
24<#assign structureClassNameId = classNameService.getClassNameId("com.liferay.portlet.journal.model.JournalArticle")>
25<#assign curArticle = journalArticleLocalService.getArticle(groupId, .vars['reserved-article-id'].getData())>
26<#assign structureId = getterUtil.getString(curArticle.getStructureId())>
27<#assign structure = structureService.fetchStructure(groupId, structureClassNameId, structureId)>
28<#--DDMStructure
29-->
30<#assign localizedFields = structure.getPersistentFieldsMap(locale)>
31<#assign document = saxReaderUtil.read(structure.getCompleteXsd())>
32<#-- Document
33-->
34<#assign rootElement = document.getRootElement()>
35<#-- Element
36-->
37<#assign xPathExpression = "//dynamic-element[@name='validesa_bitllet']/dynamic-element[@value='" + validesa_bitllet.getData() + "']/meta-data[@locale='" + locale + "']">
38<#assign typeSelector = saxReaderUtil.createXPath(xPathExpression)>
39<#-- XPath
40-->
41<#assign option = typeSelector.selectSingleNode(rootElement)>
42<#-- Node
43-->
44<#assign portalURL = request["theme-display"]["portal-url"]>
45<#assign DLAppServiceUtil = serviceLocator.findService("com.liferay.portlet.documentlibrary.service.DLAppService")>
46<#assign lang = locale.getLanguage()>
47<#assign String = "">
48
49<script type="text/javascript">
50 $(document).ready(function() {
51 Analytics.EnhancedEcommerce.loadEC();
52
53 var jsonResponse = JSON.parse('${jTitlePrices}');
54 if (jQuery.isEmptyObject(jsonResponse.data.titols)) {
55 $('#hdr_preus_zona, #preus_zona').hide();
56 }
57 else {
58 $('#hdr_preus_zona, #preus_zona').show();
59 }
60
61 jsonCallback2(jsonResponse);
62 <#if compra_online.is_compra_online.getData() != "true"> loadEcommerceDetall();
63 </#if>
64 $('.ticket-unit__actions .button').click(function() {
65 Analytics.EnhancedEcommerce.addProduct($(this).attr("data-code"), $(this).attr("data-name-bitllet"), 1, 'Detall del bitllet ' + $(this).attr("data-name-bitllet"));
66
67 Analytics.Ecommerce.eventPurchase.purchase('JOTMBE / Detall de bitllet', $(this).attr("data-name-bitllet"));
68 <#if saleTmobilitat?has_content && getterUtil.getBoolean(saleTmobilitat.getData())> var ecommerceURL = '${ecommerceDomain}/${lang}';
69 window.location.href = ecommerceURL;
70 <#else> var ecommerceURL = '${ecommerceDomain}/${lang}/${urlCompra}/${codi_bitllet.getData()}';
71 window.location.href = ecommerceURL;
72 </#if> });
73 });
74
75 function initCompraOnlineDetall(versionCode){
76 var bitlletCode = '${codi_bitllet.getData()}';
77 var ecommerceActive = false;
78 var ocultaBotoCompraOnline = '<#if oculta_compra?has_content>${oculta_compra.getData()}</#if>';
79
80 jQuery.ajax({
81 url : "${domain}/${ecommerceEndpoint}/v2/business-parameters/"+versionCode+"/catalog/product/parent-variants?equipmentCode=${equipmentCode}&app_id=${api_id}&app_key=${api_key}",
82 type : "GET",
83 dataType: "json",
84 success: function(data) {
85 var productsNoVariants = data.productsWithoutVariants;
86 var productsWithVariants = data.productsWithVariants;
87
88 for(var i in productsNoVariants){
89 var product = productsNoVariants[i];
90 var ticketCode = product.ticketCode;
91 var productCode = product.code;
92 if(bitlletCode == ticketCode){
93 $('.ticket-unit__actions .button.button--a').attr('data-name-bitllet', product.originalName);
94 $('.ticket-unit__actions .button.button--a').attr('data-code', productCode);
95 Analytics.EnhancedEcommerce.addImpression(productCode, product.originalName, 1, 'Detall del bitllet ' + product.originalName);
96 if(product.withPermissionToSell && ocultaBotoCompraOnline != 'true'){
97 $('.ticket-unit__actions').show();
98 ecommerceActive = true;
99 break;
100 }
101 }
102
103 }
104
105 if(!ecommerceActive){
106 for(var pv in productsWithVariants){
107 var productVariants = productsWithVariants[pv];
108 var productParentVariants = productVariants.productParentVariants;
109 for(var ppv in productParentVariants){
110 var productParent = productParentVariants[ppv];
111 var productWVCode = productParent.variantFieldGroupingValue;
112
113 if(bitlletCode == productWVCode){
114 var productVariantLanguages = productParent.parentProductVariantLanguages;
115 for(var pvl in productVariantLanguages){
116 var language = productVariantLanguages[pvl];
117 if(language.languageCode == "CAT"){
118 $('.ticket-unit__actions .button.button--a').attr('data-name-bitllet', language.shortName);
119 $('.ticket-unit__actions .button.button--a').attr('data-code', productWVCode);
120 Analytics.EnhancedEcommerce.addImpression(productWVCode, language.shortName, 1, 'Detall del bitllet ' + language.shortName);
121 break;
122 }
123 }
124
125 var showBtn = true;
126 for(var i in productParent.products){
127 var item = productParent.products[i];
128 if(!item.withPermissionToSell){
129 showBtn = false;
130 break;
131 }
132 }
133 if(showBtn && ocultaBotoCompraOnline != 'true'){
134 $('.ticket-unit__actions').show();
135 ecommerceActive = true;
136 break;
137 }
138 }
139 }
140 }
141 }
142
143
144 },
145 error : function(error) {
146 console.log(error);
147 }
148 });
149 }
150
151 function loadEcommerceDetall() {
152 jQuery.ajax({
153 url : "${domain}/${ecommerceEndpoint}/v2/business-parameters/versions?equipmentCode=${equipmentCode}&app_id=${api_id}&app_key=${api_key}",
154 type : "GET",
155 dataType: "json",
156 success: function(data) {
157 if(data.length > 0){
158 initCompraOnlineDetall(data[0].versionCode);
159 }
160 },
161 error : function(error) {
162 console.log(error);
163 }
164 });
165 }
166
167 function textCurrency(valor){
168 var preu;
169 if(valor != null && !isNaN(parseFloat(valor)) && isFinite(valor)){
170 if (valor % 1 == 0) {
171 preu = Math.floor(valor).toString();
172 } else {
173 preu = valor.toFixed(2);
174 }
175 if ('${lang}' == 'en') {
176 preu = '€' + preu;
177 } else {
178 preu = preu.replace('.',',') + ' €';
179 }
180 }else{
181 preu = "";
182 }
183 return preu;
184 }
185
186 function jsonCallback2(json){
187 var titolZones = json.data.titols[0].titolZones;
188 var valor = titolZones[0].preu;
189 var iszero = false;
190
191 if(valor==0) iszero = true;
192
193 var preu = textCurrency(valor);
194 if(preu!=""){
195 var isAbonament = '${is_abonament.getData()}' ? true : false;
196 var preuHtml = '';
197 if(!iszero){
198 preuHtml = '<strong><@liferay.language key="label.price"/>: </strong>' + (isAbonament ? "1 <@liferay.language key="label.zone"/> / " : "") + '<strong class="ticket-unit__data__price">'+ preu +'</strong>';
199 }
200 $("#preu").html(preuHtml);
201 }
202 if(titolZones.length>1 && !iszero){
203 $("#hdr_preus_zona").show();
204 $("#preus_zona").show();
205 mostraTaulaZonaPreus(titolZones);
206 $("totsElsPreus").show();
207 mostraLinkTotsPreus();
208 }else{
209 $("#hdr_preus_zona").hide();
210 $("#preus_zona").hide();
211 $("#totsElsPreus").hide();
212 }
213 }
214
215 function mostraTaulaZonaPreus(zones){
216 var textHeader = [];
217 for(i=0; i<zones.length; i++){
218 var numZona = zones[i].numeroZones;
219 textHeader[i] = numZona+((numZona==1)?' <@liferay.language key="label.zone"/>':' <@liferay.language key="label.zones"/>');
220 }
221
222 var taula = ' <div class="tablesaw-bar mode-stack"></div>'+'\n'+
223 ' <table class="table tablesaw tablesaw-stack u-collapse--bottom" data-tablesaw-mode="stack" summary="Sumari de la taula" id="table-6043" width="100%">'+'\n'+
224 ' <caption class="table__caption"><@liferay.language key="label.prices.area"/></caption>'+'\n'+
225 ' <thead class="table__head">'+'\n'+
226 ' <tr>'+'\n';
227
228 var today = new Date();
229 today.setHours(0);
230 today.setMinutes(0);
231 today.setSeconds(0);
232 today.setMilliseconds(0);
233
234 var isFirst = <#if saleTmobilitat?has_content>${getterUtil.getBoolean(saleTmobilitat.getData())?string("true", "false")}<#else>false</#if>;
235 var saleTmob = <#if saleTmobilitat?has_content>${getterUtil.getBoolean(saleTmobilitat.getData())?string("true", "false")}<#else>false</#if>;
236 var width = Math.trunc(100/zones.length);
237 var zonesTmob = saleTmob && <#if saleTmobilitat?has_content>${saleTmobilitat.getSiblings()?has_content?string("true", "false")}<#else>false</#if> ? <#if saleTmobilitat?has_content && saleTmobilitat.getSiblings()[0].zonesTmobilitat?has_content><#assign count = 1>[<#foreach item in saleTmobilitat.getSiblings()[0].zonesTmobilitat.options>${item}<#if count < saleTmobilitat.getSiblings()[0].zonesTmobilitat.options?size>,</#if><#assign count = count + 1></#foreach>]<#else>""</#if> : false;
238
239 for(i=0; i<zones.length; i++){
240 var dataInici = new Date(zones[i].dataInici);
241 var isDate = !isNaN(dataInici.getTime());
242 if(isDate){
243 dataInici.setHours(0);
244 dataInici.setMinutes(0);
245 dataInici.setSeconds(0);
246 dataInici.setMilliseconds(0);
247 }
248 if(isFirst){
249 isFirst = false;
250 taula += ' <th class="smallSizeTh" scope="col" >'+textHeader[i]+'</th>'+'\n';
251 taula += ' <th class="bigSizeTh" scope="col" width="'+width+'%"><div style = "display: flex;align-items: center;">'+textHeader[i]+'<img src="${images_folder}/gallery_pages/28px/svg/Suport_T-m Copy@1,5x.svg" style="margin-left:15%"></div></th>'+'\n';
252 }
253 else if((dataInici<=today && isDate) || !isDate){
254 if(saleTmob && zonesTmob.includes(i+1)) {
255 taula += ' <th class="smallSizeTh" scope="col" >'+textHeader[i]+'</th>'+'\n';
256 taula += ' <th class="bigSizeTh" scope="col" width="'+width+'%"><div style = "display: flex;align-items: center;">'+textHeader[i]+'<img src="${images_folder}/gallery_pages/28px/svg/Suport_T-m Copy@1,5x.svg" style="margin-left:15%"></div></th>'+'\n';
257 } else {
258 taula += ' <th class="bigSizeTh" scope="col" width="'+width+'%">'+textHeader[i]+'</th>'+'\n';
259 taula += ' <th class="smallSizeTh" scope="col" >'+textHeader[i]+'</th>'+'\n';
260 }
261 }
262 }
263 taula += ' </tr>'+'\n'+
264 ' </thead>'+'\n'+
265 ' <tbody class="table__body">'+'\n'+
266 ' <tr>'+'\n';
267 isFirst = <#if saleTmobilitat?has_content>${getterUtil.getBoolean(saleTmobilitat.getData())?string("true", "false")}<#else>false</#if>;
268 for(i=0; i<zones.length; i++){
269 if(!isNaN(zones[i].preu)){
270 var preuZona = textCurrency(zones[i].preu);
271 var dataInici = new Date(zones[i].dataInici);
272 var isDate = !isNaN(dataInici.getTime());
273 if(isDate){
274 dataInici.setHours(0);
275 dataInici.setMinutes(0);
276 dataInici.setSeconds(0);
277 dataInici.setMilliseconds(0);
278 }
279 if((dataInici<=today && isDate) || !isDate ){
280 if(isFirst){
281 isFirst = false;
282 taula += '<td><span aria-hidden="true" class="tablesaw-cell-label"><div style = "display: flex;align-items: center;">'+textHeader[i]+'<img src="${images_folder}/gallery_pages/28px/svg/Suport_T-m Copy@1,5x.svg" style="margin-left:15%"></div></span><span class="tablesaw-cell-content">'+preuZona+'</span></td>'+'\n';
283 } else {
284 if(saleTmob && zonesTmob.includes(i+1)) {
285 taula += '<td><span aria-hidden="true" class="tablesaw-cell-label"><div style = "display: flex;align-items: center;">'+textHeader[i]+'<img src="${images_folder}/gallery_pages/28px/svg/Suport_T-m Copy@1,5x.svg" style="margin-left:15%"></div></span><span class="tablesaw-cell-content">'+preuZona+'</span></td>'+'\n';
286 } else {
287 taula += '<td><span aria-hidden="true" class="tablesaw-cell-label">'+textHeader[i]+'</span><span class="tablesaw-cell-content">'+preuZona+'</span></td>'+'\n';
288 }
289 }
290
291 }
292 }
293 }
294 taula += ' </tr>'+'\n'+
295 ' </tbody>'+'\n'+
296 ' </table>'+'\n'+
297 getTableFooter() +
298 ' <ul class="list list--links list--links-a u-content--right">'+'\n'+
299 ' <li class="list__item"><a class="list__label" href="${link_mapa_zones.getFriendlyUrl()}" href="${en_titol_mapa_de_zones.getData()}"><@liferay.language key="label.see.zone.map"/></a></li>'+'\n'+
300 ' </ul>'+'\n';
301
302 $("#preus_zona").html(taula);
303 }
304
305 function mostraLinkTotsPreus(){
306 var totsElsPreus = '<ul class="list list--links list--links-a">'+'\n'+
307 ' <li class="list__item"><a class="list__label" href="#hdr_preus_zona"><@liferay.language key="label.see.prices"/></a></li>'+'\n'+
308 '</ul>';
309 $("#totsElsPreus").html(totsElsPreus);
310 }
311
312 function getTableFooter() {
313 <#if zones_footer?has_content && zones_footer.getData()?has_content>
314 var footer = '<div style="padding-top:5px; padding-bottom: 15px;">'+'\n'+
315 '<span style="font-size:small;">'+'\n'+
316 '${zones_footer.getData()}'+'\n'+
317 '</span>'+'\n'+
318 '</div>'+'\n';
319 return footer;
320 <#else> return "";
321 </#if> }
322
323 function showCode(path) {
324 var imagePath = "https://${portalURL}"+path;
325 var text = '<a target="_blank" href="'+imagePath+'"><img src="'+imagePath+'"/></a>';
326 $("#content-see-code .list__label").click();
327 $("#dialog .dialog__container").html('<p>'+htmlEscape(text)+'</p>');
328 }
329
330 function htmlEscape(str) {
331 return str
332 .replace(/&/g, '&')
333 .replace(/"/g, '"')
334 .replace(/'/g, ''')
335 .replace(/</g, '<')
336 .replace(/>/g, '>');
337 }
338</script>
339
340
341<!-- Columna dreta -->
342<div class="ticket-unit">
343 <div class="ticket-unit__container">
344 <div class="ticket-unit__media">
345 <#if !imatge_bitllet.getData()?has_content>
346 <img class="ticket-unit__image" src="${imagesFolder}/figures/img-avis.png" alt="">
347 <#else>
348 <img class="ticket-unit__image" src="${imatge_bitllet.getData()}" alt="${alt_imatge_bitllet.getData()}">
349 </#if>
350 </div>
351 <div class="ticket-unit__content" data-bitllet-code="${codi_bitllet.getData()}">
352 <ul class="ticket-unit__data">
353 <#if num_viatges.getData() != "null">
354 <li class="ticket-unit__data__item">
355 <strong>
356 <@liferay.language key="label.number.trips"/>
357 : </strong>
358 ${num_viatges.getData()}</li>
359 </#if>
360 <#if validesa_bitllet?has_content && validesa_bitllet.getData()?has_content>
361 <li class="ticket-unit__data__item">
362 <strong>
363 <@liferay.language key="label.validity"/>
364 : </strong>
365 ${option.getStringValue()}</li>
366 </#if>
367 <li id="preu" class="ticket-unit__data__item">
368 </li>
369 <#if saleTmobilitat?has_content && getterUtil.getBoolean(saleTmobilitat.getData())>
370 <#if tmobilitat_available.getData()?has_content && tmobilitat_available.getData()?trim?has_content>
371 <li class="ticket-unit__data__item">
372 ${tmobilitat_available.getData()}</li>
373 </#if>
374 <li class="ticket-unit__data__item">
375 <div class="container-applestore-image-elements">
376 <img src="${images_folder}/basic/24px/svg/ico-apple-store-black.svg" alt="App Store">
377 <div class="text-applestore-image">
378 <span class="Available-on-the">
379 <@liferay.language key="label.tickets.available-at-store"/>
380 </span>
381 <span class="App-Store">
382 App Store</span>
383 </div>
384 <div class="Rectangle">
385 </div>
386 <img src="${images_folder}/basic/24px/svg/ico-google-play.svg" alt="Google Play">
387 <div class="text-applestore-image">
388 <span class="Available-on-the">
389 <@liferay.language key="label.tickets.available-at-store"/>
390 </span>
391 <span class="App-Store">
392 Google Play</span>
393 </div>
394 </div>
395 </li>
396 <#if tmobilitat_info.getData()?has_content && tmobilitat_info.getData()?trim?has_content>
397 <li class="ticket-unit__data__item">
398 ${tmobilitat_info.getData()}</li>
399 </#if>
400 </#if>
401 </ul>
402 <#if compra_online.is_compra_online.getData() == "true">
403 <div class="ticket-unit__actions">
404 <p class="ticket-unit__note">
405 ${compra_online.text_descompte.getData()}</p>
406 <a class="button button--a" href="#"
407 title="${Visible_Title.getData()}" data-name-bitllet="" data-code="" rel="nofollow">
408 <@liferay.language key="label.buy.online"/>
409 </a>
410 </div>
411 <#else>
412 <div class="ticket-unit__actions" style="display: none";>
413 <p class="ticket-unit__note">
414 ${compra_online.text_descompte.getData()}</p>
415 <a class="button button--a" title="${Visible_Title.getData()}" rel="nofollow">
416 <@liferay.language key="label.buy.online"/>
417 </a>
418 </div>
419 </#if>
420 </div>
421 </div>
422</div>
423<#assign sortingFields = []>
424<#if ordre?has_content && ordre.descripcio_ordre.getData()?is_number>
425 <#assign sortField = ordre.descripcio_ordre.getData()?number>
426<#else>
427 <#assign sortField = 1000>
428</#if>
429<#assign sortingFields = sortingFields + [ { "title" : "descripcio", "sortingField" : sortField } ] >
430
431<#if ordre?has_content && ordre.avantatges_ordre.getData()?is_number>
432 <#assign sortField = ordre.avantatges_ordre.getData()?number>
433<#else>
434 <#assign sortField = 1000>
435</#if>
436<#assign sortingFields = sortingFields + [ { "title" : "avantatges", "sortingField" : sortField } ] >
437
438<#if ordre?has_content && ordre.requisits_ordre.getData()?is_number>
439 <#assign sortField = ordre.requisits_ordre.getData()?number>
440<#else>
441 <#assign sortField = 1000>
442</#if>
443<#assign sortingFields = sortingFields + [ { "title" : "requisits", "sortingField" : sortField } ] >
444
445<#if ordre?has_content && ordre.mapazones_ordre.getData()?is_number>
446 <#assign sortField = ordre.mapazones_ordre.getData()?number>
447<#else>
448 <#assign sortField = 1000>
449</#if>
450<#assign sortingFields = sortingFields + [ { "title" : "mapazones", "sortingField" : sortField } ] >
451
452<#if ordre?has_content && ordre.puntsdevenda_ordre.getData()?is_number>
453 <#assign sortField = ordre.puntsdevenda_ordre.getData()?number>
454<#else>
455 <#assign sortField = 1000>
456</#if>
457<#assign sortingFields = sortingFields + [ { "title" : "puntsdevenda", "sortingField" : sortField } ] >
458
459<#if ordre?has_content && ordre.altrestitols_ordre.getData()?is_number>
460 <#assign sortField = ordre.altrestitols_ordre.getData()?number>
461<#else>
462 <#assign sortField = 1000>
463</#if>
464<#assign sortingFields = sortingFields + [ { "title" : "altrestitols", "sortingField" : sortField } ] >
465
466<#foreach field in sortingFields?sort_by("sortingField")>
467 <#if field.title == "descripcio">
468 <#if descripcio_bitllet?has_content && descripcio_bitllet.getData()?has_content>
469 <#if descripcio_title?has_content && descripcio_title.getData()?has_content>
470 <h2 class="title title--2">
471 ${descripcio_title.getData()}</h2>
472 <#else>
473 <h2 class="title title--2">
474 <@liferay.language key="label.overview"/>
475 </h2>
476 </#if>
477 <div class="content u-spaced--bottom">
478 <p>
479 ${descripcio_bitllet.getData()}</p>
480 </div>
481 </#if>
482 <#elseif field.title == "avantatges">
483 <#if avantatges_bitllet.avantatge_bitllet.getSiblings()[0].getData()?has_content>
484 <#if avantatges_titol?has_content && avantatges_titol.getData()?has_content>
485 <h2 class="title title--2">
486 ${avantatges_titol.getData()}</h2>
487 <#else>
488 <h2 class="title title--2">
489 <@liferay.language key="label.benefits"/>
490 </h2>
491 </#if>
492 <div class="content u-spaced--bottom">
493 <ul class="list list--standard">
494 <#foreach avantatge in avantatges_bitllet.avantatge_bitllet.getSiblings()>
495 <li class="list__item">
496 ${avantatge.getData()}</li>
497 </#foreach>
498 </ul>
499 </div>
500 </#if>
501 <#elseif field.title == "requisits">
502 <#if requisits_bitllet?has_content && requisits_bitllet.getData()?has_content>
503 <#if requisits_titol?has_content && requisits_titol.getData()?has_content>
504 <h2 class="title title--2">
505 ${requisits_titol.getData()}</h2>
506 <#else>
507 <h2 class="title title--2">
508 <@liferay.language key="label.requirements"/>
509 </h2>
510 </#if>
511 <div class="content u-spaced--bottom">
512 <p>
513 ${requisits_bitllet.getData()}</p>
514 </div>
515 </#if>
516 <#if HTML_Structure_Content?has_content && HTML_Structure_Content.getData()?has_content>
517 <div class="content">
518 ${HTML_Structure_Content.getData()}
519 </div>
520 </#if>
521 <div id="content-see-code" style="display: none">
522 <a class="list__label" href="#" data-size="dialog--medium" data-dismiss="<@liferay.language key="label.close"/>
523 " data-src="http://example.com" data-rel="dialog" >
524 Dialog</a>
525 </div>
526 <ul class="list list--files">
527 <#assign knownFormats = ["pdf", "doc", "jpg", "mov", "zip"]>
528 <#if Document.getSiblings()?has_content>
529 <#foreach cur_docfile in Document.getSiblings()>
530 <#if cur_docfile.Document_URL?has_content && cur_docfile.Document_URL.getData()?has_content>
531 <#assign docUrlList = cur_docfile.Document_URL.getData()?split("/")>
532 <#assign docUrlUuidNum = getterUtil.getInteger(docUrlList?size)-1>
533 <#assign docUrlNameNum = getterUtil.getInteger(docUrlList?size)-2>
534 <#assign docClassUuid = docUrlList[docUrlUuidNum]>
535 <#assign docClassUuidData = docClassUuid?split("?")>
536 <#assign codeHTML = cur_docfile.HTML_Code.getData()>
537 <#if getterUtil.getInteger(docClassUuidData?size)>0>
538 <#assign docClassUuid = docClassUuidData[0]>
539 </#if>
540 <#assign fileExtension = "">
541 <#assign fileSize = "">
542 <#assign fileEntry = "">
543 <#if cur_docfile.Visible_Name.getData()?has_content>
544 <#assign docName = cur_docfile.Visible_Name.getData()>
545 <#else>
546 <#assign docName = docUrlList[docUrlNameNum]>
547 <#assign docName = stringUtil?replace(docName, "+", " ")>
548 </#if>
549 <#assign fileEntry = DLAppServiceUtil.getFileEntryByUuidAndGroupId(docClassUuid, groupId)>
550 <#assign fileSize = fileEntry.getSize()/1024>
551 <#assign fileVersion = fileEntry.getFileVersion()>
552 <#assign fileExtension = fileEntry.getExtension()?lower_case>
553 <#if knownFormats?seq_contains(fileExtension) && codeHTML != "true">
554 <#assign iconClass = "icon--file-" + fileExtension>
555 <#else>
556 <#assign iconClass = "icon--file-generic">
557 </#if>
558 <#assign accessibleDocName = "">
559 <#if !cur_docfile.Accessible_Name.getData() == "">
560 <#assign accessibleDocName = cur_docfile.Accessible_Name.getData()>
561 </#if>
562 <li class="list__item">
563 <#if codeHTML == "true">
564 <a onclick="showCode('${cur_docfile.Document_URL.getData()}')" class="file" href="#" title="${accessibleDocName}">
565 <span class="icon ${iconClass}">
566 </span>
567 <span class="file__name">
568 ${docName}</span>
569 <#if fileExtension?has_content && fileSize?has_content>
570 <span class="file__data">
571 [${fileExtension?upper_case}: ${fileSize} KB]</span>
572 </#if>
573 </a>
574 <#else>
575 <a class="file" href="${cur_docfile.Document_URL.getData()}" title="${accessibleDocName}" rel="external" target="_blank">
576 <span class="icon ${iconClass}">
577 </span>
578 <span class="file__name">
579 ${docName}</span>
580 <#if fileExtension?has_content && fileSize?has_content>
581 <span class="file__data">
582 [${fileExtension?upper_case}: ${fileSize} KB]</span>
583 </#if>
584 </a>
585 </#if>
586 </li>
587 </#if>
588 </#foreach>
589 </#if>
590 </ul>
591 <#elseif field.title == "mapazones">
592 <!-- s'omple per web service -->
593 <h2 id="hdr_preus_zona" class="title title--2" style="display: none">
594 <#if Visible_Title?has_content && Visible_Title.getData()?has_content>
595 ${languageUtil.format(locale, "label.prices.area.name", Visible_Title.getData())}
596 <#else>
597 ${languageUtil.get(locale, "label.prices.area")}
598 </#if>
599 </h2>
600 <div id="preus_zona" class="content u-spaced--bottom">
601 </div>
602 <#elseif field.title == "puntsdevenda">
603 <#if punts_de_venda.getSiblings()[0].element_text.getData()?has_content>
604 <#if puntsvenda_titol?has_content && puntsvenda_titol.getData()?has_content>
605 <h2 class="title title--2">
606 ${puntsvenda_titol.getData()}</h2>
607 <#else>
608 <h2 class="title title--2">
609 <@liferay.language key="label.points.sale"/>
610 </h2>
611 </#if>
612 <div class="content u-spaced--bottom">
613 <ul class="list list--standard u-collapse--bottom">
614 <#foreach punt in punts_de_venda.getSiblings()>
615 <#if !punt.external_url.getData()?has_content && !punt.internal_url.getData()?has_content>
616 <li class="list__item">
617 ${punt.element_text.getData()}</li>
618 </#if>
619 </#foreach>
620 </ul>
621 <ul class="list list--links-a">
622 <#foreach punt in punts_de_venda.getSiblings()>
623 <#if punt.external_url.getData()?has_content>
624 <li class="list__item">
625 <a class="list__label" href="${punt.external_url.getData()}" rel="external">
626 ${punt.element_text.getData()}</a>
627 </li>
628 <#elseif punt.internal_url.getData()?has_content>
629 <li class="list__item">
630 <a class="list__label" href="${punt.internal_url.getFriendlyUrl()}" title="${punt.en_titol.getData()}">
631 ${punt.element_text.getData()}</a>
632 </li>
633 </#if>
634 </#foreach>
635 </ul>
636 </div>
637 </#if>
638 <#elseif field.title == "altrestitols">
639 <#if other_titles.getSiblings()[0].text_other_title.getData()?has_content>
640 <#if altrestitols_titol?has_content && altrestitols_titol.getData()?has_content>
641 <h2 class="title title--2">
642 ${altrestitols_titol.getData()}</h2>
643 <#else>
644 <h2 class="title title--2">
645 <@liferay.language key="label.more.installments"/>
646 </h2>
647 </#if>
648 <div class="content u-spaced--bottom">
649 <ul class="list list--links-a">
650 <#foreach title in other_titles.getSiblings()>
651 <li class="list__item">
652 <a class="list__label" title="${title.en_altres_titols.getData()}" href="${title.url_other_title.getFriendlyUrl()}">
653 ${title.text_other_title.getData()}</a>
654 </li>
655 </#foreach>
656 </ul>
657 </div>
658 </#if>
659 </#if>
660</#foreach>
661<!-- Columna dreta -->
662<style>
663@media (max-width: 768px) {
664 .smallSizeTh{
665 display: block !important;
666 }
667
668 .bigSizeTh{
669 display: none !important;
670 }
671}
672@media (min-width: 768px) {
673 .smallSizeTh{
674 display: none !important;
675 }
676
677 .bigSizeTh{
678 display: table-cell !important;
679 }
680}
681</style>