Blog del Grupo Social ONCE
Ejemplos sencillos de lenguaje inclusivo para el día a día
Aprende con ejemplos reales cómo usar el lenguaje inclusivo. Comunica sin excluir a nadie con frases fáciles de aplicar.
Se ha producido un error al procesar la plantilla.
Java method "com.sun.proxy.$Proxy147.getTags(String, long)" threw an exception when invoked on com.sun.proxy.$Proxy147 object "com.liferay.asset.tags.internal.service.AssetTagLocalServiceWrapper@6128a4c0"; see cause exception in the Java stack trace.
----
FTL stack trace ("~" means nesting-related):
- Failed at: #assign blogTags = AssetTagLocalServi... [in template "20192#20219#44696503" at line 75, column 37]
----
1<#assign currentURL = portalUtil.getCurrentURL(renderRequest) />
2<#assign firmaIdParam = portalUtil.getOriginalServletRequest(portalUtil.getHttpServletRequest(renderRequest)).getParameter("firmaid")!"" />
3
4<#assign blogsEntryLocalService = serviceLocator.findService("com.liferay.blogs.service.BlogsEntryLocalService")/>
5
6<#if entries?has_content>
7 <#assign AssetTagLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetTagLocalService")>
8 <#assign AssetCategoryLocalService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService")>
9
10 <#-- 1. Capturar firmaId de la URL y servicio de enlaces -->
11 <#assign assetLinkLocalService = serviceLocator.findService("com.liferay.asset.link.service.AssetLinkLocalService") />
12 <#assign pathFriendlyURLPublic = "/web" />
13 <#assign groupFriendlyURL = "" />
14 <#if themeDisplay??>
15 <#assign pathFriendlyURLPublic = themeDisplay.getPathFriendlyURLPublic() />
16 <#assign groupFriendlyURL = themeDisplay.getScopeGroup().getFriendlyURL() />
17 <#else>
18 <#assign group = GroupLocalService.fetchGroup(groupId) />
19 <#assign groupFriendlyURL = group.getFriendlyURL() />
20 </#if>
21 <#assign preffixPublicSiteURL = pathFriendlyURLPublic + groupFriendlyURL />
22
23 <div class="container">
24 <div class="row blogs justify-content-between">
25 <#list entries as curEntry>
26 <#-- 2. Lógica de filtrado -->
27 <#assign showEntry = true />
28
29 <#if firmaIdParam?has_content>
30 <#assign showEntry = false />
31 <#assign links = assetLinkLocalService.getDirectLinks(curEntry.entryId) />
32 <#list links as link>
33 <#if link.entryId2?string == firmaIdParam || link.entryId1?string == firmaIdParam>
34 <#assign showEntry = true />
35 <#break>
36 </#if>
37 </#list>
38 </#if>
39
40 <#-- 3. Renderizado condicional -->
41 <#if showEntry>
42 <#assign currentBlogClassPK = curEntry.classPK/>
43 <#assign curBlogEntry = blogsEntryLocalService.getEntry(currentBlogClassPK)/>
44 <#assign viewEntryPortletURL = renderResponse.createRenderURL() />
45 ${viewEntryPortletURL.setParameter("mvcRenderCommandName", "/blogs/view_entry")}
46 <#if validator.isNotNull(curBlogEntry.getUrlTitle())>
47 ${viewEntryPortletURL.setParameter("urlTitle", curBlogEntry.getUrlTitle())}
48 <#else>
49 ${viewEntryPortletURL.setParameter("entryId", curBlogEntry.getEntryId()?string)}
50 </#if>
51
52 <#assign link = assetPublisherHelper.getAssetViewURL(renderRequest, renderResponse, curEntry)>
53
54 <div class="col-md-12 col-lg-6 d-flex align-items-stretch">
55 <div class="card">
56 <#if curBlogEntry.getCoverImageURL(themeDisplay)??>
57 <div class="card-img">
58 <img src="${curBlogEntry.getCoverImageURL(themeDisplay)}">
59 </div>
60 </#if>
61
62 <div class="card-body">
63 <h2 class="card-title">
64 <a class="title__blog__link mt-auto" href="/b/${curBlogEntry.urlTitle}">
65 ${curBlogEntry.getTitle()}
66 </a>
67 </h2>
68 <#if curBlogEntry.getDescription()??>
69 <p class="card-text">${curBlogEntry.getDescription()}</p>
70 </#if>
71 </div>
72
73 <div class="card-footer">
74 <div class="d-flex flex-wrap align-items-start float-left pb-3">
75 <#assign blogTags = AssetTagLocalService.getTags("com.liferay.blogs.model.BlogsEntry", curBlogEntry.entryId)>
76 <#assign bookmarkURL = renderResponse.createRenderURL() />
77 ${bookmarkURL.setWindowState(windowStateFactory.getWindowState("NORMAL"))}
78 ${bookmarkURL.setParameter("mvcRenderCommandName", "/blogs/view_entry")}
79 <#if validator.isNotNull(curBlogEntry.getUrlTitle())>
80 ${bookmarkURL.setParameter("urlTitle", curBlogEntry.getUrlTitle())}
81 <#else>
82 ${bookmarkURL.setParameter("entryId", curBlogEntry.getEntryId()?string)}
83 </#if>
84 <#if blogTags?has_content>
85 <#list blogTags as blogTag>
86 <#assign tagURL = renderResponse.createRenderURL() />
87 ${tagURL.setParameter("resetCur", "true")}
88 ${tagURL.setParameter("tag", blogTag.getName())}
89 <a class="blog-categories" href="${tagURL}"><i aria-hidden="true">#</i>${blogTag.getName()}</a>
90 </#list>
91 </#if>
92 </div>
93 <div class="float-right img">
94 <a href="/b/${curBlogEntry.urlTitle}" class="gso__readmore-square">
95 <@liferay.language key="Leer Más" />
96 </a>
97 </div>
98 </div>
99 </div>
100 </div>
101 </#if> <#-- Fin de if showEntry -->
102 </#list>
103 </div>
104 </div>
105</#if>
106
107<style>
108/* --- Configuración de Imágenes --- */
109.card-img,
110.card-img picture {
111 width: 100%;
112 height: 250px;
113 display: block;
114}
115
116img {
117 height: inherit;
118 width: inherit;
119 object-fit: cover;
120}
121
122/* --- Estructura de la Card --- */
123.card {
124 border-radius: 0 96px 0 0;
125 overflow: hidden;
126 border: none;
127 line-height: 150% !important;
128 margin-bottom: 100px;
129}
130
131.card h2,
132.card p {
133 line-height: 150% !important;
134 word-wrap: normal; /* Corregido: era world-wrap */
135}
136
137.card .card-body {
138 margin: 25px 40px;
139 padding: unset;
140}
141
142/* --- Tipografía y Enlaces --- */
143.card-title {
144 margin-bottom: 15px;
145 font-size: 1.3rem !important;
146}
147
148.card-title a {
149 color: #485156;
150 font-family: "Avenir LT Std", sans-serif;
151 font-size: 28px;
152 font-style: normal;
153 font-weight: 700;
154 transition: color 0.3s ease-in-out;
155 text-decoration: none;
156}
157
158.card-body .card-text {
159 color: #485156;
160 font-family: "Avenir LT Std", sans-serif;
161 font-size: 20px;
162 font-style: normal;
163 font-weight: 400;
164 margin-bottom: 27px;
165}
166
167/* --- Footer y Elementos Extra --- */
168.card .card-footer {
169 display: contents;
170 height: max-content;
171}
172
173.card-footer .d-flex {
174 margin-left: 40px;
175 width: 60%;
176 padding: 1.25rem;
177}
178
179.card-footer .float-left div:first-child {
180 padding-left: unset;
181}
182
183.img {
184 bottom: 0;
185 right: 0;
186 position: absolute;
187}
188
189/* --- Media Queries --- */
190
191/* Escritorio / Tablet grande */
192@media (min-width: 991px) { /* Corregido: punto y coma eliminado */
193 .container .blogs .col-lg-6 {
194 flex: 0 0 47%;
195 max-width: 47%;
196 }
197}
198
199/* Móvil */
200@media (max-width: 500px) {
201 .blog-categories {
202 padding-right: 0;
203 }
204
205 .img {
206 width: auto;
207 position: unset;
208 }
209
210 #content,
211 #content section.bg- .col-md-12 {
212 padding: 0;
213 }
214
215 .card .card-body {
216 padding: unset;
217 margin: 1.25rem;
218 }
219
220 .card-title a {
221 font-size: 1.375rem;
222 }
223}
224
225/* --- Liferay Fixes --- */
226#p_p_id${renderResponse.getNamespace()} .portlet-title-text {
227 display: none;
228}
229</style>
Editar imagen banner principal





