Your journey starts here
Discover our routes and trains
An error occurred while processing the template.
Java method "com.sun.proxy.$Proxy103.getLayoutByUuidAndGroupId(String, long, boolean)" threw an exception when invoked on com.sun.proxy.$Proxy103 object "com.liferay.layout.internal.service.LayoutLocalServiceWrapper@32237707"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign layout = layoutLocalService.g... [in template "87478545#87478592#89111243" at line 52, column 65]
----
1<#assign layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService")/>
2<#assign journalArticleService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService")/>
3<#assign ddmFieldLocalService = serviceLocator.findService("com.liferay.dynamic.data.mapping.service.DDMFieldLocalService")/>
4
5<#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") />
6
7<#if entries?has_content>
8 <div class="container py-6">
9
10 <div class="row">
11 <div class="col-12 mb-5">
12 <#assign totalEntries = entries?size />
13 <p class="c-counter">${totalEntries} <@liferay.language key="adt.result"/></p>
14 </div>
15 </div>
16
17 <div class="row">
18 <#list entries as curEntry>
19 <#assign assetRenderer = curEntry.getAssetRenderer()/>
20 <#assign journalArticle = assetRenderer.getAssetObject() />
21 <#assign ddmStructure = journalArticle.getDDMStructure() />
22 <#assign ddmForm = ddmStructure.getDDMForm()/>
23 <#assign ddmFormValues = ddmFieldLocalService.getDDMFormValues(ddmForm, journalArticle.getId()) />
24 <#assign ddmFormFieldValues = ddmFormValues.getDDMFormFieldValues() />
25 <#assign classPK=curEntry.getClassPK()>
26 <#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.journal.model.JournalArticle", classPK) />
27 <#assign assetCategories = assetEntry.getCategories() />
28 <#assign contentId = .vars["journalArticle"].getArticleId() />
29 <#assign landingPageURL = "" />
30
31 <#list ddmFormFieldValues as fieldName>
32 <#switch fieldName.getFieldReference()>
33 <#case "trainName">
34 <#assign title = fieldName.getValue().getString(locale)!''>
35 <#break>
36 <#case "landingPageURL">
37 <#assign landingPageURL = "" />
38 <#assign layoutJson = fieldName.getValue().getString(locale)!"" />
39
40 <#if layoutJson?has_content>
41
42 <#attempt>
43 <#assign layoutData = layoutJson?eval />
44 <#recover>
45 <#assign layoutData = {} />
46 </#attempt>
47
48 <#assign groupId = (layoutData.groupId)!"" />
49 <#assign layoutUuid = (layoutData.id)!(layoutData.value)!"" />
50
51 <#if groupId?has_content && layoutUuid?has_content>
52 <#assign layout = layoutLocalService.getLayoutByUuidAndGroupId(layoutUuid, groupId?number, false) />
53 <#assign landingPageURL = themeDisplay.getPortalURL() + layout.getFriendlyURL() />
54 </#if>
55
56 </#if>
57 <#break>
58 <#case "origenIDs">
59 <#assign origenIDs = fieldName.getValue().getString(locale)!''>
60 <#assign isUnavailable = !origenIDs?has_content>
61 <#break>
62
63 <#case "destinationID">
64 <#assign destinationID = fieldName.getValue().getString(locale)!''>
65 <#break>
66
67 <#case "trainType">
68 <#assign searchType = fieldName.getValue().getString(locale)!''>
69 <#break>
70
71 <#case "trainDateStart">
72 <#assign trainDateStart = fieldName.getValue().getString(locale)!''>
73 <#break>
74
75 <#case "trainDateFinish">
76 <#assign trainDateFinish = fieldName.getValue().getString(locale)!''>
77 <#break>
78 <#case "trainShortDescriptionCard">
79 <#assign description = fieldName.getValue().getString(locale)!''>
80 <#break>
81 <#case "trainPrice">
82 <#assign price = fieldName.getValue().getString(locale)!''>
83 <#break>
84 <#case "trainDate">
85 <#assign date = fieldName.getValue().getString(locale)!''>
86 <#break>
87 <#case "trainExperienceDescription">
88 <#assign experience = fieldName.getValue().getString(locale)!''>
89 <#break>
90 <#case "trainInformation">
91 <#assign info = fieldName.getValue().getString(locale)!''>
92 <#break>
93
94 <#case "trainImage">
95 <#assign imageJSON = fieldName.getValue().getString(locale)!''>
96 <#if imageJSON?has_content>
97 <#assign imageData = imageJSON?eval>
98 <#assign imageUrl = imageData.url!''>
99 </#if>
100 <#break>
101 <#default>
102 </#switch>
103 </#list>
104
105 <#-- Creacion de URL: -->
106 <#assign params = {} />
107
108 <#if contentId?has_content>
109 <#assign params = params + {"reference": contentId} />
110 </#if>
111
112 <#if origenIDs?has_content>
113 <#assign params = params + {"origins": origenIDs} />
114 </#if>
115
116 <#if destinationID?has_content>
117 <#assign params = params + {"destination": destinationID} />
118 </#if>
119
120 <#if searchType?has_content>
121 <#assign params = params + {"searchType": searchType} />
122 </#if>
123
124 <#if trainDateStart?has_content>
125 <#assign params = params + {"trainDateStart": trainDateStart} />
126 </#if>
127
128 <#if trainDateFinish?has_content>
129 <#assign params = params + {"trainDateFinish": trainDateFinish} />
130 </#if>
131
132 <#assign queryString = "" />
133
134 <#if params?size gt 0>
135 <#assign first = true />
136 <#list params?keys as key>
137 <#if first>
138 <#assign queryString = "?" + key + "=" + params[key] />
139 <#assign first = false />
140 <#else>
141 <#assign queryString = queryString + "&" + key + "=" + params[key] />
142 </#if>
143 </#list>
144 </#if>
145 <#assign baseURL = "/checkout" />
146
147 <div class="col-12 col-md-6 col-lg-4 mb-5">
148 <div class="c-card">
149 <div class="c-card__content">
150 <#if imageUrl?has_content>
151 <img class="c-card__image" src="${imageUrl}" alt="${title}" />
152 </#if>
153 <#if price?has_content >
154 <span class="c-tag c-tag--green">${price}</span>
155 </#if>
156 <h3 class="c-card__title">
157 ${title!''}
158 </h3>
159 <div class="c-card__description">
160 <#if description?has_content >
161 ${description}
162 </#if>
163 </div>
164 <ul class="c-list-icon mb-4">
165 <#if date?has_content >
166 <li class="c-list-icon__item">
167 <i class="c-list-icon__icon alsa-tt-icon-calendar-1"></i>
168 <p class="c-list-icon__text">${date}</p>
169 </li>
170 </#if>
171 <#if experience?has_content >
172 <li class="c-list-icon__item">
173 <i class="c-list-icon__icon alsa-tt-icon-ticket"></i>
174 <p class="c-list-icon__text">${experience}</p>
175 </li>
176 </#if>
177 <#if info?has_content >
178 <li class="c-list-icon__item">
179 <i class="c-list-icon__icon alsa-tt-icon-bus"></i>
180 <p class="c-list-icon__text">${info}</p>
181 </li>
182 </#if>
183 </ul>
184
185 <#if isUnavailable>
186 <button class="c-button c-button--blue c-button--large mx-auto mb-3" disabled><@liferay.language key="adt.soon"/></button>
187 <p>.</p>
188 <#else>
189 <button class="c-button c-button--blue c-button--large mx-auto mb-3"
190 onclick="window.location.href='${baseURL}${queryString}'">
191 <@liferay.language key="adt.book"/>
192 </button>
193 <a class="c-link c-link--blue" href="${landingPageURL!""}">${title!'<@liferay.language key="adt.information"/>'}</a>
194 </#if>
195
196
197
198 </div>
199 </div>
200 </div>
201 </#list>
202 </div>
203 </div>
204
205</#if>
206
207
208<#function getPageDisplayUrl assetEntry>
209 <#assign assetRenderer = assetEntry.getAssetRenderer() />
210 <#assign path = assetRenderer.getURLViewInContext(renderRequest, renderResponse, currentURL) />
211 <#if path?has_content>
212 <#return path />
213 <#else>
214 <#return "" />
215 </#if>
216</#function>