Añadir portlet de Mapa Web con Velocity en Liferay

por

Cuando queremos que en nuestra cabecera o pie de página siempre nos aparezca un portlet determinado debemos de incluirlo a través de del código velocity correspondiente. Por tanto hoy os voy a enseñar como añadir un portlet de Mapa web y en posteriores post os iré enseñando los principales portlets que podemos añadir y para que sirve cada linea de código.

Vamos a ver poco a poco como es el código y que hace:


$velocityPortletPreferences.setValue("portlet-setup-show-borders",
"false")

Con esta línea establecemos que queremos que el portlet aparezca sin los bordes que trae por defecto. Nosotros solemos siempre desactivarlos pero cada uno puede hacer lo que prefiera.


$velocityPortletPreferences.setValue("group-id", "$group_id")

Establecemos el grupo al que pertenece el portlet. Esta linea deberiamos de dejarla siempre por defecto, tal y como está aquí.


$velocityPortletPreferences.setValue("root-layout-id", "2")

En esta línea definimos la raiz de la que cuelga el mapa web. Es una línea propia de este portlet. Si queremos saber que número debemos ponerle tan solo debemos de ir a la configuración del portlet e inspeccionar con el firebug de firefox el select con sus options que corresponde a la raiz de la que queremos que cuelga. Si nos fijamos en las option podemos ver que tiene un número identificador, ése es el número que debemos de incluir aquí. Por ejemplo, la raiz principal de la página será el 0, la primera página creada será el 1 y así sucesivamente. Es una línea opcional, por defecto se establece a 0.


$velocityPortletPreferences.setValue("display-depth", "1")

Con ésto establecemos la pronfundidad del mapa que queremos mostrar. Si ponemos un 0 lo mostraremos todo a partir de la raiz, con un 1 mostramos los hijos de la raiz, con un 2 mostramos los hijos de la raiz y a su vez los hijos de éstos y así sucesivamente. Es una linea opcional, por defecto se establece a 0.


$theme.runtime("85_INSTANCE_RECURSIVAS", "",
$velocityPortletPreferences.toString())

Lanza el portlet con el identificador, en este caso 85_INTANCE_RECURSIVA. (85 es el identificador genérico para el tipo mapa web. _instance_recursivas otorga un identificador único para este portlet de tipo mapaweb). Es una línea obligatoria y debe seguir rigurosamente la estructura establecida. Solo podríamos variar el "RECURSIVAS" ya que es el identificador que ponemos a nuestro gusto.


$velocityPortletPreferences.reset()

Y por último añadimos esta línea que hace un reset de las preferencias. Debemos incluirla siempre.

Os dejo aquí el código completo listo para incluirse:


$velocityPortletPreferences.setValue("portlet-setup-show-borders", "false")
$velocityPortletPreferences.setValue("group-id", "$group_id")
$velocityPortletPreferences.setValue("root-layout-id", "2") 
$velocityPortletPreferences.setValue("display-depth", "1") 
$theme.runtime("85_INSTANCE_RECURSIVAS", "", 
$velocityPortletPreferences.toString()) 
$velocityPortletPreferences.reset()

Todo este código deberíamos incluirlo en el portal-normal.vm del tema o ,en su defecto, en un archivo.vm independiente y luego cargarlo desde el portal-normal.

Espero que os sea de utilidad.

COMENTARIOS

