ÚLTIMOS EPISODIOS PUBLICADOS
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing: ==> audioVideoUrl [in template "15553970#15554109#17210296" at line 68, column 103] ---- Tip: If the failing expression is known to 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: ${audioVideoUrl} [in template "15553970#15554109#17210296" at line 68, column 101] ----
1<#if entries?has_content>
2 <#assign urlBase = "" />
3 <#assign urlFriendly = themeDisplay.getLayout().getFriendlyURL() />
4 <#assign urlCurrent = themeDisplay.getURLCurrent() />
5 <#if urlCurrent?contains(urlFriendly)>
6 <#assign urlBase = themeDisplay.getPortalURL() + themeDisplay.getURLCurrent()?keep_before_last("/")?remove_ending("/") />
7 <#else>
8 <#assign urlBase = themeDisplay.getPortalURL() +themeDisplay.getURLCurrent()?remove_ending("/") />
9 </#if>
10
11
12
13 <div class="row">
14 <#list entries as curEntry>
15
16 <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, curEntry, true) />
17 <#assign renderer = curEntry.getAssetRenderer()>
18 <#assign className = renderer.getClassName()>
19
20 <#if className == "com.liferay.journal.model.JournalArticle">
21 <#assign journalArticle = renderer.getArticle()>
22 <#assign jaResourcePrimKey = journalArticle.getResourcePrimKey()>
23 <#assign reproducciones = journalArticle.getExpandoBridge().getAttribute('reproducciones')>
24 <#assign document = saxReaderUtil.read(journalArticle.getContent())>
25 <#assign rootElement = document.getRootElement()>
26 <#assign defaultLanguageId = parseXml ("@default-locale", rootElement)>
27
28 <#assign title = getField("Título", locale, defaultLanguageId, rootElement)!>
29 <#assign resume = getField("Resumen", locale, defaultLanguageId, rootElement)!>
30
31 <#attempt>
32 <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='imagen']")>
33 <#assign img = xPathSelector.selectSingleNode(rootElement).getStringValue()>
34 <#if isJson(img)>
35 <#assign imgJson = jsonFactoryUtil.createJSONObject(img)>
36 <#assign imgUrl = "/documents/" + imgJson.groupId + "/" + imgJson.uuid >
37 </#if>
38
39 <#recover>
40 <#assign imgUrl = "">
41 </#attempt>
42
43 <#attempt>
44 <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='ArchivoDeAudioVideo']")>
45 <#assign audioVideo = xPathSelector.selectSingleNode(rootElement).getStringValue()>
46 <#if isJson(audioVideo)>
47 <#assign audioVideoJson = jsonFactoryUtil.createJSONObject(audioVideo)>
48 <#assign audioVideoUrl = "/documents/" + audioVideoJson.groupId + "/" + audioVideoJson.uuid >
49 </#if>
50
51 <#recover>
52 <#assign audioVideoUrl = "">
53 </#attempt>
54
55 <#-- OBTIENE LAS CATEGORIAS -->
56 <#assign assetCategoryLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil"]/>
57 <#assign categoryList = assetCategoryLocalServiceUtil.getCategories(className , journalArticle.resourcePrimKey) >
58
59 <div class="col-sm-6">
60 <div class="latest-publications-card">
61 <div class="latest-publications-header">
62 <div class="header-img">
63 <img loading="lazy" decoding="async" src="${imgUrl}" width="370" height="290" alt="Serie image">
64 </div>
65 <div class="header-content">
66 <div class="actions-cont">
67 <div class="actions">
68 <a class="jPlayerPlay" url="${audioVideoUrl}" title="${title}" id="${jaResourcePrimKey}" counter="${reproducciones}">
69 <i class="play icon-play"></i>
70 </a>
71 </div>
72 </div>
73 </div>
74 </div>
75 <div class="latest-publications-content">
76 <h5 class="title"><a href="${viewURL}">${title}</a></h5>
77 <p class="meta">
78 <span class="date">
79 <#setting locale="es_ES">
80 ${journalArticle.getDisplayDate()?date?string["d MMMM'.' yyyy"]}
81 </span>
82 </p>
83 <div class="content-resume small">
84 <p>${resume}</p>
85 </div>
86 <p class="read-more small">
87 <a href="${viewURL}" class="button-detail">
88 Leer más... <i class="icon-long-arrow-right"></i>
89 </a>
90 </p>
91 <p class="tags">
92 <#list categoryList as category>
93 <a href="${urlBase + '/publicaciones-categoría?categoryId=' + category.getCategoryId() + '&page=1'}" class="view_category">
94 <i class="icon-tag"></i> ${category.getName()}
95 </a>
96 </#list>
97 </p>
98 </div>
99 </div>
100 </div>
101 </#if>
102 </#list>
103 </div>
104</#if>
105
106
107
108
109<#function getField field languageId defaultLanguageId xml>
110 <#local defaultSelector = "//dynamic-content[@language-id='" + defaultLanguageId + "' and ancestor-or-self::*[@name='" + field + "']]">
111 <#local localeSelector = "//dynamic-content[@language-id='" + languageId + "' and parent::*[@name='" + field + "']]">
112
113 <#local selector = saxReaderUtil.createXPath(localeSelector)>
114 <#local value = selector.selectSingleNode(xml)!>
115
116 <#if value?has_content && value.getText()?has_content>
117 <#return value.getText()>
118 </#if>
119
120 <#local selector = saxReaderUtil.createXPath(defaultSelector)>
121 <#local value = selector.selectSingleNode(xml)!>
122
123 <#if value?has_content && value.getText()?has_content>
124 <#return value.getText()>
125 </#if>
126
127 <#return "">
128</#function>
129
130<#function parseXml xpath xml>
131 <#local selector = saxReaderUtil.createXPath(xpath)>
132 <#local result = selector.selectSingleNode(xml)!>
133
134 <#if result?has_content>
135 <#return result.getStringValue()>
136 </#if>
137
138 <#return "">
139</#function>
140
141<#function isJson json>
142 <#local value = json?trim>
143 <#return value?has_content && value?starts_with("{") && value?ends_with("}")>
144</#function>
PUBLICACIONES POR ETAPAS EDUCATIVAS
null Eco de Delfos FM
MARIA RODRIGUEZ ALVAREZ
modificado hace 2 meses
SERIES
Primaria
PUBLICACIONES POR CENTROS EDUCATIVOS
SERIES
CP La Ería
EPISODIOS
+ 3 más
SERIES
IES La Ería
SERIES
IES La Fresneda
Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing: ==> audioVideoUrl [in template "15553970#15554109#17210302" at line 128, column 67] ---- Tip: If the failing expression is known to 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: ${audioVideoUrl} [in template "15553970#15554109#17210302" at line 128, column 65] ----
1<#assign dynamicQueryFactoryUtil = staticUtil["com.liferay.portal.kernel.dao.orm.DynamicQueryFactoryUtil"] />
2<#assign classNameLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.ClassNameLocalService")>
3<#assign expandoValueLocalService = serviceLocator.findService("com.liferay.expando.kernel.service.ExpandoValueLocalService")>
4<#assign propertyFactoryUtil = staticUtil["com.liferay.portal.kernel.dao.orm.PropertyFactoryUtil"] />
5<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
6<#assign expandoValueClass = staticUtil["com.liferay.portal.kernel.util.ClassResolverUtil"].resolveByPortalClassLoader("com.liferay.expando.kernel.model.ExpandoValue") />
7<#assign PortalClassLoaderUtil = staticUtil["com.liferay.portal.kernel.util.PortalClassLoaderUtil"] />
8<#assign AssetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")/>
9<#assign expandoColumnLocalService = serviceLocator.findService("com.liferay.expando.kernel.service.ExpandoColumnLocalService") />
10<#assign expandoTableLocalService = serviceLocator.findService("com.liferay.expando.kernel.service.ExpandoTableLocalService") />
11
12<#if entries?has_content>
13
14
15
16<#assign title = "">
17<#if portletPreferences["portletSetupTitle_es_ES"]??>
18 <#assign title = portletPreferences["portletSetupTitle_es_ES"]?first />
19</#if>
20
21<h1 style="text-align: center; white-space: nowrap;">${title}</h1>
22
23
24<#assign classNameId = classNameLocalService.getClassNameId("com.liferay.journal.model.JournalArticle")>
25<#assign entryIds = [] />
26<#assign assetEntries = AssetEntryLocalService.getGroupEntries(themeDisplay.getScopeGroupId())>
27
28<#assign structureId = portletPreferences["classTypeIdsJournalArticleAssetRendererFactory"] />
29
30<#list assetEntries as assetEntry>
31 <#if assetEntry.className =="com.liferay.journal.model.JournalArticle" && assetEntry.getVisible() == true && structureId[0] == assetEntry.getClassTypeId()?string >
32 <#assign entryId =journalArticleLocalService.fetchLatestArticle(assetEntry.getClassPK()).id/>
33 <#assign entryIds = entryIds + [entryId] />
34 </#if>
35</#list>
36
37<#assign expandoTable = expandoTableLocalService.getTable(companyId, classNameId, "CUSTOM_FIELDS") />
38<#assign expandoColumn = expandoColumnLocalService.getColumn(expandoTable.getTableId(), "reproducciones") />
39<#assign columnId = expandoColumn.getColumnId() />
40
41<#assign dynamicQuery = dynamicQueryFactoryUtil.forClass(expandoValueClass, PortalClassLoaderUtil.getClassLoader())>
42<#assign valueIdProperty = propertyFactoryUtil.forName("classPK")/>
43<#assign dynamicQuery = dynamicQuery.add(valueIdProperty.in(entryIds))/>
44<#assign propertyColumnId = propertyFactoryUtil.forName("columnId") />
45<#assign dynamicQuery = dynamicQuery.add(propertyColumnId.eq(columnId)) />
46<#assign expandoValues = expandoValueLocalService.dynamicQuery(dynamicQuery) />
47
48<#assign convertedValues = []>
49<#list expandoValues as value>
50
51 <#assign dataNumber = value.data?number>
52
53 <#assign convertedValues = convertedValues + [{
54 "value": value,
55 "dataNumber": dataNumber
56 }]>
57</#list>
58
59<#assign sortedValues = convertedValues?sort_by("dataNumber")>
60<#assign sortedValues = sortedValues?reverse>
61
62<#assign delta = portletPreferences["delta"][0]?number>
63
64<#assign urlBase = "" />
65<#assign urlFriendly = themeDisplay.getLayout().getFriendlyURL() />
66<#assign urlCurrent = themeDisplay.getURLCurrent() />
67<#if urlCurrent?contains(urlFriendly)>
68 <#assign urlBase = themeDisplay.getURLCurrent()?keep_before_last("/") />
69<#else>
70 <#assign urlBase = themeDisplay.getURLCurrent() />
71</#if>
72
73<#assign counter = 0>
74
75<div class="row">
76 <#list sortedValues as value>
77
78 <#if counter lt delta>
79 <#assign journalArticle = journalArticleLocalService.getArticle(value.value.classPK) />
80 <#assign jaResourcePrimKey = journalArticle.getResourcePrimKey()>
81 <#assign assetEntry = AssetEntryLocalService.fetchEntry(classNameId, jaResourcePrimKey) />
82 <#assign viewURL = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, assetEntry, true) />
83 <#assign reproducciones = journalArticle.getExpandoBridge().getAttribute('reproducciones')>
84 <#assign document = saxReaderUtil.read(journalArticle.getContent())>
85 <#assign rootElement = document.getRootElement()>
86 <#assign defaultLanguageId = parseXml ("@default-locale", rootElement)>
87
88 <#assign title = getField("Título", locale, defaultLanguageId, rootElement)!>
89 <#assign resume = getField("Resumen", locale, defaultLanguageId, rootElement)!>
90
91 <#attempt>
92 <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='imagen']")>
93 <#assign img = xPathSelector.selectSingleNode(rootElement).getStringValue()>
94 <#if isJson(img)>
95 <#assign imgJson = jsonFactoryUtil.createJSONObject(img)>
96 <#assign imgUrl = "/documents/" + imgJson.groupId + "/" + imgJson.uuid >
97 </#if>
98 <#recover>
99 <#assign imgUrl = "">
100 </#attempt>
101
102 <#attempt>
103 <#assign xPathSelector = saxReaderUtil.createXPath("dynamic-element[@name='ArchivoDeAudioVideo']")>
104 <#assign audioVideo = xPathSelector.selectSingleNode(rootElement).getStringValue()>
105 <#if isJson(audioVideo)>
106 <#assign audioVideoJson = jsonFactoryUtil.createJSONObject(audioVideo)>
107 <#assign audioVideoUrl = "/documents/" + audioVideoJson.groupId + "/" + audioVideoJson.uuid >
108 </#if>
109 <#recover>
110 <#assign audioVideoUrl = "">
111 </#attempt>
112
113
114
115 <#-- OBTIENE LAS CATEGORIAS -->
116 <#assign assetCategoryLocalServiceUtil = staticUtil["com.liferay.asset.kernel.service.AssetCategoryLocalServiceUtil"]/>
117 <#assign categoryList = assetCategoryLocalServiceUtil.getCategories(className , journalArticle.resourcePrimKey) >
118
119 <div class="col-sm-6">
120 <div class="latest-publications-card">
121 <div class="latest-publications-header">
122 <div class="header-img">
123 <img loading="lazy" decoding="async" src="${imgUrl}" width="370" height="290" alt="Serie image">
124 </div>
125 <div class="header-content">
126 <div class="actions-cont">
127 <div class="actions">
128 <a class="jPlayerPlay" url="${audioVideoUrl}" title="${title}" id="${jaResourcePrimKey}" counter="${reproducciones}">
129 <i class="play icon-play"></i>
130 </a>
131 </div>
132 </div>
133 </div>
134 </div>
135 <div class="latest-publications-content">
136 <h5 class="title"><a href="${viewURL}">${title}</a></h5>
137 <p class="meta">
138 <span class="date">
139 ${journalArticle.getDisplayDate()?date?string["d MMMM'.' yyyy"]}
140 </span>
141 </p>
142 <div class="content-resume small">
143 <p>${resume}</p>
144 </div>
145 <p class="read-more small">
146 <a href="${viewURL}" class="button-detail">
147 Leer más... <i class="icon-long-arrow-right"></i>
148 </a>
149 </p>
150 <p class="tags">
151 <#list categoryList as category>
152 <a href="${urlBase + '/publicaciones-categoría?categoryId=' + category.getCategoryId() + '&page=1'}" class="view_category">
153 <i class="icon-tag"></i> ${category.getName()}
154 </a>
155 </#list>
156 </p>
157 </div>
158 </div>
159 </div>
160 <#assign counter = counter + 1>
161 <#else>
162 <#break>
163 </#if>
164 </#list>
165</div>
166
167</#if>
168
169
170<#function getField field languageId defaultLanguageId xml>
171 <#local defaultSelector = "//dynamic-content[@language-id='" + defaultLanguageId + "' and ancestor-or-self::*[@name='" + field + "']]">
172 <#local localeSelector = "//dynamic-content[@language-id='" + languageId + "' and parent::*[@name='" + field + "']]">
173
174 <#local selector = saxReaderUtil.createXPath(localeSelector)>
175 <#local value = selector.selectSingleNode(xml)!>
176
177 <#if value?has_content && value.getText()?has_content>
178 <#return value.getText()>
179 </#if>
180
181 <#local selector = saxReaderUtil.createXPath(defaultSelector)>
182 <#local value = selector.selectSingleNode(xml)!>
183
184 <#if value?has_content && value.getText()?has_content>
185 <#return value.getText()>
186 </#if>
187
188 <#return "">
189</#function>
190
191<#function parseXml xpath xml>
192 <#local selector = saxReaderUtil.createXPath(xpath)>
193 <#local result = selector.selectSingleNode(xml)!>
194
195 <#if result?has_content>
196 <#return result.getStringValue()>
197 </#if>
198
199 <#return "">
200</#function>
201
202<#function isJson json>
203 <#local value = json?trim>
204 <#return value?has_content && value?starts_with("{") && value?ends_with("}")>
205</#function>