SlideShare una empresa de Scribd logo
1 de 44
Descargar para leer sin conexión
Liferay Core Engineer
Julio Camarero
Desarrollo de Temas de
Apariencia para Liferay
¿Qué se puede hacer
con un tema de
apariencia de Liferay?
Flexibilidad Total
• Desde un tema se pueden cambiar
todo!
‣ Todas las imágenes e iconos usadas dentro
y fuera de los portlets
‣ Html de cualquier parte del portal
‣ La posición y funcionamiento de todos los
elementos del portal
‣ Cualquier fichero jsp
Introducción
• Liferay Portal trae por defecto 2 temas:
‣ Classic: Tema por defecto, pensado para páginas no públicas.
‣ Control Panel: Tema utilizado en el Panel de Control
• Los temas se pueden buscar e instalar desde el
Instalador de Plugins del Panel de Control.
* En el sitio web de Liferay (y marketplace próximamente) se pueden encontrar y
descargar muchos temas adicionales (algunos de Liferay y otros de la comunidad):

http://www.liferay.com/web/guest/downloads/official_plugins
Manos a la obra!
• Desde el Liferay IDE:

File → New → Liferay Project
‣ Seleccionamos “Theme”
‣ Elegimos un nombre
‣ Seleccionamos el Plugins SDK
actual y el servidor dónde
tenemos Liferay.
* Por defecto, nuestro tema
extiende a _styled
Herencia de temas
• _unstyled
‣ plantillas (html)
‣ imágenes
Herencia de temas
•_styled
‣ estilo (css)
Herencia de temas
* El tema del que queremos heredar se cambia con la propiedad
theme.parent del fichero build.xml en la carpeta de nuestro tema.
• classic
• control panel
Nos basamos en diferencias
• En vez de empezar cada vez de cero, los temas de
Liferay se basan en diferencias sobre un tema en el
que nos basamos. (En general, styled o classic)
‣ Automáticamente nuestro tema tiene las últimas mejoras
‣ Nos beneficiamos de la corrección de fallos y parches de seguridad
‣ Se reduce el código a mantener
* La carpeta _diffs contendrá nuestros cambios.

Desplegarlo
• Para desplegar el tema, simplemente arrástralo hasta el
servidor.
* Para Exportarlo como un .war, click derecho en la raíz del
proyecto --> Export (pegando este war en la carpeta deploy de
otro servidor también se instala sólo)
Thumbnail
• Cambia el fichero screenshot.png por una captura real
para verlo desde la administración de páginas.
¿Qué hay que
saber para hacer
un tema?
CSS
• Utiliza custom.css para incluir tus cambios o hacer
imports de otros ficheros
‣ al ser el último fichero cargado, siempre tiene preferencia)
‣ Si estás extendiendo un tema distinto de _styled reutiliza su
custom.css o incluso mejor impórtalo desde dentro del tuyo
para poder actualizarte en el futuro a nuevas versiones de ese
tema.
custom
.
Consejos CSS
• Utiliza firebug o inspectores similares para
visualizar de manera más rápida tus cambios.
• Utiliza las clases .ie, .ie6, .firefox, .safari, etc. en
lugar de “hacks” CSS “hacks” para aplicar
reglas CSS a navegadores específicos.
• Todos los portlets de liferay están rodeados por
una clase particular (asset-publisher-portlet,
users-admin-portlet...ect) que puede ser
encontrada en el liferay-portlet.xml
Nuevo en 6.1: SAAS
• Soporte de SASS in all the css files 