19-12-2013 12:34:09
Pues debería! ;-) Muchas gracias, campeón!
19-12-2013 12:14:59
Realmente las preferencias que has puesto son las correctas pero concretamente en este portlet de mapa web las preferencias no funcionan muy bien precisamente a la hora de preconfigurarlas. Sobre todo en lo que se refiere a rootLayoutId y el displayDepth. Normalmenete hace caso omiso y tienes que configurarlo a mano desgraciadamente en las versiones 6.1.+. Nos ha pasado en proyectos pasados y no hemos conseguido darle solución. En otros portlets como el de visor web por ejemplo funcionan a la perfección. Eso si, recuerda que al visitar una página las preferencias quedan guardadas y si modificas alguna desde el tema de apariencia sin cambiar la instancia del portlet solo te la reconocerá en aquellas páginas que visites por primera vez. Podrías ponerme un me gusta si te ha ayudado :P (no es obligatorio :P) Un saludo.
18-12-2013 17:39:56
Buenas de nuevo. He aplicado este código en el footer del theme: #* Sitemap for the Footer Links *# #set ($portlet_id = '85') #set ($instance_id = 'c2c1') #* Preferences *# #set ($myPortletId = "${portlet_id}_INSTANCE_${instance_id}") $velocityPortletPreferences.setValue('portlet-setup-show-borders', 'false') $velocityPortletPreferences.setValue('rootLayoutId', 'f74bd692-715f-4532-8490-dee211bebed8') $velocityPortletPreferences.setValue('displayDepth', '0') $velocityPortletPreferences.setValue('showHiddenPages', 'false') $theme.runtime($myPortletId, '', $velocityPortletPreferences.toString()) #set ($VOID = $velocityPortletPreferences.reset()) El portlet se carga, pero no las preferencias. Estoy usando Liferay 6.1.0 CE. No sé si es un problema de nomenclatura de las propiedades o qué... Grasias de antebraso! XD
17-12-2013 12:09:56
Vale; ya he visto que me faltaba una comilla en la quinta línea... :-S Odio velocity y sus poco intuitivos errores. Gracias!
17-12-2013 12:08:47
No se si será esta pero en esta línea tienes comillas de apertura pero no de cierre: #set ($myPortletId = "${portlet_id}_INSTANCE_${instance_id}) Un saludo grande!
17-12-2013 11:20:07
He aplicado tu código y me tira un error de velocity en el que no acabo de caer: org.apache.jasper.JasperException: javax.servlet.ServletException: javax.servlet.jsp.JspException: org.apache.velocity.exception.ParseErrorException: Encountered "rootLayoutId" at C2C-61-Theme-theme_SERVLET_CONTEXT_/templates/portal_normal.vm[line 174, column 55] Was expecting one of: <RPAREN> ... <WHITESPACE> ...... El código que he añadido luce tal que así: #* Sitemap for the Footer Links *# #set ($portlet_id = '85') #set ($instance_id = 'C2C2013') #* Preferences *# #set ($myPortletId = "${portlet_id}_INSTANCE_${instance_id}) $velocityPortletPreferences.setValue("rootLayoutId", "f74bd692-715f-4532-8490-dee211bebed8") $velocityPortletPreferences.setValue("displayDepth", "0") $velocityPortletPreferences.setValue("showHiddenPages", "1") $theme.runtime($myPortletId, '', $velocityPortletPreferences.toString()) #set ($VOID = $velocityPortletPreferences.reset())
17-12-2013 10:19:52
Joder, crack, me has salvado la vida. Intentaba hacer exactamente esto y no encontraba información sobre los nombre de las preferencias para el sitemap. Y voy a dar contigo! Qué coincidencia!! Un abrazo y gracias! ;-)
26-08-2013 17:19:52
Una de las características que tiene Liferay es que las configuraciones de los portlets que incrustas en el portal_normal sólo se ven para aquellas páginas que no hallas visitado nunca ya que cuando entras por primera vez a una página guarda la configuración de la misma. Para solucionarlo debes modificar la instancia del portlet(85_INSTANCE_RECURSIVAS por 85_INSTANCE_RECURSIVAS2 por ejemplo). Con esto harás que se resetee en todas las páginas. Sobre lo del buscador, es verdad que tienen la misma estructura pero estan situados en zonas diferentes por lo que puedes identificar el portlet por alguna clase que haya en la cabecera pero en el contenido no.
26-08-2013 12:33:12
Gracias por tu respuesta. Sobre lo de los idiomas sigue el problema de que no se me propagan en todas las páginas la configuración. En unas se queda con la lista (3) en otras con las banderitas (1). Y lo raro es que no aparecen las opciones para poder modificarlos manualmente. Esto todo con el portlet incrustado en portal_normal.vm Sobre lo del portlet de búsqueda no puedo suprimir por css porque y las dos estructuras tiran de mismas clases. Saludos.
23-08-2013 13:22:03
Hola Mihail, para incluirlo en la 6.1 el código sería el siguiente: $velocityPortletPreferences.setValue("portletSetupShowBorders", "false") $velocityPortletPreferences.setValue("groupId", "$group_id") $velocityPortletPreferences.setValue("rootLayoutId", "2") $velocityPortletPreferences.setValue("displayDepth", "1") $theme.runtime("85_INSTANCE_RECURSIVAS", "", $velocityPortletPreferences.toString()) $velocityPortletPreferences.reset() Como ves simplemente cambian ligeramente el nombre de las preferencias que en vez de ir separadas por guiones van juntas y con mayúsculas. Una cosa que sí que cambia radicalmente es el número del rootLayoutId. Ya no es un simple número, ahora es una tira de números y letras bastante extensa que ppuedes encontrar inspeccionando el select de selección de profundidad en la configuración del portlet una vez incrustado con el firebug. En cuanto al portlet de buscador, lo que hace es que una vez le das a buscar una palabra te redirige a otra página y carga sobre sí mismo y sobre el contenido de la página los resultados. Para solucionarlo hay 2 opciones: La primera es que ocultes los resultados de búsqueda mediante css que te sobran. La segunda opción consiste en utilizar un form hecho por ti en vez del portlet de formulario y a ese form le pones en el action la action que tiene el portlet de búsqueda por defecto. Espero que te sirva.
22-08-2013 21:30:02
Gracias por tu rápida respuesta. Uso la 6.1.1 Es que se me comporta todo muy raro. Aparte del mapa_web Le he metido en portal_normal el buscador para que salga en todas las paginas y cuando busco una palabra. En la pagina del resulatado de busqueda me pinta dos veces la búsqueda. La segunda en la parte que tengo asignado el cuerpo. Previamente ahí no había nada.
22-08-2013 00:04:21
Muchas gracias Mihail. Que versión de Liferay tienes? Este código es para la 6.0 solo. En la 6.1 cambia un poco
21-08-2013 17:18:53
Hola! Me son muy útiles tus posts. Necesito usar estas preferencias para el sitemap pero no me funcionan. No me da ningun error. Simplemente no hace nada.
02-12-2011 21:07:27
Muchas gracias. Si, esa fue mi gran motivación para empezar a escribir sobre Liferay, y es que no hay prácticamente nada de información en español. Yo me encontré en la misma situación que tu cuando empecé. Una vez más gracias por tu comentario.
02-12-2011 14:47:40
Hola, ando mirando tus post de Liferay y me han sido de gran utilidad pues no hay mayor información de Liferay en Español, Saludos desde Col.

DEJA TU COMENTARIO