Navegación por categorías

Navegación por categorías

Se ha producido un error al procesar la plantilla.
The following has evaluated to null or missing:
==> document.selectSingleNode("/root/dynamic-element[@name='titulo']/dynamic-content")  [in template "30812#30846#40995" at line 201, column 78]

----
Tip: If the failing expression is known to be 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: titleNode = document.selectSingleNode...  [in template "30812#30846#40995" at line 201, column 66]
	- Reached through: #assign-container  [in template "30812#30846#40995" at line 200, column 57]
----
1<#assign ParamUtil = staticUtil["com.liferay.portal.kernel.util.ParamUtil"] 
2         SAXReaderUtil = staticUtil["com.liferay.portal.kernel.xml.SAXReaderUtil"] 
3         PortletURLFactoryUtil = staticUtil["com.liferay.portal.kernel.portlet.PortletURLFactoryUtil"] 
4         PropsUtil = staticUtil["com.liferay.portal.kernel.util.PropsUtil"] 
5         PortletRequest = staticUtil["javax.portlet.PortletRequest"] 
6         assetCategoryService =  serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryLocalService") 
7         assetCategoryPropertyService =  serviceLocator.findService("com.liferay.asset.kernel.service.AssetCategoryPropertyLocalService") 
8         assetEntryService = serviceLocator.findService("com.liferay.asset.kernel.service.AssetEntryLocalService") 
9         journalArticleService = serviceLocator.findService("com.liferay.journal.service.JournalArticleLocalService") 
10         layoutLocalService = serviceLocator.findService("com.liferay.portal.kernel.service.LayoutLocalService") 
11         categoryId =ParamUtil.getLong(renderRequest,"categoryId", 0) 
12         assetCategoriesCustomService = serviceLocator.findService("pa.mtl.assetcategories.customservice.api.AssetCategoriesCustomServiceApi") 
13         HtmlUtil = staticUtil["com.liferay.portal.kernel.util.HtmlUtil"] 
14         maxLoop = 100 
15/> 
16 
17<#if ! themeDisplay ? has_content>         
18    <#assign liferay_theme = PortletJspTagLibs["/META-INF/liferay-theme.tld"] /> 
19    <@liferay_theme["defineObjects"] /> 
20</#if> 
21 
22 
23<#-- inicialización de categoría: si no hay seleccionada se coge la primera de la jerarquía --> 
24<#if (categoryId <= 0) > 
25     
26    <#if entries?has_content> 
27        <#foreach vocabulary in entries> 
28         
29            <#foreach aCategory in vocabulary.getCategories()> 
30                <#list 1..maxLoop as i> 
31                    <#if aCategory.getParentCategory()?has_content> 
32                        <#assign aCategory = aCategory.getParentCategory()/> 
33                    <#else> 
34                        <#assign categoryId = aCategory.getCategoryId()/> 
35                        <#break>  
36                   </#if>   
37                </#list> 
38            </#foreach> 
39             
40        </#foreach> 
41    </#if> 
42     
43</#if> 
44 
45<#-- obtener categoría actual y subcategorías --> 
46<#assign currentCategory = assetCategoryService.getAssetCategory(categoryId) 
47         childCategories = assetCategoriesCustomService.getChildCategoriesOrdered(categoryId,locale) 
48         showContents = true 
49         forceShowCategories = false/> 
50          
51 <#if childCategories?has_content> 
52 	 
53 	<#foreach childCategory in childCategories> 
54    	<#assign childCategoriesSub =assetCategoriesCustomService.getChildCategoriesOrdered(childCategory.getCategoryId(),locale)/> 
55                                 
56        <#if (childCategoriesSub ? has_content)> 
57        	<#assign showContents = false/> 
58        	<#break/> 
59        </#if> 
60   </#foreach> 
61 </#if> 
62  
63 <#if assetCategoryPropertyService.getCategoryProperty(currentCategory.getCategoryId(),"idContenido")? has_content > 
64 	<#assign contentIdProperty = assetCategoryPropertyService.getCategoryProperty(currentCategory.getCategoryId(),"idContenido")/> 
65	<#assign contentId = contentIdProperty.getValue()/> 
66	<#if contentId ? has_content> 
67		<#assign journalArticle = journalArticleService.getLatestArticle(groupId,contentId) 
68				 document = SAXReaderUtil.read(journalArticle.getContentByLocale(locale))/> 
69		<#if  document.selectSingleNode("/root/dynamic-element[@name='mostrarSubcategorias']/dynamic-content") ? has_content> 
70			<#assign mostrarSubcategoriasNode = document.selectSingleNode("/root/dynamic-element[@name='mostrarSubcategorias']/dynamic-content") 
71		         	 mostrarSubcategoriasHome = mostrarSubcategoriasNode.getText() 
72		     />	 
73		     <#if mostrarSubcategoriasHome == "true"> 
74		     	<#assign showContents = false 
75		     			 forceShowCategories = true/> 
76		     </#if> 
77		</#if>	                     
78	</#if> 
79</#if> 
80 
81 
82<#if showContents> 
83	 <#if childCategories?has_content> 
84		<#-- pintar contenidos de las subcategorías --> 
85		<div class="categorias-con-contenidos"> 
86			<div class="card flex-md-row mb-4 box-shadow h-md-250"> 
87	        	<div class="card-body d-flex flex-column align-items-start">   
88					<h2 class="mb-0">${currentCategory.getTitle(locale)}</h2> 
89										 
90					<#if childCategories?has_content> 
91				    	<#foreach childCategory in childCategories> 
92				    		<div class="categoria-asociada"> 
93								<div class="col-md-12">	 
94						        	<h3 class="title">${childCategory.getTitle(locale)}</h3> 
95						        	<div class="row col-md-12"> 
96							            <#assign journalArticles = assetCategoriesCustomService.findJournalArticlesByCategoryId(childCategory.getCategoryId(), groupId, 0, null, "title", "asc", null, null)/>             	 
97							             
98							            <#list journalArticles as journalArticle> 
99							            	<#assign document = SAXReaderUtil.read(journalArticle.getContentByLocale(locale)) 
100								                     titleNode = document.selectSingleNode("/root/dynamic-element[@name='titulo']/dynamic-content") 
101								                     title = titleNode.getText() 
102								                     descriptionNode = document.selectSingleNode("/root/dynamic-element[@name='resumen']/dynamic-content") 
103								                     description = HtmlUtil.stripHtml(descriptionNode.getText()) 
104								                     currentUrl = renderResponse.createRenderURL() 
105								                     detailPage = "detalle" 
106						                         	 layoutDetail = layoutLocalService.getFriendlyURLLayout(themeDisplay.getScopeGroupId(), false, "/"+detailPage) 
107						                 			 detailUrl = PortletURLFactoryUtil.create(request, "com_liferay_asset_categories_navigation_web_portlet_AssetCategoriesNavigationPortlet", layoutDetail.getPlid(), PortletRequest.RENDER_PHASE) 
108						                 			/> 
109								                      
110								                     ${currentUrl.setParameter("categoryId",categoryId+"")} 
111								                     ${detailUrl.setParameter("categoryId",childCategory.getCategoryId()+"")} 
112								                     ${detailUrl.setParameter("articleId", journalArticle.getArticleId())} 
113								                      
114								             
115								            <div class="col-md-6 articulo-relacionado"> 
116								            	<h4 class="title">${title}</h4> 
117								            	<div class="summary"> 
118								            		<#if (description?length > 300)> 
119														<div class="summary-buscador">${description[0..300] + "..."}</div> 
120													<#else> 
121														<div class="summary-buscador">${description}</div> 
122													</#if>	 
123								            	</div> 
124								            	<div class="link-more"> 
125								            		<a class="more-information" title="${languageUtil.get(locale,'general.more-info-about')} ${title}" href="${detailUrl}&articleId=${journalArticle.getArticleId()}&title=${HtmlUtil.escapeURL(title)}&redirect=${HtmlUtil.escapeURL(currentUrl)}">${languageUtil.get(locale,"general.more-info")}</a> 
126												</div> 
127								            </div>       
128								                      
129							            </#list>    
130							        </div> <!-- row col-md-12 -->               
131						        </div> <!--col-md-12-->	 
132							</div><!-- categoria-asociada -->                      
133				        </#foreach> 
134				    </#if>  
135				     
136				     
137				     
138	                        <#-- pintar contenidos de la categoría seleccionada --> 
139	                         
140	                        <#assign journalArticles = assetCategoriesCustomService.findJournalArticlesByCategoryId(categoryId, groupId, 0, null, "title", "asc", null, null)/>             	 
141												             
142							<#if journalArticles ? has_content>					             
143								<div class="categoria-asociada"> 
144									<div class="col-md-12">	 
145										<h3 class="title">${languageUtil.get(locale,'general.other-info')}</h3> 
146											<div class="row col-md-12"> 
147												<#list journalArticles as journalArticle> 
148												 	<#assign document = SAXReaderUtil.read(journalArticle.getContentByLocale(locale)) 
149													         titleNode = document.selectSingleNode("/root/dynamic-element[@name='titulo']/dynamic-content") 
150													         title = titleNode.getText() 
151													         descriptionNode = document.selectSingleNode("/root/dynamic-element[@name='resumen']/dynamic-content") 
152													         description = HtmlUtil.stripHtml(descriptionNode.getText()) 
153													         currentUrl = renderResponse.createRenderURL() 
154													         detailPage = "detalle" 
155											              	 layoutDetail = layoutLocalService.getFriendlyURLLayout(themeDisplay.getScopeGroupId(), false, "/"+detailPage) 
156											        		 detailUrl = PortletURLFactoryUtil.create(request, "com_liferay_asset_categories_navigation_web_portlet_AssetCategoriesNavigationPortlet", layoutDetail.getPlid(), PortletRequest.RENDER_PHASE) 
157											        		/> 
158													                      
159													        ${currentUrl.setParameter("categoryId",categoryId+"")} 
160													        ${detailUrl.setParameter("categoryId",categoryId+"")} 
161													        ${detailUrl.setParameter("articleId", journalArticle.getArticleId())} 
162													                      
163													             
164													         <div class="col-md-6 articulo-relacionado"> 
165													           	<h4 class="title">${title}</h4> 
166													            <div class="summary"> 
167													            		<#if (description?length > 300)> 
168																			<div class="summary-buscador">${description[0..300] + "..."}</div> 
169																		<#else> 
170																			<div class="summary-buscador">${description}</div> 
171																		</#if>	 
172													            </div> 
173													            	<div class="link-more"> 
174													            		<a class="more-information" title="${languageUtil.get(locale,'general.more-info-about')} ${title}" href="${detailUrl}&articleId=${journalArticle.getArticleId()}&title=${HtmlUtil.escapeURL(title)}&redirect=${HtmlUtil.escapeURL(currentUrl)}">${languageUtil.get(locale,"general.more-info")}</a> 
175																	</div> 
176													          </div>       
177													                      
178												   </#list>    
179											</div> <!-- row col-md-12 -->               
180									 </div> <!--col-md-12-->	 
181								</div><!-- categoria-asociada -->   
182	                      </#if> 
183				     
184				      					 
185				</div> 
186			</div> 
187		</div><!-- categorias-con-contenidos --> 
188	<#else> 
189		<#-- pintar directamente los contenidos de la categoría  --> 
190		 
191			<div class="card flex-md-row mb-4 box-shadow h-md-250"> 
192	        	<div class="card-body d-flex flex-column align-items-start">   
193					<h2 class="mb-0">${currentCategory.getTitle(locale)}</h2> 
194					<div class="outer"> 
195		            <div class="row content-two-columns"> 
196					 
197						<#assign journalArticles = assetCategoriesCustomService.findJournalArticlesByCategoryId(currentCategory.getCategoryId(), groupId, 0, null, "title", "asc", null, null)/>             	 
198						 
199						<#list journalArticles as journalArticle> 
200							<#assign document = SAXReaderUtil.read(journalArticle.getContentByLocale(locale)) 
201							         titleNode = document.selectSingleNode("/root/dynamic-element[@name='titulo']/dynamic-content") 
202							         title = titleNode.getText() 
203							         descriptionNode = document.selectSingleNode("/root/dynamic-element[@name='resumen']/dynamic-content") 
204							         description = HtmlUtil.stripHtml(descriptionNode.getText()) 
205							         currentUrl = renderResponse.createRenderURL() 
206							         detailPage = "detalle" 
207						             layoutDetail = layoutLocalService.getFriendlyURLLayout(themeDisplay.getScopeGroupId(), false, "/"+detailPage) 
208						             detailUrl = PortletURLFactoryUtil.create(request, "com_liferay_asset_categories_navigation_web_portlet_AssetCategoriesNavigationPortlet", layoutDetail.getPlid(), PortletRequest.RENDER_PHASE) 
209						             /> 
210							          
211							         ${currentUrl.setParameter("categoryId",currentCategory.getCategoryId()+"")} 
212							         ${detailUrl.setParameter("categoryId",currentCategory.getCategoryId()+"")} 
213							         ${detailUrl.setParameter("articleId", journalArticle.getArticleId())} 
214							          
215							 
216							<div class="col-md-6 articulo-relacionado"> 
217								<h4 class="title">${title}</h4> 
218								<div class="summary"> 
219									<#if (description?length > 300)> 
220										<div class="summary-buscador">${description[0..300] + "..."}</div> 
221									<#else> 
222										<div class="summary-buscador">${description}</div> 
223									</#if>	 
224								</div> 
225								<div class="link-more"> 
226									<a class="more-information" title="${languageUtil.get(locale,'general.more-info-about')} ${title}" href="${detailUrl}&articleId=${journalArticle.getArticleId()}&title=${HtmlUtil.escapeURL(title)}&redirect=${HtmlUtil.escapeURL(currentUrl)}">${languageUtil.get(locale,"general.more-info")}</a> 
227								</div> 
228							</div>       
229								                      
230						</#list>    
231					</div> <!-- row col-md-12 -->     
232					</div> <!-- outer -->    
233				</div> 
234			 
235		</div> 
236	</#if> 
237	 
238<#else> 
239	<#-- pintar las subcategorías --> 
240	<div class="row contenedor-categorias"> 
241	    <#-- pintar detalle de categoría con estilo 2 columnas -->    
242	        <div class="col-md-12"> 
243	            <div class="card flex-md-row mb-4 box-shadow h-md-250"> 
244	                <div class="card-body d-flex flex-column align-items-start">                      
245	                    <h2 class="mb-0">${currentCategory.getTitle(locale)}</h2>   
246	                     
247	                    <div class="outer"> 
248		                    <div class="row content-two-columns"> 
249		                       	 
250	                        <#if childCategories?has_content> 
251	                            <#foreach childCategory in childCategories> 
252	                                <#assign childCategoriesSub =assetCategoriesCustomService.getChildCategoriesOrdered(childCategory.getCategoryId(),locale)/> 
253	                                 
254	                                <#if (childCategoriesSub ? has_content || forceShowCategories)> 
255	                                	<#-- se pintan las subcategorías --> 
256	                                	 
257	                                	 <#-- obtener el contenido de la categoría hija --> 
258		                                <#if assetCategoryPropertyService.getCategoryProperty(childCategory.getCategoryId(),"idContenido") ? has_content > 
259		                                    <#assign contentIdProperty = assetCategoryPropertyService.getCategoryProperty(childCategory.getCategoryId(),"idContenido")/> 
260		                                    <#assign contentId = contentIdProperty.getValue()/> 
261		                                    <#if contentId ? has_content> 
262		                                        <#assign journalArticleSub = journalArticleService.getLatestArticle(groupId,contentId)/> 
263		                                         
264		                                        <#if journalArticleSub?has_content> 
265		                                            <#-- obtener el contenido de la categoría actual --> 
266		                                            <#assign childCategoryContent = journalArticleService.getArticleContent(journalArticleSub, "","VIEW", locale, themeDisplay)/> 
267		                                             
268		                                            <#assign document = SAXReaderUtil.read(journalArticleSub.getContentByLocale(locale)) 
269		                                                     pageDetailNode =  document.selectSingleNode("/root/dynamic-element[@name='paginaDetalle']/dynamic-content") 
270		                                            /> 
271		                                            <#assign    ficheroEnlaceArticleContent=""/> 
272		                                            <#if document.selectSingleNode("/root/dynamic-element[@name='ficheroEnlace']/dynamic-content")?has_content> 
273		                                                <#assign    ficheroEnlaceNode = document.selectSingleNode("/root/dynamic-element[@name='ficheroEnlace']/dynamic-content")/> 
274		                                                <#if ficheroEnlaceNode.getText() ? has_content> 
275		                                                    <#assign  ficheroEnlaceJSONObject = jsonFactoryUtil.createJSONObject(ficheroEnlaceNode.getText()) 
276		                                                	/> 
277		                                                 
278		                                                	<#if  ficheroEnlaceJSONObject.get("classPK")?has_content> 
279		                                                    	<#assign ficheroEnlaceClassPk = ficheroEnlaceJSONObject.get("classPK") 
280		                                                            ficheroEnlaceArticle =  journalArticleService.fetchLatestArticle(ficheroEnlaceClassPk?number) 
281		                                                            ficheroEnlaceArticleContent = journalArticleService.getArticleContent(ficheroEnlaceArticle, "","VIEW", locale, themeDisplay) 
282		                                                        /> 
283		                                               		 </#if> 
284		            									</#if> 
285		                                            </#if> 
286		                                        </#if> 
287		                                    </#if> 
288		                                 </#if> 
289		                                  
290		                                 <#-- si la categoría hija tiene hijas enlaza a la misma página --> 
291		                                 <#if (childCategoriesSub ? has_content) && (! (pageDetailNode?has_content && pageDetailNode.getText()?has_content))> 
292		                                    <#assign detailUrl = renderResponse.createRenderURL() 
293		                                             layoutDetail = "" 
294		                                    /> 
295		                                    ${detailUrl.setParameter("categoryId",childCategory.getCategoryId()+"")}                                           
296		                                     
297		                                 <#elseif pageDetailNode?has_content && pageDetailNode.getText()?has_content> 
298		                                    <#-- si no tiene hijas enlazará con una página de detalle especificada en el contenido --> 
299		                                        <#assign  pageDetail = pageDetailNode.getText()/> 
300		                                        <#if (pageDetail?index_of("@")>0)> 
301		                                            <#assign pageDetailPosition = (pageDetail?index_of("@")-1) 
302		                                                    pageDetail = pageDetail[0..pageDetailPosition] 
303		                                                    layoutDetail = layoutLocalService.getLayout(themeDisplay.getScopeGroupId(),false,pageDetail?number) 
304		                                             /> 
305		                                         </#if> 
306		                                  <#else> 
307		                                        <#assign detailPage = "general" 
308		                                                 layoutDetail = layoutLocalService.getFriendlyURLLayout(themeDisplay.getScopeGroupId(), false, "/"+detailPage) /> 
309		                                   </#if> 
310		                                     
311		                                    <#if layoutDetail ? has_content> 
312		                                        <#assign detailUrl = PortletURLFactoryUtil.create(request, "com_liferay_asset_categories_navigation_web_portlet_AssetCategoriesNavigationPortlet", layoutDetail.getPlid(), PortletRequest.RENDER_PHASE)  /> 
313		                                    <#else> 
314		                                        <#assign detailUrl = renderResponse.createRenderURL()> 
315		                                    </#if> 
316		                                     
317		                                    ${detailUrl.setParameter("categoryId",childCategory.getCategoryId()+"")} 
318		                                 
319		                                <#-- pintar el detalle de la categoría --> 
320		                                <#if childCategoryContent?has_content> 
321		                                     
322		                                    <#-- pintar detalle de categoría con estilo 2 columnas -->    
323		                                        <div class="col-md-6"> 
324		                                            ${childCategoryContent}   
325		                                             
326		                                             <#if ficheroEnlaceArticleContent?has_content> 
327		                                                <div class="fichero-enlace-categoria"> 
328		                                                    ${ficheroEnlaceArticleContent} 
329		                                                </div> 
330		                                            <#else>                                         
331		                                                <a class="more-information" title="${languageUtil.get(locale,'general.more-info-about')} ${childCategory.getTitle(locale)}" href="${detailUrl}"><@liferay.language key="general.more-info" /></a> 
332		                                            </#if> 
333		                                             
334		                                        </div>   
335	                                    </#if> 
336	                                 
337	                                </#if> 
338	                                 
339	                            </#foreach> 
340	                        </#if>    
341	                         
342	                         
343	                        <#-- pintar contenidos de la categoría seleccionada --> 
344	                         
345	                        <#assign journalArticles = assetCategoriesCustomService.findJournalArticlesByCategoryId(categoryId, groupId, 0, null, "title", "asc", null, null)/>             	 
346												             
347							<#if journalArticles ? has_content>					             
348								<div class="categoria-asociada"> 
349									<div class="col-md-12">	 
350										<h3 class="title">${languageUtil.get(locale,'general.other-info')}</h3> 
351											<div class="row col-md-12"> 
352												<#list journalArticles as journalArticle> 
353												 	<#assign document = SAXReaderUtil.read(journalArticle.getContentByLocale(locale)) 
354													         titleNode = document.selectSingleNode("/root/dynamic-element[@name='titulo']/dynamic-content") 
355													         title = titleNode.getText() 
356													         descriptionNode = document.selectSingleNode("/root/dynamic-element[@name='resumen']/dynamic-content") 
357													         description = HtmlUtil.stripHtml(descriptionNode.getText()) 
358													         currentUrl = renderResponse.createRenderURL() 
359													         detailPage = "detalle" 
360											              	 layoutDetail = layoutLocalService.getFriendlyURLLayout(themeDisplay.getScopeGroupId(), false, "/"+detailPage) 
361											        		 detailUrl = PortletURLFactoryUtil.create(request, "com_liferay_asset_categories_navigation_web_portlet_AssetCategoriesNavigationPortlet", layoutDetail.getPlid(), PortletRequest.RENDER_PHASE) 
362											        		/> 
363													                      
364													        ${currentUrl.setParameter("categoryId",categoryId+"")} 
365													        ${detailUrl.setParameter("categoryId",categoryId+"")} 
366													        ${detailUrl.setParameter("articleId", journalArticle.getArticleId())} 
367													                      
368													             
369													         <div class="col-md-6 articulo-relacionado"> 
370													           	<h4 class="title">${title}</h4> 
371													            <div class="summary"> 
372													            		<#if (description?length > 300)> 
373																			<div class="summary-buscador">${description[0..300] + "..."}</div> 
374																		<#else> 
375																			<div class="summary-buscador">${description}</div> 
376																		</#if>	 
377													            </div> 
378													            	<div class="link-more"> 
379													            		<a class="more-information" title="${languageUtil.get(locale,'general.more-info-about')} ${title}" href="${detailUrl}&articleId=${journalArticle.getArticleId()}&title=${HtmlUtil.escapeURL(title)}&redirect=${HtmlUtil.escapeURL(currentUrl)}">${languageUtil.get(locale,"general.more-info")}</a> 
380																	</div> 
381													          </div>       
382													                      
383												   </#list>    
384											</div> <!-- row col-md-12 -->               
385									 </div> <!--col-md-12-->	 
386								</div><!-- categoria-asociada -->   
387	                      </#if> 
388	                       
389	                   </div>          
390	                </div>            
391	            </div><!-- card-body -->                  
392	        </div><!-- card --> 
393	    </div><!-- col-md-12 --> 
394       
395	</div><!-- row --> 
396 
397</#if> 

Publicador de contenidos

Publicador de contenidos

Publicador de contenidos

Publicador de contenidos

Publicador de contenidos

Publicador de contenidos