Syntactically Awesome StyleSheets http://sass-lang.com/
‣ variables CSS
‣ Anidamiento de selectores
‣ Mixins (funciones)
‣ Herencia de selectores
Ficheros base CSS
• application.css - Estilos relacionados con la aplicación
(pestañas, selectores, ...)
• base.css - estilo básico que aplica a todo el portal
• dockbar - estilo relacionado con la dockbar
• forms – estilo relacionado con formularios
• layout.css - estilo relacionado con la maquetación de las
páginas
• main.css - importa al resto de ficheros css
• navigation.css - estilo de la navegación
• portlet.css - estilo de cada portlet
• custom.css - aquí irán nuestras diferencias
Plantillas
• Permiten crear contenido dinámico de manera sencilla
en el tema. Se puede utilizar velocity o freemarker.
• portal_normal.vm: Controla es esqueleto básico del
HTML de todas las páginas.
• init_custom.vm: En este fichero se pueden definir
nuevas varibales de velocity
• navigation.vm: Es llamado desde portal_normal.vm,
genera la barra de navegación. portal_pop_up.vm:
This file handles the pop-up notifications for Liferay.
• portlet.vm: Envuelve el contenido de cada portlet.
Variables Velocity
• Encuentra todas las variables que tienes disponibles en
init.vm
• Entre ellas: $theme_display, $page, $portlet_display,
$user_id, $user_email_address, $language_id,
$company_logo, $nav_items... etc
Imágenes
• Separadas en carpetas por temática:
‣ common/ - imágenes genéricas.
‣ dockbar/ - imágenes relacioandas con la dockbar.
‣ portlet/ - imágenes relacionadas con cada portlet.
‣ ... etc
Consejos para
convertirte en un
gurú de los temas
Incrustar un portlet en una plantilla
• $theme.runtime(“3”) --> (búsqueda)
• $theme.runtime(“56_INSTANCE_ABCD”) --> Contenido
• Útil por ejemplo para:
‣ caja de búsqueda en todas las páginas
‣ pie de página
‣ funcionalidades transversales al portal
Acceder a los servicios
• $serviceLocator.findService(“...”)
‣ Para que los servicios no lancen excepciones:
$serviceLocator.findExceptionSafeService(“...”)
• Útil por ejemplo para acceder a:
‣ Listados de imágenes, documentos, contenidos...
#set($dlAppService =
$serviceLocator.findService("com.liferay.portlet.documentlibrary.service.DlAppServ
ice"))
#set($files = $dlAppService.getFileEntries($group_id, 0))
<ul>
#foreach($file in $files)
<li>$file.getTitle()</li>
#end
Acceder a los Custom Fields
• Permiten definir desde la Interfaz de Usuario nuevos
campos.
• Ejemplo para obtener el campo cssClass de la página
actual:
‣ $page.getExpandoBridge().getAttribute(“cssClass”)
Sobrescritura de jsps
• theme.jsp.override.enabled=true
• Duplica la estructura del jsp dentro de _diffs/templates
‣ Por ejemplo, para sobrescribir webapps/ROOT/html/portlet/
asset_publisher/display/abstracts.js
‣ Incluiríamos: my-theme/docroot/_diffs/templates/html/portlet/
asset_publisher/display/abstracts.vm
• Utiliza el lenguaje en el que se escribe tu tema!
Quiero tener varios
temas similares con
pequeñas diferencias
Esquemas de Color
• Permiten mostrar al usuarios variantes de un tema,
basadas en distintas imágenes y css.
• Se introducen en el fichero WEB-INF/liferay-look-and-
feel.properties
* si no tienes este fichero,
cópialo de la carpeta de tu
tema en el servidor de
aplicaciones dentro de
webapps
Ejemplo Esquemas de Color
<look-and-feel>
<theme id="my-training" name="My Training">
<color-scheme id="01" name="Blue">
<css-class>blue</css-class>
<color-scheme-images-path>${images-path}/color_schemes/${css-
class}</color-scheme-images-path>
</color-scheme>
<color-scheme id="02" name="Red">
<css-class>red</css-class>
<color-scheme-images-path>${images-path}/color_schemes/${css-
class}</color-scheme-images-path>
</color-scheme>
</theme>
</look-and-feel>
Theme Settings
• Pueden ser de 2 tipos:
‣ Estáticos: Nos permiten mostrar al usuario varios temas a elegir,
que en el fondo es uno sólo pero con pequeñas diferencias.
‣ Dinámicos: Permiten al usuario final seleccionar desde la
interfaz de usuario algunos elementos de configuración de su
tema.
Theme Settings Estáticos
<look-and-feel>
<theme id="tema1" name="Tema Uno">
<settings>
<setting key=”mi-setting” value=”mi-valor-1” />
<settings>
</theme>
<theme id="tema2" name="Tema Dos">
<settings>
<setting key=”mi-setting” value=”mi-valor-2” />
<settings>
</theme>
</look-and-feel>
* Desde Velocity: $theme_display.getThemeSetting("mi-
setting")
Theme Settings Dinámicos
<settings>

<setting configurable="true" key="bullet-style" options="dots,arrows"
type="select" value="dots" />



<setting configurable="true" key="portlet-setup-show-borders-default"
type="checkbox" value="true" />

</settings>
* Desde Velocity: $theme_display.getThemeSetting("bullet-
style")
Ejemplos Settings Dinámicos
Permiten utilizar javascript para hacer selectores dinámicos, por ejemplo,
un datapicker para elegir un color. Ver ejemplo aquí:



http://www.liferay.com/es/web/raymond.auge/blog/-/blogs/theme-settings-and-new-advanced-controls
¿Es necesario usar un
IDE? ¿Tengo que
desplegar cada vez que
hago un cambio?
...no :)
Desarrollo Rápido: sandbox
• Permite diseñar temas al estilo PHP, sin necesidad de
editor ni entorno de plugins.
• Los cambios se visualizan inmediatamente
• Para activarlo:
‣ sandbox.deploy.enabled=true
‣ sandbox.deploy.dir=${liferay.home}/sandbox
• Ejmplo: crea una carpeta dentro de tu sandbox llamada
prueba-theme
¡Gracias!
@liferay
@juliocamarero
julio.camarero@liferay.com

Más contenido relacionado

La actualidad más candente

Integrar Wordpress en sitios web ya existentes
Integrar Wordpress en sitios web ya existentesIntegrar Wordpress en sitios web ya existentes
Integrar Wordpress en sitios web ya existentesDavid Merinas Ariza
 
Los mejores trucos y prácticas para configurar drupal
Los mejores trucos y prácticas para configurar drupalLos mejores trucos y prácticas para configurar drupal
Los mejores trucos y prácticas para configurar drupalSiteGround España
 
Jornadas Odoo 2015 - Diseño y creación de un tema Bootstrap para Odoo
Jornadas Odoo 2015 - Diseño y creación de un tema Bootstrap para OdooJornadas Odoo 2015 - Diseño y creación de un tema Bootstrap para Odoo
Jornadas Odoo 2015 - Diseño y creación de un tema Bootstrap para OdooPedro Manuel Baeza Romero
 
Drupal 7 para sitios de alto rendimiento y alta disponibilidad
Drupal 7 para sitios de alto rendimiento y alta disponibilidadDrupal 7 para sitios de alto rendimiento y alta disponibilidad
Drupal 7 para sitios de alto rendimiento y alta disponibilidadIván Campaña Naranjo
 
Multiplica tu productividad usando un preprocesador de css
Multiplica tu productividad usando un preprocesador de cssMultiplica tu productividad usando un preprocesador de css
Multiplica tu productividad usando un preprocesador de cssLeonidas Esteban González
 
El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7Ymbra
 
Desarrollo Web: HTML + Bootstrap
Desarrollo Web: HTML + BootstrapDesarrollo Web: HTML + Bootstrap
Desarrollo Web: HTML + BootstrapWorkshop Digital
 
Los mejores trucos para aumentar la velocidad en joomla!
Los mejores trucos para aumentar la velocidad en joomla!Los mejores trucos para aumentar la velocidad en joomla!
Los mejores trucos para aumentar la velocidad en joomla!Carlos M. Cámara
 

La actualidad más candente (20)

Los mejores plugins para Wordpress
Los mejores plugins para WordpressLos mejores plugins para Wordpress
Los mejores plugins para Wordpress
 
Integrar Wordpress en sitios web ya existentes
Integrar Wordpress en sitios web ya existentesIntegrar Wordpress en sitios web ya existentes
Integrar Wordpress en sitios web ya existentes
 
Carlos Pascual #WPvalladolid 2014
Carlos Pascual #WPvalladolid 2014Carlos Pascual #WPvalladolid 2014
Carlos Pascual #WPvalladolid 2014
 
Bootstrap 3.
Bootstrap 3.Bootstrap 3.
Bootstrap 3.
 
Los mejores trucos y prácticas para configurar drupal
Los mejores trucos y prácticas para configurar drupalLos mejores trucos y prácticas para configurar drupal
Los mejores trucos y prácticas para configurar drupal
 
Jornadas Odoo 2015 - Diseño y creación de un tema Bootstrap para Odoo
Jornadas Odoo 2015 - Diseño y creación de un tema Bootstrap para OdooJornadas Odoo 2015 - Diseño y creación de un tema Bootstrap para Odoo
Jornadas Odoo 2015 - Diseño y creación de un tema Bootstrap para Odoo
 
Performance en Drupal 7
Performance en Drupal 7Performance en Drupal 7
Performance en Drupal 7
 
Drupal 7 para sitios de alto rendimiento y alta disponibilidad
Drupal 7 para sitios de alto rendimiento y alta disponibilidadDrupal 7 para sitios de alto rendimiento y alta disponibilidad
Drupal 7 para sitios de alto rendimiento y alta disponibilidad
 
Gutenberg sin miedo
Gutenberg sin miedoGutenberg sin miedo
Gutenberg sin miedo
 
wp-cli
wp-cliwp-cli
wp-cli
 
Webpack desde cero
Webpack desde ceroWebpack desde cero
Webpack desde cero
 
Multiplica tu productividad usando un preprocesador de css
Multiplica tu productividad usando un preprocesador de cssMultiplica tu productividad usando un preprocesador de css
Multiplica tu productividad usando un preprocesador de css
 
Unidad 7
Unidad 7Unidad 7
Unidad 7
 
Unidad 7
Unidad 7Unidad 7
Unidad 7
 
Semana 2 Configuración entorno de desarrollo
Semana 2   Configuración entorno de desarrolloSemana 2   Configuración entorno de desarrollo
Semana 2 Configuración entorno de desarrollo
 
Las Herramientas de un Frontend
Las Herramientas de un FrontendLas Herramientas de un Frontend
Las Herramientas de un Frontend
 
El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7El universo JavaScript en Drupal 7
El universo JavaScript en Drupal 7
 
Protostar como framework
Protostar como frameworkProtostar como framework
Protostar como framework
 
Desarrollo Web: HTML + Bootstrap
Desarrollo Web: HTML + BootstrapDesarrollo Web: HTML + Bootstrap
Desarrollo Web: HTML + Bootstrap
 
Los mejores trucos para aumentar la velocidad en joomla!
Los mejores trucos para aumentar la velocidad en joomla!Los mejores trucos para aumentar la velocidad en joomla!
Los mejores trucos para aumentar la velocidad en joomla!
 

Similar a Liferay Core Engineer: Desarrollo de Temas de Apariencia para Liferay

Liferay themestraining lr6.2-es_v1.0
Liferay themestraining lr6.2-es_v1.0Liferay themestraining lr6.2-es_v1.0
Liferay themestraining lr6.2-es_v1.0Juan Gallardo Ortiz
 
Introducción comprensivo al theming para Drupal 7 Front-end
Introducción comprensivo al theming para Drupal 7 Front-endIntroducción comprensivo al theming para Drupal 7 Front-end
Introducción comprensivo al theming para Drupal 7 Front-endJames Wilson
 
2-Diseñando el encabezado.pptx
2-Diseñando el encabezado.pptx2-Diseñando el encabezado.pptx
2-Diseñando el encabezado.pptxCarlosMora267870
 
Flujos de trabajo para un desarrollador web frontend
Flujos de trabajo para un desarrollador web frontendFlujos de trabajo para un desarrollador web frontend
Flujos de trabajo para un desarrollador web frontendLeonidas Esteban González
 
Sitio web (bootstrap4)
Sitio web (bootstrap4)Sitio web (bootstrap4)
Sitio web (bootstrap4)Emerson Garay
 
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...SergioIglesiasNET
 
Sitio web (bootstrap 3)
Sitio web (bootstrap 3)Sitio web (bootstrap 3)
Sitio web (bootstrap 3)Emerson Garay
 
III Meetup WordPress Almería | Framework themes
III Meetup WordPress Almería | Framework themesIII Meetup WordPress Almería | Framework themes
III Meetup WordPress Almería | Framework themesAntonio Torres
 
Crea temas para Wordpress sin saber programar
Crea temas para Wordpress sin saber programarCrea temas para Wordpress sin saber programar
Crea temas para Wordpress sin saber programarDani Reguera Bakhache
 
Como crear un subtheme Drupal usando zurb-foundation
Como crear un subtheme Drupal usando zurb-foundationComo crear un subtheme Drupal usando zurb-foundation
Como crear un subtheme Drupal usando zurb-foundationVeronica Karen Vedia Flores
 
Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterandrewzg
 
229707509 bootstrap-3-el-manual-oficial
229707509 bootstrap-3-el-manual-oficial229707509 bootstrap-3-el-manual-oficial
229707509 bootstrap-3-el-manual-oficialJavier Fonseca
 
MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!SergioIglesiasNET
 
Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web DesignJuan Morales
 
diseño web HTML aplicaciones web y demas
diseño web HTML aplicaciones web y demasdiseño web HTML aplicaciones web y demas
diseño web HTML aplicaciones web y demasjeacordoba2020
 
HTML.ppt
HTML.pptHTML.ppt
HTML.pptmanenc1
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5Cycle-IT
 

Similar a Liferay Core Engineer: Desarrollo de Temas de Apariencia para Liferay (20)

Liferay themestraining lr6.2-es_v1.0
Liferay themestraining lr6.2-es_v1.0Liferay themestraining lr6.2-es_v1.0
Liferay themestraining lr6.2-es_v1.0
 
Introducción comprensivo al theming para Drupal 7 Front-end
Introducción comprensivo al theming para Drupal 7 Front-endIntroducción comprensivo al theming para Drupal 7 Front-end
Introducción comprensivo al theming para Drupal 7 Front-end
 
2-Diseñando el encabezado.pptx
2-Diseñando el encabezado.pptx2-Diseñando el encabezado.pptx
2-Diseñando el encabezado.pptx
 
Servidores.pptx
Servidores.pptxServidores.pptx
Servidores.pptx
 
Flujos de trabajo para un desarrollador web frontend
Flujos de trabajo para un desarrollador web frontendFlujos de trabajo para un desarrollador web frontend
Flujos de trabajo para un desarrollador web frontend
 
Sitio web (bootstrap4)
Sitio web (bootstrap4)Sitio web (bootstrap4)
Sitio web (bootstrap4)
 
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
Joomla!Day 2011 España - Taller desarrollo de plantillas Joomla! - Sergio Igl...
 
Sitio web (bootstrap 3)
Sitio web (bootstrap 3)Sitio web (bootstrap 3)
Sitio web (bootstrap 3)
 
III Meetup WordPress Almería | Framework themes
III Meetup WordPress Almería | Framework themesIII Meetup WordPress Almería | Framework themes
III Meetup WordPress Almería | Framework themes
 
Crea temas para Wordpress sin saber programar
Crea temas para Wordpress sin saber programarCrea temas para Wordpress sin saber programar
Crea temas para Wordpress sin saber programar
 
Como crear un subtheme Drupal usando zurb-foundation
Como crear un subtheme Drupal usando zurb-foundationComo crear un subtheme Drupal usando zurb-foundation
Como crear un subtheme Drupal usando zurb-foundation
 
Gestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniterGestionar mis proyectos con ayuda de CodeIgniter
Gestionar mis proyectos con ayuda de CodeIgniter
 
229707509 bootstrap-3-el-manual-oficial
229707509 bootstrap-3-el-manual-oficial229707509 bootstrap-3-el-manual-oficial
229707509 bootstrap-3-el-manual-oficial
 
MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!MasterClass Desarrollo Plantillas Joomla!
MasterClass Desarrollo Plantillas Joomla!
 
Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web Design
 
diseño web HTML aplicaciones web y demas
diseño web HTML aplicaciones web y demasdiseño web HTML aplicaciones web y demas
diseño web HTML aplicaciones web y demas
 
HTML.ppt
HTML.pptHTML.ppt
HTML.ppt
 
HTML.ppt
HTML.pptHTML.ppt
HTML.ppt
 
HTML.ppt
HTML.pptHTML.ppt
HTML.ppt
 
Introducción a Foundation 5
Introducción a Foundation 5Introducción a Foundation 5
Introducción a Foundation 5
 

Más de Julio Camarero

Make the most of Audience Targeting 2.0
Make the most of Audience Targeting 2.0Make the most of Audience Targeting 2.0
Make the most of Audience Targeting 2.0Julio Camarero
 
Reaching the right audience
Reaching the right audienceReaching the right audience
Reaching the right audienceJulio Camarero
 
How to Extend Audience Targeting (Liferay 6.2)
How to Extend Audience Targeting (Liferay 6.2)How to Extend Audience Targeting (Liferay 6.2)
How to Extend Audience Targeting (Liferay 6.2)Julio Camarero
 
Leverage OSGI to create Extensible plugins for Liferay 6.2
Leverage OSGI to create Extensible plugins for Liferay 6.2Leverage OSGI to create Extensible plugins for Liferay 6.2
Leverage OSGI to create Extensible plugins for Liferay 6.2Julio Camarero
 
Introducing Audience Targeting for Liferay 6.2
Introducing Audience Targeting for Liferay 6.2Introducing Audience Targeting for Liferay 6.2
Introducing Audience Targeting for Liferay 6.2Julio Camarero
 
Optimizando Liferay 6.2 para dispositivos móviles
Optimizando Liferay 6.2 para dispositivos móvilesOptimizando Liferay 6.2 para dispositivos móviles
Optimizando Liferay 6.2 para dispositivos móvilesJulio Camarero
 
Taking Staging to a whole new level in Liferay 6.2
Taking Staging to a whole new level in Liferay 6.2Taking Staging to a whole new level in Liferay 6.2
Taking Staging to a whole new level in Liferay 6.2Julio Camarero
 
Using the Advanced Search Framework in Liferay 6.2
Using the Advanced Search Framework in Liferay 6.2Using the Advanced Search Framework in Liferay 6.2
Using the Advanced Search Framework in Liferay 6.2Julio Camarero
 
Using the Recycle Bin Framework in Liferay 6.2
Using the Recycle Bin Framework in Liferay 6.2Using the Recycle Bin Framework in Liferay 6.2
Using the Recycle Bin Framework in Liferay 6.2Julio Camarero
 
Liferay 6.2 y la norme UNE de accesibilidad
Liferay 6.2 y la norme UNE de accesibilidadLiferay 6.2 y la norme UNE de accesibilidad
Liferay 6.2 y la norme UNE de accesibilidadJulio Camarero
 
Facebook Integration with Liferay 6.2
Facebook Integration with Liferay 6.2Facebook Integration with Liferay 6.2
Facebook Integration with Liferay 6.2Julio Camarero
 
Gestión eficiente de Múltiples sitios web sobre Liferay 6.1
Gestión eficiente de Múltiples sitios web sobre Liferay 6.1Gestión eficiente de Múltiples sitios web sobre Liferay 6.1
Gestión eficiente de Múltiples sitios web sobre Liferay 6.1Julio Camarero
 
Cómo construir portales para móviles y tables con Liferay 6.1
Cómo construir portales para móviles y tables con Liferay 6.1Cómo construir portales para móviles y tables con Liferay 6.1
Cómo construir portales para móviles y tables con Liferay 6.1Julio Camarero
 
Cómo hacer portales accesibles sobre Liferay 6.1
Cómo hacer portales accesibles sobre Liferay 6.1Cómo hacer portales accesibles sobre Liferay 6.1
Cómo hacer portales accesibles sobre Liferay 6.1Julio Camarero
 
What's coming in WCM for Liferay 6.2?
What's coming in WCM for Liferay 6.2?What's coming in WCM for Liferay 6.2?
What's coming in WCM for Liferay 6.2?Julio Camarero
 
Liferay 6.1 Roadmap - What's next!
Liferay 6.1 Roadmap - What's next!Liferay 6.1 Roadmap - What's next!
Liferay 6.1 Roadmap - What's next!Julio Camarero
 
Implementing Acessibility in Liferay 6.1
Implementing Acessibility in Liferay 6.1Implementing Acessibility in Liferay 6.1
Implementing Acessibility in Liferay 6.1Julio Camarero
 

Más de Julio Camarero (18)

Make the most of Audience Targeting 2.0
Make the most of Audience Targeting 2.0Make the most of Audience Targeting 2.0
Make the most of Audience Targeting 2.0
 
Reaching the right audience
Reaching the right audienceReaching the right audience
Reaching the right audience
 
How to Extend Audience Targeting (Liferay 6.2)
How to Extend Audience Targeting (Liferay 6.2)How to Extend Audience Targeting (Liferay 6.2)
How to Extend Audience Targeting (Liferay 6.2)
 
Leverage OSGI to create Extensible plugins for Liferay 6.2
Leverage OSGI to create Extensible plugins for Liferay 6.2Leverage OSGI to create Extensible plugins for Liferay 6.2
Leverage OSGI to create Extensible plugins for Liferay 6.2
 
Introducing Audience Targeting for Liferay 6.2
Introducing Audience Targeting for Liferay 6.2Introducing Audience Targeting for Liferay 6.2
Introducing Audience Targeting for Liferay 6.2
 
Optimizando Liferay 6.2 para dispositivos móviles
Optimizando Liferay 6.2 para dispositivos móvilesOptimizando Liferay 6.2 para dispositivos móviles
Optimizando Liferay 6.2 para dispositivos móviles
 
Taking Staging to a whole new level in Liferay 6.2
Taking Staging to a whole new level in Liferay 6.2Taking Staging to a whole new level in Liferay 6.2
Taking Staging to a whole new level in Liferay 6.2
 
Using the Advanced Search Framework in Liferay 6.2
Using the Advanced Search Framework in Liferay 6.2Using the Advanced Search Framework in Liferay 6.2
Using the Advanced Search Framework in Liferay 6.2
 
Using the Recycle Bin Framework in Liferay 6.2
Using the Recycle Bin Framework in Liferay 6.2Using the Recycle Bin Framework in Liferay 6.2
Using the Recycle Bin Framework in Liferay 6.2
 
Liferay 6.2 y la norme UNE de accesibilidad
Liferay 6.2 y la norme UNE de accesibilidadLiferay 6.2 y la norme UNE de accesibilidad
Liferay 6.2 y la norme UNE de accesibilidad
 
Facebook Integration with Liferay 6.2
Facebook Integration with Liferay 6.2Facebook Integration with Liferay 6.2
Facebook Integration with Liferay 6.2
 
Gestión eficiente de Múltiples sitios web sobre Liferay 6.1
Gestión eficiente de Múltiples sitios web sobre Liferay 6.1Gestión eficiente de Múltiples sitios web sobre Liferay 6.1
Gestión eficiente de Múltiples sitios web sobre Liferay 6.1
 
Cómo construir portales para móviles y tables con Liferay 6.1
Cómo construir portales para móviles y tables con Liferay 6.1Cómo construir portales para móviles y tables con Liferay 6.1
Cómo construir portales para móviles y tables con Liferay 6.1
 
Cómo hacer portales accesibles sobre Liferay 6.1
Cómo hacer portales accesibles sobre Liferay 6.1Cómo hacer portales accesibles sobre Liferay 6.1
Cómo hacer portales accesibles sobre Liferay 6.1
 
What's coming in WCM for Liferay 6.2?
What's coming in WCM for Liferay 6.2?What's coming in WCM for Liferay 6.2?
What's coming in WCM for Liferay 6.2?
 
Liferay 6.1 Roadmap - What's next!
Liferay 6.1 Roadmap - What's next!Liferay 6.1 Roadmap - What's next!
Liferay 6.1 Roadmap - What's next!
 
Implementing Acessibility in Liferay 6.1
Implementing Acessibility in Liferay 6.1Implementing Acessibility in Liferay 6.1
Implementing Acessibility in Liferay 6.1
 
Disasters2.0
Disasters2.0Disasters2.0
Disasters2.0
 

Último

Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 

Último (7)

Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 

Liferay Core Engineer: Desarrollo de Temas de Apariencia para Liferay

  • 1. Liferay Core Engineer Julio Camarero Desarrollo de Temas de Apariencia para Liferay
  • 2. ¿Qué se puede hacer con un tema de apariencia de Liferay?
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13. Flexibilidad Total • Desde un tema se pueden cambiar todo! ‣ Todas las imágenes e iconos usadas dentro y fuera de los portlets ‣ Html de cualquier parte del portal ‣ La posición y funcionamiento de todos los elementos del portal ‣ Cualquier fichero jsp
  • 14. Introducción • Liferay Portal trae por defecto 2 temas: ‣ Classic: Tema por defecto, pensado para páginas no públicas. ‣ Control Panel: Tema utilizado en el Panel de Control • Los temas se pueden buscar e instalar desde el Instalador de Plugins del Panel de Control. * En el sitio web de Liferay (y marketplace próximamente) se pueden encontrar y descargar muchos temas adicionales (algunos de Liferay y otros de la comunidad):
 http://www.liferay.com/web/guest/downloads/official_plugins
  • 15. Manos a la obra! • Desde el Liferay IDE:
 File → New → Liferay Project ‣ Seleccionamos “Theme” ‣ Elegimos un nombre ‣ Seleccionamos el Plugins SDK actual y el servidor dónde tenemos Liferay. * Por defecto, nuestro tema extiende a _styled
  • 16. Herencia de temas • _unstyled ‣ plantillas (html) ‣ imágenes
  • 18. Herencia de temas * El tema del que queremos heredar se cambia con la propiedad theme.parent del fichero build.xml en la carpeta de nuestro tema. • classic • control panel
  • 19. Nos basamos en diferencias • En vez de empezar cada vez de cero, los temas de Liferay se basan en diferencias sobre un tema en el que nos basamos. (En general, styled o classic) ‣ Automáticamente nuestro tema tiene las últimas mejoras ‣ Nos beneficiamos de la corrección de fallos y parches de seguridad ‣ Se reduce el código a mantener * La carpeta _diffs contendrá nuestros cambios.

  • 20. Desplegarlo • Para desplegar el tema, simplemente arrástralo hasta el servidor. * Para Exportarlo como un .war, click derecho en la raíz del proyecto --> Export (pegando este war en la carpeta deploy de otro servidor también se instala sólo)
  • 21. Thumbnail • Cambia el fichero screenshot.png por una captura real para verlo desde la administración de páginas.
  • 22. ¿Qué hay que saber para hacer un tema?
  • 23. CSS • Utiliza custom.css para incluir tus cambios o hacer imports de otros ficheros ‣ al ser el último fichero cargado, siempre tiene preferencia) ‣ Si estás extendiendo un tema distinto de _styled reutiliza su custom.css o incluso mejor impórtalo desde dentro del tuyo para poder actualizarte en el futuro a nuevas versiones de ese tema. custom .
  • 24. Consejos CSS • Utiliza firebug o inspectores similares para visualizar de manera más rápida tus cambios. • Utiliza las clases .ie, .ie6, .firefox, .safari, etc. en lugar de “hacks” CSS “hacks” para aplicar reglas CSS a navegadores específicos. • Todos los portlets de liferay están rodeados por una clase particular (asset-publisher-portlet, users-admin-portlet...ect) que puede ser encontrada en el liferay-portlet.xml
  • 25. Nuevo en 6.1: SAAS • Soporte de SASS in all the css files 
 Syntactically Awesome StyleSheets http://sass-lang.com/ ‣ variables CSS ‣ Anidamiento de selectores ‣ Mixins (funciones) ‣ Herencia de selectores
  • 26. Ficheros base CSS • application.css - Estilos relacionados con la aplicación (pestañas, selectores, ...) • base.css - estilo básico que aplica a todo el portal • dockbar - estilo relacionado con la dockbar • forms – estilo relacionado con formularios • layout.css - estilo relacionado con la maquetación de las páginas • main.css - importa al resto de ficheros css • navigation.css - estilo de la navegación • portlet.css - estilo de cada portlet • custom.css - aquí irán nuestras diferencias
  • 27. Plantillas • Permiten crear contenido dinámico de manera sencilla en el tema. Se puede utilizar velocity o freemarker. • portal_normal.vm: Controla es esqueleto básico del HTML de todas las páginas. • init_custom.vm: En este fichero se pueden definir nuevas varibales de velocity • navigation.vm: Es llamado desde portal_normal.vm, genera la barra de navegación. portal_pop_up.vm: This file handles the pop-up notifications for Liferay. • portlet.vm: Envuelve el contenido de cada portlet.
  • 28. Variables Velocity • Encuentra todas las variables que tienes disponibles en init.vm • Entre ellas: $theme_display, $page, $portlet_display, $user_id, $user_email_address, $language_id, $company_logo, $nav_items... etc
  • 29. Imágenes • Separadas en carpetas por temática: ‣ common/ - imágenes genéricas. ‣ dockbar/ - imágenes relacioandas con la dockbar. ‣ portlet/ - imágenes relacionadas con cada portlet. ‣ ... etc
  • 30. Consejos para convertirte en un gurú de los temas
  • 31. Incrustar un portlet en una plantilla • $theme.runtime(“3”) --> (búsqueda) • $theme.runtime(“56_INSTANCE_ABCD”) --> Contenido • Útil por ejemplo para: ‣ caja de búsqueda en todas las páginas ‣ pie de página ‣ funcionalidades transversales al portal
  • 32. Acceder a los servicios • $serviceLocator.findService(“...”) ‣ Para que los servicios no lancen excepciones: $serviceLocator.findExceptionSafeService(“...”) • Útil por ejemplo para acceder a: ‣ Listados de imágenes, documentos, contenidos... #set($dlAppService = $serviceLocator.findService("com.liferay.portlet.documentlibrary.service.DlAppServ ice")) #set($files = $dlAppService.getFileEntries($group_id, 0)) <ul> #foreach($file in $files) <li>$file.getTitle()</li> #end
  • 33. Acceder a los Custom Fields • Permiten definir desde la Interfaz de Usuario nuevos campos. • Ejemplo para obtener el campo cssClass de la página actual: ‣ $page.getExpandoBridge().getAttribute(“cssClass”)
  • 34. Sobrescritura de jsps • theme.jsp.override.enabled=true • Duplica la estructura del jsp dentro de _diffs/templates ‣ Por ejemplo, para sobrescribir webapps/ROOT/html/portlet/ asset_publisher/display/abstracts.js ‣ Incluiríamos: my-theme/docroot/_diffs/templates/html/portlet/ asset_publisher/display/abstracts.vm • Utiliza el lenguaje en el que se escribe tu tema!
  • 35. Quiero tener varios temas similares con pequeñas diferencias
  • 36. Esquemas de Color • Permiten mostrar al usuarios variantes de un tema, basadas en distintas imágenes y css. • Se introducen en el fichero WEB-INF/liferay-look-and- feel.properties * si no tienes este fichero, cópialo de la carpeta de tu tema en el servidor de aplicaciones dentro de webapps
  • 37. Ejemplo Esquemas de Color <look-and-feel> <theme id="my-training" name="My Training"> <color-scheme id="01" name="Blue"> <css-class>blue</css-class> <color-scheme-images-path>${images-path}/color_schemes/${css- class}</color-scheme-images-path> </color-scheme> <color-scheme id="02" name="Red"> <css-class>red</css-class> <color-scheme-images-path>${images-path}/color_schemes/${css- class}</color-scheme-images-path> </color-scheme> </theme> </look-and-feel>
  • 38. Theme Settings • Pueden ser de 2 tipos: ‣ Estáticos: Nos permiten mostrar al usuario varios temas a elegir, que en el fondo es uno sólo pero con pequeñas diferencias. ‣ Dinámicos: Permiten al usuario final seleccionar desde la interfaz de usuario algunos elementos de configuración de su tema.
  • 39. Theme Settings Estáticos <look-and-feel> <theme id="tema1" name="Tema Uno"> <settings> <setting key=”mi-setting” value=”mi-valor-1” /> <settings> </theme> <theme id="tema2" name="Tema Dos"> <settings> <setting key=”mi-setting” value=”mi-valor-2” /> <settings> </theme> </look-and-feel> * Desde Velocity: $theme_display.getThemeSetting("mi- setting")
  • 40. Theme Settings Dinámicos <settings>
 <setting configurable="true" key="bullet-style" options="dots,arrows" type="select" value="dots" />
 
 <setting configurable="true" key="portlet-setup-show-borders-default" type="checkbox" value="true" />
 </settings> * Desde Velocity: $theme_display.getThemeSetting("bullet- style")
  • 41. Ejemplos Settings Dinámicos Permiten utilizar javascript para hacer selectores dinámicos, por ejemplo, un datapicker para elegir un color. Ver ejemplo aquí:
 
 http://www.liferay.com/es/web/raymond.auge/blog/-/blogs/theme-settings-and-new-advanced-controls
  • 42. ¿Es necesario usar un IDE? ¿Tengo que desplegar cada vez que hago un cambio? ...no :)
  • 43. Desarrollo Rápido: sandbox • Permite diseñar temas al estilo PHP, sin necesidad de editor ni entorno de plugins. • Los cambios se visualizan inmediatamente • Para activarlo: ‣ sandbox.deploy.enabled=true ‣ sandbox.deploy.dir=${liferay.home}/sandbox • Ejmplo: crea una carpeta dentro de tu sandbox llamada prueba-theme