Ficción Ensayo literario SOLO WEB Literatura Cine Series
Los mejores libros, películas y series para el verano 2025

Ficción Ensayo literario SOLO WEB Literatura Cine Series
En la redacción de NT hemos escogido pensando en nuestros lectores 12 libros, 11 películas y 6 series para disfrutar este verano.
Con el verano recién estrenado, desde la redacción de Nuestro Tiempo queremos compartir con los lectores nuestra selección de libros, películas y series para disfrutar durante estos meses (y, realmente, cuando quieras). Hemos escogido lo que más nos ha gustado entre las reseñas publicadas desde comienzo de curso. El orden en la lista es aleatorio y no pretende ser un ranking.
¿Echas de menos algún título?
En consonancia con ese espíritu de servicio, Nuestro Tiempo es una revista gratuita. Su contenido está accesible en internet, y enviamos también la edición impresa a los donantes de la Universidad.
The following has evaluated to null or missing: ==> revista_number [in template "10136#10174#53349399" at line 91, column 33] ---- 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: ${revista_number} [in template "10136#10174#53349399" at line 91, column 31] ----
1<#-- Template: Articulos Relacionados 3 Columnas -->
2<#-- Obtener los servicios necesarios -->
3<#assign assetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") />
4<#assign journalArticleLocalService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") />
5<#assign assetVocabularyLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetVocabularyLocalService") />
6<#assign assetDisplayPageFriendlyURLProvider = serviceLocator.findService("com.liferay.asset.display.page.portlet.AssetDisplayPageFriendlyURLProvider") />
7
8<#-- Obtener el artículo actual -->
9<#assign journalArticle = journalArticleLocalService.getArticle(getterUtil.getLong(groupId), .vars['reserved-article-id'].data) />
10<#assign groupId = themeDisplay.getScopeGroupId() />
11<#assign resourcePrimKey = journalArticle.getResourcePrimKey() />
12<#assign structureKey = journalArticle.getDDMStructureKey() />
13<#assign authorId = journalArticle.getUserId() />
14
15<#-- Buscar y mostrar artículos relacionados -->
16<#assign relatedArticles = journalArticleLocalService.getArticlesByStructureId(groupId, structureKey, 0, 1000, null) />
17
18 <#-- Ordenar los art�culos por fecha de modificaci�n y seleccionar los m�s recientes -->
19 <#assign relatedArticles = relatedArticles?sort_by("displayDate")?reverse />
20 <#-- Limitar a 3 si hay suficientes -->
21 <#if relatedArticles?size gt 3>
22 <#assign relatedArticles = relatedArticles[0..2] />
23 </#if>
24
25<div class="container">
26 <div class="row">
27 <#list relatedArticles as curArticle>
28 <#if curArticle.getResourcePrimKey() != resourcePrimKey>
29 <#assign viewURL = assetDisplayPageFriendlyURLProvider.getFriendlyURL("com.liferay.journal.model.JournalArticle", curArticle.getResourcePrimKey(), themeDisplay) />
30 <#if !viewURL?has_content>
31 <#assign viewURL = "/" />
32 </#if>
33 <#assign aArticleXML = saxReaderUtil.read(curArticle.getContentByLocale(locale)) />
34 <#assign autores = aArticleXML.selectNodes("//dynamic-element[@name='autor']/dynamic-content") />
35 <#assign imagenArticulo = aArticleXML.valueOf("//dynamic-element[@name='imagen']/dynamic-content/text()") />
36 <#assign detalle = aArticleXML.valueOf("//dynamic-element[@name='detalle']/dynamic-content") />
37
38 <#assign categoriesList = assetCategoryLocalService.getCategories("com.liferay.journal.model.JournalArticle", curArticle.getResourcePrimKey())/>
39 <#assign vocabularyTemaName = "Tema" />
40 <#assign vocabularyNRevistaName = "Nº de revista" />
41 <#assign vocabularyTopicName = "Topic" />
42 <#assign avoidTopic = "PRINCIPAL" />
43
44 <#-- Featured Image of the Article -->
45 <#assign featuredImage = curArticle.getArticleImageURL(themeDisplay)!""/>
46
47 <#if curArticle?index < 3>
48 <div class="col-md border-left <#if curArticle?index == 2> border-right</#if>">
49 <article class="article article-small">
50 <figure class="media">
51 <picture>
52 <#if featuredImage?has_content>
53 <img src="${featuredImage}" />
54 <#else>
55 <#if imagenArticulo?? && imagenArticulo?has_content>
56 <#attempt>
57 <#assign jsonObject = imagenArticulo?eval/>
58 <#assign entryUuid = jsonObject.uuid />
59 <#assign entryGroupId = getterUtil.getLong(jsonObject.groupId) />
60 <#assign entryAlt = jsonObject.alt />
61 <#assign dlFileEntryLocalService = serviceLocator.findService("com.liferay.document.library.kernel.service.DLFileEntryLocalService") />
62 <#assign assetEntryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService")>
63 <#assign dlFileEntry = dlFileEntryLocalService.getDLFileEntryByUuidAndGroupId(entryUuid, entryGroupId) />
64 <#assign assetEntry = assetEntryLocalService.getEntry("com.liferay.document.library.kernel.model.DLFileEntry", dlFileEntry.fileEntryId) />
65 <#assign assetRenderer = assetEntry.assetRenderer />
66 <#assign imagen = assetRenderer.getURLDownload(themeDisplay) />
67 <img alt="${entryAlt}" data-fileentryid="${dlFileEntry.fileEntryId}" src="${imagen}" />
68 <#recover>
69 </#attempt>
70 </#if>
71 </#if>
72 </picture>
73 </figure>
74
75 <#if categoriesList?has_content>
76 <#list categoriesList as category>
77 <#assign categoryVocabulary = assetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId()) />
78 <#if categoryVocabulary.getName() == vocabularyNRevistaName>
79 <#assign revista_number = category.getTitle(locale)/>
80 </#if>
81 </#list>
82 </#if>
83 <p class="kicker">
84 <#if categoriesList?has_content>
85 <#list categoriesList as category>
86 <#assign categoryVocabulary = assetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId()) />
87 <#if categoryVocabulary.getName() == vocabularyTemaName>
88 <a title="${category.getTitle(locale)}">${category.getTitle(locale)}</a>
89 </#if>
90 </#list>
91 <a title="${revista_number}">${revista_number}</a>
92 <#list categoriesList as category>
93 <#assign categoryVocabulary = assetVocabularyLocalService.getAssetVocabulary(category.getVocabularyId()) />
94 <#if categoryVocabulary.getName() == vocabularyTopicName && category.getTitle(locale) != avoidTopic>
95 <a title="${category.getTitle(locale)}">${category.getTitle(locale)}</a>
96 </#if>
97 </#list>
98 </#if>
99 </p>
100
101 <#assign title = curArticle.getTitle(locale) />
102 <h2 class="title title-standard">
103 <a href="${viewURL}" title="${title}">${title}</a>
104 </h2>
105
106 <p class="meta">
107 <#assign fecha = dateUtil.getDate(curArticle.getDisplayDate(), "d 'de' MMMM 'de' yyyy", locale) />
108 <#if fecha?has_content>
109 <span>${fecha}</span>
110 </#if>
111
112 <#assign tiempo = "" />
113 <#if detalle?has_content>
114 <#assign content = detalle?trim />
115 <#if content != "">
116 <#assign contentCount = content?replace("<[^>]+>", "", "r")?word_list?size />
117 <#if contentCount gt 0>
118 <#assign minutesValue = (contentCount/200)?round />
119 <#if minutesValue == 0>
120 <#assign tiempo = "Unos segundos" />
121 <#elseif minutesValue == 1>
122 <#assign tiempo = minutesValue + " minuto" />
123 <#else>
124 <#assign tiempo = minutesValue + " minutos" />
125 </#if>
126 </#if>
127 </#if>
128 </#if>
129 <#if tiempo?? && tiempo != "">
130 <span><i class="fa fa-regular fa-clock"></i> ${tiempo}</span>
131 </#if>
132 </p>
133
134 <p class="author">
135 <#if autores?has_content>
136 <#list autores as autor>
137 <#assign aArticleXMLAutores = saxReaderUtil.read(autor.getParent().asXML()) />
138 <#assign autorJournalArticle = aArticleXMLAutores.valueOf("//dynamic-element[@name='autor']/dynamic-content") />
139 <#attempt>
140 <#assign jsonObject = autorJournalArticle?eval/>
141 <#assign articleClassPK = jsonObject.classPK />
142 <#assign articleGroupId = getterUtil.getLong(jsonObject.groupId) />
143 <#assign articleAutor = journalArticleLocalService.fetchLatestArticle(articleClassPK?number)>
144 <#assign aArticleXMLAutor = saxReaderUtil.read(articleAutor.getContentByLocale(locale)) />
145 <#assign nombre = aArticleXMLAutor.valueOf("//dynamic-element[@name='nombre']/dynamic-content/text()") />
146 <#assign apellidos = aArticleXMLAutor.valueOf("//dynamic-element[@name='apellidos']/dynamic-content/text()") />
147 <a title="${nombre} ${apellidos}">${nombre} ${apellidos}</a>
148 <#recover>
149 </#attempt>
150 </#list>
151 </#if>
152 </p>
153 </article>
154 </div>
155 </#if>
156 </#if>
157 </#list>
158 </div>
159</div>
160
161<style>
162/* default image size */
163.nuestro-tiempo .article.article-small .media img{
164 object-fit: contain;
165 height: 200px;
166}
167/* alternative
168.nuestro-tiempo .article.article-small .media img{
169 object-fit: cover;
170 height: 100%;
171}
172*/
173</style>