SlideShare una empresa de Scribd logo
1 de 94
Liferay Themes
Training
(2014)
Basado en las versiones
Liferay 6.2 CE/EE
Temario
• Introducción a Liferay.
• Introducción a Temas de
Apariencia (Liferay Themes).
• Instalando y configurando Liferay's
Plugins SDK.
• Interfaz de usuario de Liferay.
• Introducción a Plugins.
Día 1
Introducción
Temario
• Templates Principales y Estructura
de Carpetas.
• Extendiendo Liferay Themes
adecuadamente.
• Construyendo un Theme en Liferay.
• Creando un Theme desde cero.
Día 2
Anatomía de
un Theme
Temario
• Modificando la cabecera (Header).
• Personalizando el menú de
Navegación principal.
• Aplicando estilos a las cajas de los
Portlets.
• Modificando el pie (Footer).
• Personalizando Hojas de Estilos.
Día 3
Desarrollo
de Themes
Temario
• Creando Esquemas de Color (Color
Schemes) adicionales.
• Layout Templates.
• Empaquetando los Themes para su
distribución.
Día 4
Desarrollo
de Themes
(2)
Temario
• Introducción a Velocity.
• Usando Velocity para Acceder a
Variables.
• Internacionalización de mensajes
(i18n) en el Theme.
• Embebiendo Portlets en el Theme.
• Embebiendo Portlets en el Layout
Template.
• Diseño para Contenidos Web y
Portlets.
Día 4
Themes
Avanzados
Temario
• Diseño Responsivo
(Mobile/Tablets/Escritorio).
• Cómo incluir jQuery y otras librerías
Javascript en los Themes.
• Resumen.
• Buenas Prácticas.
• Como optimizar el rendimiento.
• Uso de Maven para construir
Themes.
Día 5
Themes
Avanzados
(2)
Introducción
Introducción
Introducción a Liferay
• Liferay Portal es uno de los frameworks de portales más
maduros y de mayor auge en el mercado a nivel mundial.
• Liferay Portal es de código abierto (Open Source) y
totalmente personalizable.
• Se basa en estándares J2EE. Portlets JSR 168/286
• Es un producto “server-agnóstico”, multiplataforma y
diseñado para integrarse dentro del entorno empresarial.
Introducción
Introducción a Liferay
• Incorpora un CMS muy completo, Versionado, Workflows,
etc.
• Set de Portlets. Wiki, Foros, Blogs, etc.
• Alta disponibilidad y tolerancia a fallos.
• Templates de Sitios Web.
• Escalabilidad.
• Y mucho más!
Introducción
Introducción a Liferay
• Plataforma Web
• Gadgets, Portlets, Páginas, Temas, elementos de navegación y Sitios Web.
• Sistema WCM
• Repositorio de Documentos, Contenidos Web, Workflows de aprobación, Versionado.
• Plataforma de Colaboración
• Colaboración de Equipos, Organización, Social.
• Plataforma de Integración
• Integración de diferentes herramientas de Empresa, Sitios, bajo una misma UI.
• Plataforma de Aplicaciones Sociales
• Herramientas Sociales integradas, Blogs, Foros, Wikis, Calendarios, Tareas, etc.
Introducción
Introducción a Temas de Apariencia (Liferay Themes)
• Liferay incluye el concepto de Temas (Themes) a partir de
la versión 3.5 para permitir a los usuarios cambiar el Look &
Feel de sus portales.
• Estos están formados por estructura de directorios
concreta.
• Los Themes permiten el concepto de herencia para
facilitar su reutilización y reducir el tiempo de desarrollo.
• Pueden contener plantillas, CSS, Imágenes, Javascript,
etc.
• Los Temas (Themes) son plugins de Liferay.
Introducción
Introducción a Temas de Apariencia (Liferay Themes)
• Pueden ser aplicados a Sitios Web y Páginas.
• Pueden dar estilos también a Portlets, Layout Templates y
Contenidos Web.
• Esquemas de Color (Color Schemes), son variantes de
color de un mismo Theme.
• Los Themes permiten configuraciones propias.
• Themes de base, _unstyled, _styled, classic,
control_panel, o cualquier theme propio!
Introducción
Instalando y configurando Liferay's Plugins SDK.
• Herramienta Plugins SDK.
• Apache Ant / Línea de comandos.
• Liferay Developer Studio (Desarrollo Liferay EE).
• Liferay IDE (Extensión de Eclipse).
• Descargas:
http://www.liferay.com/es/downloads/liferay-projects/liferay-ide
Instalación Plugins SDK
Introducción
Interfaz de usuario de Liferay
Portlets
Dockbar
Navigation Menu
Introducción
Introducción a Plugins
• La manera recomendada para extender Liferay, es
mediante la construcción de plugins.
• Los tipos de plugins pueden ser, Portlets, Themes, Layout
Templates, Hooks, Ext, Web.
• Las herramientas más habituales para construir estos
ficheros WAR es ANT (Plugins SDK) o Maven de Apache.
• Una vez construidos, éstos se empaquetan como ficheros
WAR para ser desplegados en Liferay.
Introducción
Introducción a Plugins
• El proceso de despliegue es el siguiente:
Plugins
(.war files)
Auto Deploy
Directory
Liferay Portal
+
Application Server
Auto Deploy Hot Deploy
Demo Despliegues
Fin día 1
Anatomía de un Theme
Anatomía de un Theme
Templates Principales y Estructura de Carpetas.
• Un theme define los estilos de todos los portlets y
contenidos de una página, por tanto éste controla el modo
en que se ve.
• Desde el punto de vista del desarrollo, un theme se
compone de un conjunto de ficheros CSS, imágenes,
Javascript y plantillas de Velocity, JSP o Freemarker.
• Cada theme se compone a partir de una serie de carpetas
específicas.
Anatomía de un Theme
Templates Principales y Estructura de Carpetas.
• Estructura de Carpetas de un Theme.
Carpeta para los ficheros CSS
Carpeta para las Imágenes
Carpeta para los ficheros Javascript
Carpeta para los Templates
Carpeta para los ficheros de
Configuración
Carpeta de Trabajo!
Anatomía de un Theme
Extendiendo Liferay Themes adecuadamente.
• Habitualmente en los proyectos construiremos nuestro
tema a partir de un theme de base…
_unstyled
_styled
classic
control_panel
Custom
Theme
My new
Theme
Built-in Liferay Themes
Anatomía de un Theme
Construyendo un Theme en Liferay.
• Para construir un theme en Liferay es necesario primero
diseñar el tema desde el punto de vista de Diseño Web.
• Para ello es preciso identificar aquellos elementos que
formarán parte de nuestro theme y cuáles no.
• Se deben definir convenciones de nombres para dar
estilos a portlets y componentes creados por el equipo de
desarrollo.
• La maquetación inicial puede existir o no, dependiendo
del nivel de experiencia del diseñador/maquetador a la hora
de construir el theme.
Anatomía de un Theme
Construyendo un Theme en Liferay.
• Partes principales de un theme…
Header
Body
Footer
Anatomía de un Theme
Construyendo un Theme en Liferay.
• Partes principales de un theme…
Layout Template
Anatomía de un Theme
Creando un Theme desde cero.
• Paso 1. Crear un theme base utilizando una de las
siguientes herramientas:
• Liferay IDE
• Liferay Developer Studio (EE - Enterprise Edition)
• Plugins SDK - Línea de comandos.
• Paso 2. Crear las siguientes carpetas:
• [my-theme]/docroot/_diffs/css/
• [my-theme]/docroot/_diffs/images/
• [my-theme]/docroot/_diffs/templates/
Anatomía de un Theme
Creando un Theme desde cero.
• Paso 3. Crear el fichero [my-
theme]/docroot/_diffs/css/custom.css
• Paso 4. Crear/Copiar el fichero [my-
theme]/docroot/_diffs/templates/portal_normal.vm
• Paso 5. Desplegar el Theme y comprobar que funciona
correctamente antes de continuar.
• Paso 6. Agregar las imágenes favicon.ico,
screenshot.png y thumbnail.png en la carpeta /images.
• Paso 7. Realizar las modificaciones necesarias para llegar
al theme deseado a nivel HTML, CSS, imágenes, scripts…
Anatomía de un Theme
Creando un Theme desde cero.
• Plantillas importantes a tener en cuenta:
• /templates/init_custom.vm
• Utilizado para inicializar variables, servicios, etc, que
serán utilizados en el theme.
• /templates/navigation.vm
• Define el menú horizontal principal de navegación del
Site.
• /templates/portal_normal.vm
• Plantilla principal del Sitio.
Anatomía de un Theme
Creando un Theme desde cero.
• /templates/portal_pop_up.vm
• Plantilla principal del Sitio utilizada en el modo popup.
• /templates/portlet.vm
• Plantilla utilizada para las cajas de los Portlets.
• /css/custom.css
• Fichero CSS principal desde el cual se construirá la
estructura necesaria para dar estilos al portal.
• CSS importante a tener en cuenta:
Anatomía de un Theme
Creando un Theme desde cero.
• /js/main.js
• Fichero JS principal donde se inyectan algunos
comportamientos de elementos como el navigation o
breadcrumb. También podemos agregar aquí Javasctipt
personalizado.
• Javascipt importante a tener en cuenta:
Anatomía de un Theme
Creando un Theme desde cero.
• Tecnologías utilizadas por Liferay para UI.
• AlloyUI
• Es un Framework Javascript de desarrollo de UI
construido sobre la librería YUI3 de Yahoo. AlloyUI utiliza
también el Framework Javascript creado por Twitter
Bootstrap (HTML/CSS), para simplificar el desarrollo de
UI en aplicaciones Web.
• http://alloyui.com/
• http://getbootstrap.com/
Anatomía de un Theme
Creando un Theme desde cero.
• Tecnologías utilizadas por Liferay para UI.
• HTML5
• AlloyUI se basa en la estructura de HTML5. Esta
estructura sólo se basa en un único <!doctype>
<!DOCTYPE html>
<html>
<head>
<title>Title of the document</title>
</head>
<body>Body of the document</body>
</html>
Anatomía de un Theme
Creando un Theme desde cero.
• Tecnologías utilizadas por Liferay para UI.
• HTML5
• Introduce nuevos elementos con sentido semántico
como <nav>, <footer> en lugar de <div>,<span>, y
otros nuevos elementos multimedia como <audio> y
<video>.
• Ha sido diseñado para cumplir con las exigencias de los
Sitios Web modernos de una manera estandarizada.
• http://www.w3.org/community/webed/wiki/HTML
Anatomía de un Theme
Creando un Theme desde cero.
• Tecnologías utilizadas por Liferay para UI.
• Style – CSS3
• La última versión del estándar de CSS, es compatible
con sus predecesores, e introduce nuevos módulo de
mejoras como: Selectores, Backgrounds y Borders, Text
Effects, Animations, Multiple Column Layout, etc…
div {
border:2px solid;
border-radius:25px;
}
• http://www.w3.org/community/webed/wiki/CSS
Anatomía de un Theme
Creando un Theme desde cero.
• Ficheros de configuración /docroot/WEB-INF/
• liferay-look-and-feel.xml – Define el id/nombre/versión
del theme, su configuración y esquemas de color.
<theme id=”tiger” name=”Tiger”>
<settings>
<setting key="portlet-setup-show-borders-default"
value="false"/>
</settings>
</theme>
Anatomía de un Theme
Creando un Theme desde cero.
• Ficheros de configuración /docroot/WEB-INF/
• liferay-plugin-package.properties – Define información
del plugin, versiones soportadas, licencia, autor, etc.
name=Training1
module-group-id=liferay
module-incremental-version=1
page-url=http://www.liferay.com
…
author=Liferay, Inc.
licenses=LGPL
liferay-versions=6.2.0+
resources-importer-developer-mode-enabled=true
Fin día 2
Desarrollo de Themes
Desarrollo de Themes
Modificando la cabecera (Header).
• Analizando el fichero portal_normal.vm
Body
Wrapper
Header
Content
Footer
$site_name
$theme.include($content_include)
#dockbar()
#language ("powered-by")
Macros
Variables
Util Objects
Macro Languages
Desarrollo de Themes
Modificando la cabecera (Header).
• Modificando la cabecera (Header).
<header id="banner" role="banner”>
...
</header>
• Los cambios realizados dentro del “header” serán
reflejados en la cabecera el theme.
• Mantener los ids, classes y roles principales, es
fundamental para no perder funcionalidad.
Desarrollo de Themes
Personalizando el menú de Navegación principal.
• Copiar/Editar el fichero [my-
theme]/docroot/_diffs/templates/navigation.vm
• Cada ítem $nav_item, corresponde a cada una de las
opciones de menú de navegación principal.
#foreach ($nav_item in $nav_items)
...
#end
• A través de $nav_item, se puede acceder a los diferentes
atributos y configuraciones de cada página, ejemplo:
$nav_item.icon(), $nav_item.getName(), $nav_item.getURL().
Desarrollo de Themes
Personalizando el menú de Navegación principal.
• A través de $nav_item.hasChildren(), se accede a las
páginas hijas del ítem en cuestión.
• Cada ítem $nav_child, es igual a un $nav_item, es decir,
posee sus mismos atributos, configuraciones, etc.
#foreach ($nav_child in $nav_item.getChildren())
...
#end
• A través de $nav_child, se puede acceder a los
diferentes atributos y configuraciones de cada página,
ejemplo: $nav_child.getName(), $nav_child.getURL().
Desarrollo de Themes
Aplicando estilos a las cajas de los Portlets.
• Copiar/Editar el fichero [my-
theme]/docroot/_diffs/templates/portlet.vm
• Básicamente en este fichero se puede modificar las cajas
de los portlets. Esta se estructura en cabecera, y cuerpo del
portlet.
$portlet_title
$theme.portletIconOptions()
$portlet_display.writeContent($writer)
• Hay que tener en cuenta a la hora de hacer cambios, que
este fichero afecta a todos los portlets.
Desarrollo de Themes
Modificando el pie (Footer).
• Modificando el pie (Footer).
<footer id="footer" role="contentinfo">
...
</footer>
• Los cambios realizados dentro del “footer” serán
reflejados en el pie del theme.
• Para contenidos del pie más complejos como menús, etc,
se puede extraer el Footer a un fichero independiente.
Desarrollo de Themes
Personalizando Hojas de Estilos.
• Como hemos visto el custom.css es el fichero donde, a
partir del él, comenzaremos la personalización de las hojas
de estilos. Este es el último fichero CSS incluido en la
herencia de themes, con el fin de permitir “sobrescribir”
cualquier estilo que se necesite cambiar.
@import url(base.css);
@import url(application.css);
@import url(layout.css);
@import url(dockbar.css);
@import url(navigation.css);
@import url(portlet.css);
@import url(extras.css);
@import url(custom.css);
main.css
Desarrollo de Themes
Personalizando Hojas de Estilos.
• La técnica más utilizada para realizar un theme, es utilizar
la característica de herencia, y aplicar pequeños cambios
hasta llevar el Diseño Web a cumplir los requisitos
deseados.
• Liferay 6.2 viene integrado con Compass, el cual es un
Open Source CSS Authoring Framework, que utiliza el
lenguaje Sass para permitir la creación de potentes hojas
de estilos. El concepto base es el pre-procesamiento de los
ficheros CSS.
Desarrollo de Themes
Personalizando Hojas de Estilos.
• Si abrimos por ejemplo el fichero [my-
theme]/docroot/css/base.css, veremos que la primera línea
es:
• @import "compass”;
• Esta directiva proporciona el acceso al uso de Compass y
sus características ya integradas en los Themes de Liferay.
Desarrollo de Themes
Personalizando Hojas de Estilos.
• Un mixin es una función CSS que puede tener o no
parámetros, y da como salida una definición de estilos. Un
mixin se declara utilizando el comando @mixin y es
llamado utilizando el comando @include.
@mixin custom-field-focus {
background: #CECE none;
border-color: #FF0;
}
input, textarea {
&.focus {
@include custom-field-focus;
}
}
Desarrollo de Themes
Personalizando Hojas de Estilos.
• En el ejemplo anterior se define una función llamada
custom-field-focus que se aplica cada vez que se le
asigna a un elemento input o textarea el class focus,
cambiando su color de borde y background.
• Compass utiliza el lenguaje SASS, y este último tiene dos
sintaxis diferentes, Scss (extensión .scss) y Sass (extensión
.sass). La sintaxis más comúnmente utilizada es Scss ya
que Sass se basa en indentaciones de las líneas en lugar
de llaves {}, siendo más antigua y menos utilizada.
• http://compass-style.org/
• http://sass-lang.com/
Desarrollo de Themes
Personalizando Hojas de Estilos.
• Utilizando imágenes desde CSS
• Para referenciar imágenes desde el CSS, la mejor manera
es hacerlo con un path relativo utilizando “../images”, por
ejemplo:
.box img {
background-image: url(../images/box_bg.png);
}
Desarrollo de Themes
Personalizando Hojas de Estilos.
• Utilizando imágenes desde Templates
• Para referenciar imágenes desde templates, la mejor
alternativa es utilizar el siguiente formato a través de la
variable de Velocity $images_folder:
<img src=”$images_folder/my_image.png” />
Fin día 3
Desarrollo de Themes (2)
Themes Avanzados
Desarrollo de Themes (2)
Creando Esquemas de Color (Color Schemes) adicionales.
• Los esquemas de color (Color Schemes), se definen en el
fichero docroot/WEB-INF/liferay-look-and-feel.xml.
<theme id=”good-day" name=”Good Day">
<settings>
<setting key="my-setting" value="my-value" />
</settings>
<color-scheme id="01" name="Day">
<css-class>day</css-class>
<color-scheme-images-path>
${images-path}/color_schemes/${css-class}
</color-scheme-images-path>
</color-scheme>
<color-scheme id="02" name="Night">
<css-class>night</css-class>
</color-scheme>
</theme>
Desarrollo de Themes (2)
Creando Esquemas de Color (Color Schemes) adicionales.
• Crear las siguientes carpetas y ficheros:
• [my-theme]/docroot/_diffs/css/color_schemes/day.css
• [my-theme]/docroot/_diffs/css/color_schemes/night.css
• [my-theme]/docroot/_diffs/images/color_schemes/day
• [my-theme]/docroot/_diffs/images/color_schemes/night
Nota: Es posible especificar un screenshot.png y thumbnail.png para cada
esquema de color, colocando los ficheros en la carpeta de imágenes day/night.
• Agregar a [my-theme]/docroot/_diffs/css/custom.css
@import url(color_schemes/day.css);
@import url(color_schemes/night.css);
Desarrollo de Themes (2)
Configuraciones en Themes.
• Es posible tener configuraciones personalizadas en el
theme, éstas se definen en el fichero docroot/WEB-
INF/liferay-look-and-feel.xml.
<theme id=”my-design" name=”My Design">
<settings>
<setting key="my-setting" value="my-value" />
</settings>
</theme>
a
$theme.getSetting("my-setting")
• Utilización en el theme:
Desarrollo de Themes (2)
Layout Templates.
• Los Layout Templates son un tipo de plugin.
• Estos definen las diferentes columnas y filas utilizadas
para subdividir el Body donde se organizan los portlets.
Built-in Liferay’s
Layout Templates
Desarrollo de Themes (2)
Layout Templates.
• Al igual que los themes los layout templates también
tienen su propia estructura de carpetas y ficheros.
columns-1-4-1-layouttpl/
docroot/
META-INF/
WEB-INF/
liferay-layout-templates.xml
liferay-plugin-package.properties
columns_1_4_1.png
columns_1_4_1.tpl
columns_1_4_1.wap.tpl
build.xml
Desarrollo de Themes (2)
Layout Templates.
• Ficheros del Layout Template:
• [project-name].tpl: Genera el HTML de la estructura del
template.
• [project-name].wap.tpl: Variante del template para
dispositivos móviles. WAP (Wireless Application
Protocol).
• [project-name].png: Thumbnail representando la
disposición del layout template.
Desarrollo de Themes (2)
Layout Templates.
• Ficheros de configuración del Layout Template:
• liferay-layout-templates.xml: Especifica el id/nombre
del layout template, y la ubicación de sus ficheros TPL y
PNG.
• liferay-plugin-package.properties: Describe el
proyecto que contiene el plugin, al igual que en el resto
de plugins, esta información es utilizada por el proceso
de auto-despliegue en caliente de Liferay.
Desarrollo de Themes (2)
Layout Templates.
• Los layout templates se construyen a partir de DIVs.
<div class="columns-2" id="main-content" role="main">
<div class="portlet-layout row-fluid">
<div class="portlet-column portlet-column-first span6" id="column-1">
$processor.processColumn("column-1", "portlet-column-content
portlet-column-content-first")
</div>
<div class="portlet-column portlet-column-last span6" id="column-2">
$processor.processColumn("column-2", "portlet-column-content
portlet-column-content-last")
</div>
</div>
</div>
Desarrollo de Themes (2)
Layout Templates.
• En el <div> principal se deben aplicar una serie de
atributos requeridos por Liferay: class="columns-2” (con el
nombre del proyecto del Layout Template). También el id=“
main-content” y el role=“main” deben ser aplicados a
este <div> principal.
• Dentro del <div> principal, hay que crear <div>s para cada
fila del layout template. Se deben aplicar las clases portlet-
layout y row-fluid CSS a estos <div>s: <div
class="portlet-layout row-fluid">.
Desarrollo de Themes (2)
Layout Templates.
• A su vez dentro de cada fila <div>, se deben especificar
<div>s para una o más columnas. Cada <div> de columna
debe tener la clase portlet-column. Si una columna es la
primera, última, o simplemente una columna en la fila, se
debe especificar otra clase CSS: portlet-column-first,
portlet-column-last, o portlet-column-only.
• Los nuevos themes de Liferay 6.2, utilizan un fork de
Twitter Bootstrap llamado Alloy Bootstrap que afecta a
los layout templates. Los layout templates utilizan el sistema
de grid de 12 columnas: http://getbootstrap.com/css/#grid
Desarrollo de Themes (2)
Layout Templates.
• Para cada <div> de columna, se debe especificar una
clase CSS llamada span[width] donde width es el
numerador de porción respeto a los 12 bloques, que
representa el ancho de la columna.
Desarrollo de Themes (2)
Layout Templates.
• A continuación, para cada columna <div>, hay que
especificar un ID único. Ejemplo: id="column-1",
id="column-2", etc..
• Por último, dentro de cada columna <div>, la directiva de
Velocity que será responsable de agregar los portlets que
han sido configurados en cada columna:
$processor.processColumn("column-1", "portlet-column-
content portlet-column-content-first")
Desarrollo de Themes (2)
Empaquetando los Themes para su distribución.
• Los themes al igual que otros plugins se empaquetan y
distribuyen como ficheros .war
• El empaquetado se puede generar a partir del Plugins
SDK ya sea desde el IDE o desde la línea de comandos
utilizando ANT o MAVEN.
• - ant clean deploy.
• - mvn clean install.
Desarrollo de Themes (2)
Empaquetando los Themes para su distribución.
• Desde Liferay IDE ejecutar los targets clean y deploy:
Themes Avanzados
Introducción a Velocity.
• Apache Velocity es un motor de templates basado en
Java, que provee un lenguaje de templates para referenciar
objetos definidos en el código Java. Es un proyecto open
source dirigido por Apache Software Foundation.
• http://velocity.apache.org/
• Liferay utiliza este motor de templates para renderizar los
themes, layout templates, plantillas de contenidos, etc.
• Liferay define una serie de variables disponibles en los
templates para ser utilizados por los desarrolladores.
Themes Avanzados
Usando Velocity para Acceder a Variables.
• Algunas variables disponibles para Themes.
$theme_display
$portlet_display
$theme_timestamp
$theme_settings
$css_class
$layout
$page_group
$liferay_toggle_controls
$liferay_dockbar_pinned
$css_folder
$company_logo
$company_logo_height
$company_logo_width
$company_url
$user_id
$is_default_user
$user_first_name
$user_middle_name
$user_last_name
$user_name
Etc….
$images_folder
$javascript_folder
$templates_folder
$full_css_path
$full_templates_path
$css_main_file
$js_main_file
$company_id
$company_name
• Se pueden ver todas las variables disponibles en el
fichero
[APP_SERVER_PORTAL_DIR]/html/themes/_unstyled/temp
lates/init.vm
Themes Avanzados
Usando Velocity para Acceder a Variables.
• Variables disponibles para Layout Templates:
Themes Avanzados
Internacionalización de mensajes (i18n) en el Theme.
• Utilizamos mensajes internacionalizados para mostrar
texto en diferentes idiomas de manera dinámica.
• Estos textos se deben definir en ficheros de idioma
cargados en el contexto del portal.
• Utilizando la macro #language es posible acceder a las
claves (Keys) definidas en los ficheros de idioma.
• Generalmente se utilizan plugins de tipo Hook para incluir
nuevos mensajes en los diferentes idiomas.
• Por ejemplo: #language (”hello-world”)
Themes Avanzados
Embebiendo Portlets en el Theme.
• Es posible embeber portlets directamente en el theme de
manera programática ya sean instanciables o no-
instanciables.
• Colocando la siguiente línea en nuestro template,
estamos colocando el portlet de búsqueda no-instanciable
en el theme de manera programática:
• $theme.runtime("77”)
Themes Avanzados
Embebiendo Portlets en el Theme.
• Para colocar un portlet instanciable hay que especificar el
nombre de instancia completo. Este nombre de instancia se
puede obtener mirando el código fuente de la página por
ejemplo: INSTANCE_5anm6NtLp0kZ
• Con la siguiente línea se coloca una instancia concreta
del portlet Navigation
• $theme.runtime("71_INSTANCE_5anm6NtLp0kZ")
Themes Avanzados
Embebiendo Portlets en el Layout Template.
• Es posible embeber portlets directamente en el layout
template de manera programática ya sean instanciables o
no-instanciables, similar como para los themes.
<div class="columns_1_4_1" id="main-content" role="main">
<div class="portlet-layout row-fluid">
<div class="portlet-column portlet-column-only" id="column-1">
$processor.processPortlet(
"my-hello-world-portlet_WAR_myhelloworldportlet")
$processor.processColumn("column-1",
"portlet-column-content portlet-column-content-only")
</div>
</div>
.....
</div>
Themes Avanzados
Diseño para Contenidos Web y Portlets.
• Para dar diseño y estilos a Contenidos Web y Portlets
vamos a utilizar básicamente las mismas técnicas de CSS
explicadas hasta ahora.
• Para el caso de los contenidos Web, es posible dar estilos
en el propio contenido mediante el uso de la etiqueta
<style>, o bien mediante el propio Theme, destinando
estilos a este fin.
• Por lo general se utiliza un elemento <div> principal que
encierra, o bien el contenido Web, o bien el portlet.
• Para el caso de portlets, podemos dar estilos dentro del
propio portlet, en el theme, e incluso en la propia instancia
vía panel de administración (Look & Feel).
Fin día 4
Themes Avanzados (2)
Themes Avanzados (2)
Diseño Responsivo (Mobile/Tablets/Escritorio).
• Liferay proporciona herramientas para realizar Diseños
Web Responsivos, tanto a nivel de Themes, como también
de Layout Templates o Contenidos Web. Incluso podemos
realizar multi-sites para diferentes dispositivos utilizando la
característica de Reglas de Familias de Dispositivos.
• AlloyUI permite la detección por Javascript del tamaño de
pantalla del dispositivo (Smartphones/Tables/Desktop), y la
utilización de esta información en los ficheros CSS de
nuestro Theme.
• Por ejemplo: iPad en landscape o Desktop cuya pantalla
es >= 960 pixeles de ancho.
Themes Avanzados (2)
Diseño Responsivo (Mobile/Tablets/Escritorio).
• Un iPad en portrait cuya pantalla es <= 720 pixeles de
ancho.
• Para poder aplicar estilos de acuerdo al tipo de pantalla,
es necesario realizar una serie de pasos.
• Un teléfono móvil en portrait (480 px), o en landscape
(320 px).
Themes Avanzados (2)
Diseño Responsivo (Mobile/Tablets/Escritorio).
• Paso 1. Incluir en el portal_normal.vm de nuestro theme,
el siguiente META.
…
<head>
<title>$the_title - $company_name</title>
<meta content="target-densitydpi=160dpi, width=device-width,
minimum-scale=1.0, maximum-scale=1.0" name="viewport" />
$theme.include($top_head_include)
</head>
…
Themes Avanzados (2)
Diseño Responsivo (Mobile/Tablets/Escritorio).
• Paso 2. Agregar la siguiente invocación para habilitar los
aui-viewport. Esta llamada también se puede realizar desde
el fichero [my-theme]/docroot/_diffs/js/main.js
…
<script type="text/javascript">
AUI().use('aui-viewport');
</script>
$theme.include($body_bottom_include)
$theme.include($bottom_include)
</body>
</html>
…
Themes Avanzados (2)
Diseño Responsivo (Mobile/Tablets/Escritorio).
• Paso 3. Agregar estilos personalizados para los diferentes
tipos de pantalla en el fichero [my-
theme]/docroot/_diffs/css/custom.css
.view-lt480 #navigation li {
display: block;
float: none;
}
.view-480 #navigation li {
display: block;
float: none;
}…
Themes Avanzados (2)
Diseño Responsivo (Mobile/Tablets/Escritorio).
• Estos tipos de estilos se pueden aplicar para las el resto
de resoluciones de pantalla si se desea que sea
completamente responsivo:
• .view-gt320
• .view-320
• .view-lt320
• .view-gt480
• .view-480
• .view-lt480
• .view-gt720
• .view-720
• .view-lt720
• .view-gt960
• .view-960
• .view-lt960
Themes Avanzados (2)
Diseño Responsivo (Mobile/Tablets/Escritorio).
• Con Liferay 6.2 y la inclusión de Alloy Bootstrap,
podemos utilizar en nuestros themes unas funciones (mixin)
ya disponibles llamadas respond-to, las cuales permiten de
una manera mucho más sencilla y elegante aplicar estilos a
diferentes tipos de dispositivos, como se muestra en el
siguiente ejemplo:
@include respond-to(phone) {
body { background: red; }
input { width: 100%; }
}
Themes Avanzados (2)
Diseño Responsivo (Mobile/Tablets/Escritorio).
/* will only style phone displays smaller than 768px */
@include respond-to(phone) {
body { background: red; }
}
/* will only style phone and tablet displays smaller than 980px */
@include respond-to(phone, tablet) {
body { background: blue; }
}
/* will only style tablet and desktop displays greater than 768px */
@include respond-to(tablet, desktop) {
body { background: green; }
}
Themes Avanzados (2)
Cómo incluir jQuery y otras librerías Javascript en los Themes.
• Si quisiéramos incluir jQuery u otra librería Javascript a
nuestro theme, basta con colocar la librería en la carpeta js
de nuestro theme, por ejemplo: [my-
theme]/docroot/_diffs/js/jquery.js o custom-script.js, y
luego incluirlo en el template principal [my-
theme]/docroot/_diffs/templates/portal_normal.vm
...
<head>
#js("$javascript_folder/jquery.js")
#js("$javascript_folder/custom-script.js")
…
Themes Avanzados (2)
Resumen.
• Un Theme es un tipo de plugin que define como se verán
los Sitios Webs o páginas que lo utilicen.
• Es posible realizar diseños responsivos para soportar
diferentes tipos de tamaño de pantallas de dispositivos.
• Se empaquetan en ficheros WAR para su distribución e
instalación dentro de Liferay Portal.
• Los themes se componen básicamente de HTML, CSS,
Imágenes, Templates y Javascript y permiten tener
diferentes esquemas de color y configuraciones.
• Su construcción más adecuada es mediante la herencia
de otros themes de base, que permitan la reutilización, y
acorten los tiempos de desarrollo.
Themes Avanzados (2)
Buenas Prácticas.
• Definir junto a los programadores una serie de reglas de
nombres para los estilos, utilizando el concepto de <div>
contenedor con el id del portlet como clase principal de
cada vista.
• Evitar el uso de estilos fuera de las hojas de estilo (CSS).
• Crear a partir del custom.css una estructura de ficheros
importados. [liferay-css]_override.css, [id-portlet].css
con el objetivo de mejorar la organización de los estilos y su
mantenimiento.
• Si se parte de una maqueta HTML estática para construir
el theme, comprobar primero que ésta funciona en los
diferentes navegadores requeridos.
Themes Avanzados (2)
Como optimizar el rendimiento.
• Liferay utiliza opciones para desarrollo que por defecto
estarán activas desde el IDE a través del fichero portal-
developer.properties, y éstas son cargadas a través del
fichero portal-ide.properties. Estas propiedades
desactivan las compresiones y cacheo de CSS, JS, e
Imágenes.
Para un mayor rendimiento recordar activarlas en el entorno
de preproducción para asegurarse de que todo funciona
según lo esperado. theme.css.fast.load=true,
theme.images.fast.load=true, javascript.fast.load=true
Themes Avanzados (2)
Como optimizar el rendimiento.
• Se recomienda controlar el peso de las páginas para
evitar tiempos demasiado grandes de carga. Una buena
herramienta para visualizar estos tiempos desde el
navegador, es la extensión de Firefox Firebug.
Themes Avanzados (2)
Uso de Maven para construir Themes.
• Apache Maven es una herramienta muy completa para
gestión de despliegues, dependencias, documentación etc.
• Desde el lanzamiento de Liferay 6.2, la herramienta
Liferay IDE trae soporte para Maven!
• Desde línea de comandos se cuenta con una serie de
arquetipos que permiten crear la estructura de un theme, o
cualquier otro tipo de plugin con un simple comando.
mvn archetype:generate -DarchetypeArtifactId=liferay-theme-archetype -
DarchetypeGroupId=com.liferay.maven.archetypes -
DarchetypeVersion=6.2.0-ga1 -DartifactId=lrexperts-theme -
DgroupId=com.lrexperts.liferay -Dversion=1.0.0-SNAPSHOT
Fin día 5

Más contenido relacionado

La actualidad más candente

Plataforma de programación Java
Plataforma de programación JavaPlataforma de programación Java
Plataforma de programación JavaAntonio Contreras
 
Manejadores de contenido
Manejadores de contenidoManejadores de contenido
Manejadores de contenidosidasa
 
Wordpress Overview
Wordpress OverviewWordpress Overview
Wordpress Overviewandres_0403
 
Introducción a Java EE
Introducción a Java EEIntroducción a Java EE
Introducción a Java EEPaco Saucedo
 
Programacion de una tienda virtual en Grails
Programacion de una tienda virtual en GrailsProgramacion de una tienda virtual en Grails
Programacion de una tienda virtual en GrailsGabriel Bermudez
 
Aplicaciones empresariales Java EE en la nube
Aplicaciones empresariales Java EE en la nubeAplicaciones empresariales Java EE en la nube
Aplicaciones empresariales Java EE en la nubeFernando Montaño
 
9 tecnologías v1.1
9 tecnologías v1.19 tecnologías v1.1
9 tecnologías v1.1UTN
 
Introducción Spring Framework
Introducción Spring FrameworkIntroducción Spring Framework
Introducción Spring Frameworkecontinua
 

La actualidad más candente (16)

Comenzando con GWT
Comenzando con GWTComenzando con GWT
Comenzando con GWT
 
Plataforma de programación Java
Plataforma de programación JavaPlataforma de programación Java
Plataforma de programación Java
 
Introducción a JEE
Introducción a JEEIntroducción a JEE
Introducción a JEE
 
Manejadores de contenido
Manejadores de contenidoManejadores de contenido
Manejadores de contenido
 
DRUPAL
DRUPALDRUPAL
DRUPAL
 
Informatica
InformaticaInformatica
Informatica
 
Google Web Toolkit
Google Web ToolkitGoogle Web Toolkit
Google Web Toolkit
 
Wordpress Overview
Wordpress OverviewWordpress Overview
Wordpress Overview
 
Introducción a Java EE
Introducción a Java EEIntroducción a Java EE
Introducción a Java EE
 
Conseptos de la web 2.0
Conseptos de la web 2.0Conseptos de la web 2.0
Conseptos de la web 2.0
 
Frameworks J2EE
Frameworks J2EEFrameworks J2EE
Frameworks J2EE
 
Programacion de una tienda virtual en Grails
Programacion de una tienda virtual en GrailsProgramacion de una tienda virtual en Grails
Programacion de una tienda virtual en Grails
 
Aplicaciones empresariales Java EE en la nube
Aplicaciones empresariales Java EE en la nubeAplicaciones empresariales Java EE en la nube
Aplicaciones empresariales Java EE en la nube
 
Modulo 1 java ee platform
Modulo 1   java ee platformModulo 1   java ee platform
Modulo 1 java ee platform
 
9 tecnologías v1.1
9 tecnologías v1.19 tecnologías v1.1
9 tecnologías v1.1
 
Introducción Spring Framework
Introducción Spring FrameworkIntroducción Spring Framework
Introducción Spring Framework
 

Similar a Liferay themestraining lr6.2-es_v1.0

Desarrollo de temas de apariencia para Liferay 6.1
Desarrollo de temas de apariencia para Liferay 6.1Desarrollo de temas de apariencia para Liferay 6.1
Desarrollo de temas de apariencia para Liferay 6.1Julio Camarero
 
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
 
Creando una plantilla Joomla! de forma fácil
Creando una plantilla Joomla! de forma fácilCreando una plantilla Joomla! de forma fácil
Creando una plantilla Joomla! de forma fácilTito Alvarez
 
Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02Kimiemi VJ
 
Sesion moodle - "más allá de lo básico"...
Sesion moodle - "más allá de lo básico"...Sesion moodle - "más allá de lo básico"...
Sesion moodle - "más allá de lo básico"...Valeria Pleszowski
 
Sitio web (bootstrap4)
Sitio web (bootstrap4)Sitio web (bootstrap4)
Sitio web (bootstrap4)Emerson Garay
 
Drupalchix - PUCP 19.10.13
Drupalchix - PUCP 19.10.13Drupalchix - PUCP 19.10.13
Drupalchix - PUCP 19.10.13witperu
 
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
 
HTML5, CSS3, Jquery y Boostrap
HTML5, CSS3, Jquery y BoostrapHTML5, CSS3, Jquery y Boostrap
HTML5, CSS3, Jquery y BoostrapAlex Vogager
 
229707509 bootstrap-3-el-manual-oficial
229707509 bootstrap-3-el-manual-oficial229707509 bootstrap-3-el-manual-oficial
229707509 bootstrap-3-el-manual-oficialJavier Fonseca
 
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
 
Frameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web GrailsFrameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web GrailsEsteban Saavedra
 
Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web DesignJuan Morales
 
Construyendo un Addon Elastix: Avanzado
Construyendo un Addon Elastix: AvanzadoConstruyendo un Addon Elastix: Avanzado
Construyendo un Addon Elastix: AvanzadoPaloSanto Solutions
 
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
 

Similar a Liferay themestraining lr6.2-es_v1.0 (20)

Desarrollo de temas de apariencia para Liferay 6.1
Desarrollo de temas de apariencia para Liferay 6.1Desarrollo de temas de apariencia para Liferay 6.1
Desarrollo de temas de apariencia para Liferay 6.1
 
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
 
Creando una plantilla Joomla! de forma fácil
Creando una plantilla Joomla! de forma fácilCreando una plantilla Joomla! de forma fácil
Creando una plantilla Joomla! de forma fácil
 
Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02
 
Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02Sesionmoodle 101223143117-phpapp02
Sesionmoodle 101223143117-phpapp02
 
Sesion moodle - "más allá de lo básico"...
Sesion moodle - "más allá de lo básico"...Sesion moodle - "más allá de lo básico"...
Sesion moodle - "más allá de lo básico"...
 
Sitio web (bootstrap4)
Sitio web (bootstrap4)Sitio web (bootstrap4)
Sitio web (bootstrap4)
 
Drupalchix - PUCP 19.10.13
Drupalchix - PUCP 19.10.13Drupalchix - PUCP 19.10.13
Drupalchix - PUCP 19.10.13
 
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
 
Word press
Word pressWord press
Word press
 
HTML5, CSS3, Jquery y Boostrap
HTML5, CSS3, Jquery y BoostrapHTML5, CSS3, Jquery y Boostrap
HTML5, CSS3, Jquery y Boostrap
 
Servidores.pptx
Servidores.pptxServidores.pptx
Servidores.pptx
 
229707509 bootstrap-3-el-manual-oficial
229707509 bootstrap-3-el-manual-oficial229707509 bootstrap-3-el-manual-oficial
229707509 bootstrap-3-el-manual-oficial
 
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
 
Frameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web GrailsFrameworks de Desarrollo Web Grails
Frameworks de Desarrollo Web Grails
 
Responsive Web Design
Responsive Web DesignResponsive Web Design
Responsive Web Design
 
Construyendo un Addon Elastix: Avanzado
Construyendo un Addon Elastix: AvanzadoConstruyendo un Addon Elastix: Avanzado
Construyendo un Addon Elastix: Avanzado
 
Protostar como framework
Protostar como frameworkProtostar como framework
Protostar como framework
 
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...
 

Último

plande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfplande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfenelcielosiempre
 
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática4    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática4    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdfDemetrio Ccesa Rayme
 
Imperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperioImperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperiomiralbaipiales2016
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptxFelicitasAsuncionDia
 
Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularMooPandrea
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxlclcarmen
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxYadi Campos
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...JAVIER SOLIS NOYOLA
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMarjorie Burga
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICAÁngel Encinas
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfAngélica Soledad Vega Ramírez
 
Estrategias de enseñanza-aprendizaje virtual.pptx
Estrategias de enseñanza-aprendizaje virtual.pptxEstrategias de enseñanza-aprendizaje virtual.pptx
Estrategias de enseñanza-aprendizaje virtual.pptxdkmeza
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Alejandrino Halire Ccahuana
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfNancyLoaa
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioELIASAURELIOCHAVEZCA1
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaDecaunlz
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfPaolaRopero2
 

Último (20)

plande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdfplande accion dl aula de innovación pedagogica 2024.pdf
plande accion dl aula de innovación pedagogica 2024.pdf
 
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
Programacion Anual Matemática4    MPG 2024  Ccesa007.pdfProgramacion Anual Matemática4    MPG 2024  Ccesa007.pdf
Programacion Anual Matemática4 MPG 2024 Ccesa007.pdf
 
Medición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptxMedición del Movimiento Online 2024.pptx
Medición del Movimiento Online 2024.pptx
 
Power Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptxPower Point: Fe contra todo pronóstico.pptx
Power Point: Fe contra todo pronóstico.pptx
 
Imperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperioImperialismo informal en Europa y el imperio
Imperialismo informal en Europa y el imperio
 
Registro Auxiliar - Primaria 2024 (1).pptx
Registro Auxiliar - Primaria  2024 (1).pptxRegistro Auxiliar - Primaria  2024 (1).pptx
Registro Auxiliar - Primaria 2024 (1).pptx
 
Sesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronósticoSesión de clase: Fe contra todo pronóstico
Sesión de clase: Fe contra todo pronóstico
 
Ley 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circularLey 21.545 - Circular Nº 586.pdf circular
Ley 21.545 - Circular Nº 586.pdf circular
 
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptxTIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
TIPOLOGÍA TEXTUAL- EXPOSICIÓN Y ARGUMENTACIÓN.pptx
 
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptxSEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
SEXTO SEGUNDO PERIODO EMPRENDIMIENTO.pptx
 
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
LABERINTOS DE DISCIPLINAS DEL PENTATLÓN OLÍMPICO MODERNO. Por JAVIER SOLIS NO...
 
MAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grandeMAYO 1 PROYECTO día de la madre el amor más grande
MAYO 1 PROYECTO día de la madre el amor más grande
 
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICABIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
BIOMETANO SÍ, PERO NO ASÍ. LA NUEVA BURBUJA ENERGÉTICA
 
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdfSELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
SELECCIÓN DE LA MUESTRA Y MUESTREO EN INVESTIGACIÓN CUALITATIVA.pdf
 
Estrategias de enseñanza-aprendizaje virtual.pptx
Estrategias de enseñanza-aprendizaje virtual.pptxEstrategias de enseñanza-aprendizaje virtual.pptx
Estrategias de enseñanza-aprendizaje virtual.pptx
 
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
Lecciones 05 Esc. Sabática. Fe contra todo pronóstico.
 
Cuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdfCuaderno de trabajo Matemática 3 tercer grado.pdf
Cuaderno de trabajo Matemática 3 tercer grado.pdf
 
origen y desarrollo del ensayo literario
origen y desarrollo del ensayo literarioorigen y desarrollo del ensayo literario
origen y desarrollo del ensayo literario
 
Qué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativaQué es la Inteligencia artificial generativa
Qué es la Inteligencia artificial generativa
 
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdfGUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
GUIA DE CIRCUNFERENCIA Y ELIPSE UNDÉCIMO 2024.pdf
 

Liferay themestraining lr6.2-es_v1.0

  • 1. Liferay Themes Training (2014) Basado en las versiones Liferay 6.2 CE/EE
  • 2. Temario • Introducción a Liferay. • Introducción a Temas de Apariencia (Liferay Themes). • Instalando y configurando Liferay's Plugins SDK. • Interfaz de usuario de Liferay. • Introducción a Plugins. Día 1 Introducción
  • 3. Temario • Templates Principales y Estructura de Carpetas. • Extendiendo Liferay Themes adecuadamente. • Construyendo un Theme en Liferay. • Creando un Theme desde cero. Día 2 Anatomía de un Theme
  • 4. Temario • Modificando la cabecera (Header). • Personalizando el menú de Navegación principal. • Aplicando estilos a las cajas de los Portlets. • Modificando el pie (Footer). • Personalizando Hojas de Estilos. Día 3 Desarrollo de Themes
  • 5. Temario • Creando Esquemas de Color (Color Schemes) adicionales. • Layout Templates. • Empaquetando los Themes para su distribución. Día 4 Desarrollo de Themes (2)
  • 6. Temario • Introducción a Velocity. • Usando Velocity para Acceder a Variables. • Internacionalización de mensajes (i18n) en el Theme. • Embebiendo Portlets en el Theme. • Embebiendo Portlets en el Layout Template. • Diseño para Contenidos Web y Portlets. Día 4 Themes Avanzados
  • 7. Temario • Diseño Responsivo (Mobile/Tablets/Escritorio). • Cómo incluir jQuery y otras librerías Javascript en los Themes. • Resumen. • Buenas Prácticas. • Como optimizar el rendimiento. • Uso de Maven para construir Themes. Día 5 Themes Avanzados (2)
  • 9. Introducción Introducción a Liferay • Liferay Portal es uno de los frameworks de portales más maduros y de mayor auge en el mercado a nivel mundial. • Liferay Portal es de código abierto (Open Source) y totalmente personalizable. • Se basa en estándares J2EE. Portlets JSR 168/286 • Es un producto “server-agnóstico”, multiplataforma y diseñado para integrarse dentro del entorno empresarial.
  • 10. Introducción Introducción a Liferay • Incorpora un CMS muy completo, Versionado, Workflows, etc. • Set de Portlets. Wiki, Foros, Blogs, etc. • Alta disponibilidad y tolerancia a fallos. • Templates de Sitios Web. • Escalabilidad. • Y mucho más!
  • 11. Introducción Introducción a Liferay • Plataforma Web • Gadgets, Portlets, Páginas, Temas, elementos de navegación y Sitios Web. • Sistema WCM • Repositorio de Documentos, Contenidos Web, Workflows de aprobación, Versionado. • Plataforma de Colaboración • Colaboración de Equipos, Organización, Social. • Plataforma de Integración • Integración de diferentes herramientas de Empresa, Sitios, bajo una misma UI. • Plataforma de Aplicaciones Sociales • Herramientas Sociales integradas, Blogs, Foros, Wikis, Calendarios, Tareas, etc.
  • 12. Introducción Introducción a Temas de Apariencia (Liferay Themes) • Liferay incluye el concepto de Temas (Themes) a partir de la versión 3.5 para permitir a los usuarios cambiar el Look & Feel de sus portales. • Estos están formados por estructura de directorios concreta. • Los Themes permiten el concepto de herencia para facilitar su reutilización y reducir el tiempo de desarrollo. • Pueden contener plantillas, CSS, Imágenes, Javascript, etc. • Los Temas (Themes) son plugins de Liferay.
  • 13. Introducción Introducción a Temas de Apariencia (Liferay Themes) • Pueden ser aplicados a Sitios Web y Páginas. • Pueden dar estilos también a Portlets, Layout Templates y Contenidos Web. • Esquemas de Color (Color Schemes), son variantes de color de un mismo Theme. • Los Themes permiten configuraciones propias. • Themes de base, _unstyled, _styled, classic, control_panel, o cualquier theme propio!
  • 14. Introducción Instalando y configurando Liferay's Plugins SDK. • Herramienta Plugins SDK. • Apache Ant / Línea de comandos. • Liferay Developer Studio (Desarrollo Liferay EE). • Liferay IDE (Extensión de Eclipse). • Descargas: http://www.liferay.com/es/downloads/liferay-projects/liferay-ide
  • 16. Introducción Interfaz de usuario de Liferay Portlets Dockbar Navigation Menu
  • 17. Introducción Introducción a Plugins • La manera recomendada para extender Liferay, es mediante la construcción de plugins. • Los tipos de plugins pueden ser, Portlets, Themes, Layout Templates, Hooks, Ext, Web. • Las herramientas más habituales para construir estos ficheros WAR es ANT (Plugins SDK) o Maven de Apache. • Una vez construidos, éstos se empaquetan como ficheros WAR para ser desplegados en Liferay.
  • 18. Introducción Introducción a Plugins • El proceso de despliegue es el siguiente: Plugins (.war files) Auto Deploy Directory Liferay Portal + Application Server Auto Deploy Hot Deploy
  • 22. Anatomía de un Theme Templates Principales y Estructura de Carpetas. • Un theme define los estilos de todos los portlets y contenidos de una página, por tanto éste controla el modo en que se ve. • Desde el punto de vista del desarrollo, un theme se compone de un conjunto de ficheros CSS, imágenes, Javascript y plantillas de Velocity, JSP o Freemarker. • Cada theme se compone a partir de una serie de carpetas específicas.
  • 23. Anatomía de un Theme Templates Principales y Estructura de Carpetas. • Estructura de Carpetas de un Theme. Carpeta para los ficheros CSS Carpeta para las Imágenes Carpeta para los ficheros Javascript Carpeta para los Templates Carpeta para los ficheros de Configuración Carpeta de Trabajo!
  • 24. Anatomía de un Theme Extendiendo Liferay Themes adecuadamente. • Habitualmente en los proyectos construiremos nuestro tema a partir de un theme de base… _unstyled _styled classic control_panel Custom Theme My new Theme Built-in Liferay Themes
  • 25. Anatomía de un Theme Construyendo un Theme en Liferay. • Para construir un theme en Liferay es necesario primero diseñar el tema desde el punto de vista de Diseño Web. • Para ello es preciso identificar aquellos elementos que formarán parte de nuestro theme y cuáles no. • Se deben definir convenciones de nombres para dar estilos a portlets y componentes creados por el equipo de desarrollo. • La maquetación inicial puede existir o no, dependiendo del nivel de experiencia del diseñador/maquetador a la hora de construir el theme.
  • 26. Anatomía de un Theme Construyendo un Theme en Liferay. • Partes principales de un theme… Header Body Footer
  • 27. Anatomía de un Theme Construyendo un Theme en Liferay. • Partes principales de un theme… Layout Template
  • 28. Anatomía de un Theme Creando un Theme desde cero. • Paso 1. Crear un theme base utilizando una de las siguientes herramientas: • Liferay IDE • Liferay Developer Studio (EE - Enterprise Edition) • Plugins SDK - Línea de comandos. • Paso 2. Crear las siguientes carpetas: • [my-theme]/docroot/_diffs/css/ • [my-theme]/docroot/_diffs/images/ • [my-theme]/docroot/_diffs/templates/
  • 29. Anatomía de un Theme Creando un Theme desde cero. • Paso 3. Crear el fichero [my- theme]/docroot/_diffs/css/custom.css • Paso 4. Crear/Copiar el fichero [my- theme]/docroot/_diffs/templates/portal_normal.vm • Paso 5. Desplegar el Theme y comprobar que funciona correctamente antes de continuar. • Paso 6. Agregar las imágenes favicon.ico, screenshot.png y thumbnail.png en la carpeta /images. • Paso 7. Realizar las modificaciones necesarias para llegar al theme deseado a nivel HTML, CSS, imágenes, scripts…
  • 30. Anatomía de un Theme Creando un Theme desde cero. • Plantillas importantes a tener en cuenta: • /templates/init_custom.vm • Utilizado para inicializar variables, servicios, etc, que serán utilizados en el theme. • /templates/navigation.vm • Define el menú horizontal principal de navegación del Site. • /templates/portal_normal.vm • Plantilla principal del Sitio.
  • 31. Anatomía de un Theme Creando un Theme desde cero. • /templates/portal_pop_up.vm • Plantilla principal del Sitio utilizada en el modo popup. • /templates/portlet.vm • Plantilla utilizada para las cajas de los Portlets. • /css/custom.css • Fichero CSS principal desde el cual se construirá la estructura necesaria para dar estilos al portal. • CSS importante a tener en cuenta:
  • 32. Anatomía de un Theme Creando un Theme desde cero. • /js/main.js • Fichero JS principal donde se inyectan algunos comportamientos de elementos como el navigation o breadcrumb. También podemos agregar aquí Javasctipt personalizado. • Javascipt importante a tener en cuenta:
  • 33. Anatomía de un Theme Creando un Theme desde cero. • Tecnologías utilizadas por Liferay para UI. • AlloyUI • Es un Framework Javascript de desarrollo de UI construido sobre la librería YUI3 de Yahoo. AlloyUI utiliza también el Framework Javascript creado por Twitter Bootstrap (HTML/CSS), para simplificar el desarrollo de UI en aplicaciones Web. • http://alloyui.com/ • http://getbootstrap.com/
  • 34. Anatomía de un Theme Creando un Theme desde cero. • Tecnologías utilizadas por Liferay para UI. • HTML5 • AlloyUI se basa en la estructura de HTML5. Esta estructura sólo se basa en un único <!doctype> <!DOCTYPE html> <html> <head> <title>Title of the document</title> </head> <body>Body of the document</body> </html>
  • 35. Anatomía de un Theme Creando un Theme desde cero. • Tecnologías utilizadas por Liferay para UI. • HTML5 • Introduce nuevos elementos con sentido semántico como <nav>, <footer> en lugar de <div>,<span>, y otros nuevos elementos multimedia como <audio> y <video>. • Ha sido diseñado para cumplir con las exigencias de los Sitios Web modernos de una manera estandarizada. • http://www.w3.org/community/webed/wiki/HTML
  • 36. Anatomía de un Theme Creando un Theme desde cero. • Tecnologías utilizadas por Liferay para UI. • Style – CSS3 • La última versión del estándar de CSS, es compatible con sus predecesores, e introduce nuevos módulo de mejoras como: Selectores, Backgrounds y Borders, Text Effects, Animations, Multiple Column Layout, etc… div { border:2px solid; border-radius:25px; } • http://www.w3.org/community/webed/wiki/CSS
  • 37. Anatomía de un Theme Creando un Theme desde cero. • Ficheros de configuración /docroot/WEB-INF/ • liferay-look-and-feel.xml – Define el id/nombre/versión del theme, su configuración y esquemas de color. <theme id=”tiger” name=”Tiger”> <settings> <setting key="portlet-setup-show-borders-default" value="false"/> </settings> </theme>
  • 38. Anatomía de un Theme Creando un Theme desde cero. • Ficheros de configuración /docroot/WEB-INF/ • liferay-plugin-package.properties – Define información del plugin, versiones soportadas, licencia, autor, etc. name=Training1 module-group-id=liferay module-incremental-version=1 page-url=http://www.liferay.com … author=Liferay, Inc. licenses=LGPL liferay-versions=6.2.0+ resources-importer-developer-mode-enabled=true
  • 41. Desarrollo de Themes Modificando la cabecera (Header). • Analizando el fichero portal_normal.vm Body Wrapper Header Content Footer $site_name $theme.include($content_include) #dockbar() #language ("powered-by") Macros Variables Util Objects Macro Languages
  • 42. Desarrollo de Themes Modificando la cabecera (Header). • Modificando la cabecera (Header). <header id="banner" role="banner”> ... </header> • Los cambios realizados dentro del “header” serán reflejados en la cabecera el theme. • Mantener los ids, classes y roles principales, es fundamental para no perder funcionalidad.
  • 43. Desarrollo de Themes Personalizando el menú de Navegación principal. • Copiar/Editar el fichero [my- theme]/docroot/_diffs/templates/navigation.vm • Cada ítem $nav_item, corresponde a cada una de las opciones de menú de navegación principal. #foreach ($nav_item in $nav_items) ... #end • A través de $nav_item, se puede acceder a los diferentes atributos y configuraciones de cada página, ejemplo: $nav_item.icon(), $nav_item.getName(), $nav_item.getURL().
  • 44. Desarrollo de Themes Personalizando el menú de Navegación principal. • A través de $nav_item.hasChildren(), se accede a las páginas hijas del ítem en cuestión. • Cada ítem $nav_child, es igual a un $nav_item, es decir, posee sus mismos atributos, configuraciones, etc. #foreach ($nav_child in $nav_item.getChildren()) ... #end • A través de $nav_child, se puede acceder a los diferentes atributos y configuraciones de cada página, ejemplo: $nav_child.getName(), $nav_child.getURL().
  • 45. Desarrollo de Themes Aplicando estilos a las cajas de los Portlets. • Copiar/Editar el fichero [my- theme]/docroot/_diffs/templates/portlet.vm • Básicamente en este fichero se puede modificar las cajas de los portlets. Esta se estructura en cabecera, y cuerpo del portlet. $portlet_title $theme.portletIconOptions() $portlet_display.writeContent($writer) • Hay que tener en cuenta a la hora de hacer cambios, que este fichero afecta a todos los portlets.
  • 46. Desarrollo de Themes Modificando el pie (Footer). • Modificando el pie (Footer). <footer id="footer" role="contentinfo"> ... </footer> • Los cambios realizados dentro del “footer” serán reflejados en el pie del theme. • Para contenidos del pie más complejos como menús, etc, se puede extraer el Footer a un fichero independiente.
  • 47. Desarrollo de Themes Personalizando Hojas de Estilos. • Como hemos visto el custom.css es el fichero donde, a partir del él, comenzaremos la personalización de las hojas de estilos. Este es el último fichero CSS incluido en la herencia de themes, con el fin de permitir “sobrescribir” cualquier estilo que se necesite cambiar. @import url(base.css); @import url(application.css); @import url(layout.css); @import url(dockbar.css); @import url(navigation.css); @import url(portlet.css); @import url(extras.css); @import url(custom.css); main.css
  • 48. Desarrollo de Themes Personalizando Hojas de Estilos. • La técnica más utilizada para realizar un theme, es utilizar la característica de herencia, y aplicar pequeños cambios hasta llevar el Diseño Web a cumplir los requisitos deseados. • Liferay 6.2 viene integrado con Compass, el cual es un Open Source CSS Authoring Framework, que utiliza el lenguaje Sass para permitir la creación de potentes hojas de estilos. El concepto base es el pre-procesamiento de los ficheros CSS.
  • 49. Desarrollo de Themes Personalizando Hojas de Estilos. • Si abrimos por ejemplo el fichero [my- theme]/docroot/css/base.css, veremos que la primera línea es: • @import "compass”; • Esta directiva proporciona el acceso al uso de Compass y sus características ya integradas en los Themes de Liferay.
  • 50. Desarrollo de Themes Personalizando Hojas de Estilos. • Un mixin es una función CSS que puede tener o no parámetros, y da como salida una definición de estilos. Un mixin se declara utilizando el comando @mixin y es llamado utilizando el comando @include. @mixin custom-field-focus { background: #CECE none; border-color: #FF0; } input, textarea { &.focus { @include custom-field-focus; } }
  • 51. Desarrollo de Themes Personalizando Hojas de Estilos. • En el ejemplo anterior se define una función llamada custom-field-focus que se aplica cada vez que se le asigna a un elemento input o textarea el class focus, cambiando su color de borde y background. • Compass utiliza el lenguaje SASS, y este último tiene dos sintaxis diferentes, Scss (extensión .scss) y Sass (extensión .sass). La sintaxis más comúnmente utilizada es Scss ya que Sass se basa en indentaciones de las líneas en lugar de llaves {}, siendo más antigua y menos utilizada. • http://compass-style.org/ • http://sass-lang.com/
  • 52. Desarrollo de Themes Personalizando Hojas de Estilos. • Utilizando imágenes desde CSS • Para referenciar imágenes desde el CSS, la mejor manera es hacerlo con un path relativo utilizando “../images”, por ejemplo: .box img { background-image: url(../images/box_bg.png); }
  • 53. Desarrollo de Themes Personalizando Hojas de Estilos. • Utilizando imágenes desde Templates • Para referenciar imágenes desde templates, la mejor alternativa es utilizar el siguiente formato a través de la variable de Velocity $images_folder: <img src=”$images_folder/my_image.png” />
  • 55. Desarrollo de Themes (2) Themes Avanzados
  • 56. Desarrollo de Themes (2) Creando Esquemas de Color (Color Schemes) adicionales. • Los esquemas de color (Color Schemes), se definen en el fichero docroot/WEB-INF/liferay-look-and-feel.xml. <theme id=”good-day" name=”Good Day"> <settings> <setting key="my-setting" value="my-value" /> </settings> <color-scheme id="01" name="Day"> <css-class>day</css-class> <color-scheme-images-path> ${images-path}/color_schemes/${css-class} </color-scheme-images-path> </color-scheme> <color-scheme id="02" name="Night"> <css-class>night</css-class> </color-scheme> </theme>
  • 57. Desarrollo de Themes (2) Creando Esquemas de Color (Color Schemes) adicionales. • Crear las siguientes carpetas y ficheros: • [my-theme]/docroot/_diffs/css/color_schemes/day.css • [my-theme]/docroot/_diffs/css/color_schemes/night.css • [my-theme]/docroot/_diffs/images/color_schemes/day • [my-theme]/docroot/_diffs/images/color_schemes/night Nota: Es posible especificar un screenshot.png y thumbnail.png para cada esquema de color, colocando los ficheros en la carpeta de imágenes day/night. • Agregar a [my-theme]/docroot/_diffs/css/custom.css @import url(color_schemes/day.css); @import url(color_schemes/night.css);
  • 58. Desarrollo de Themes (2) Configuraciones en Themes. • Es posible tener configuraciones personalizadas en el theme, éstas se definen en el fichero docroot/WEB- INF/liferay-look-and-feel.xml. <theme id=”my-design" name=”My Design"> <settings> <setting key="my-setting" value="my-value" /> </settings> </theme> a $theme.getSetting("my-setting") • Utilización en el theme:
  • 59. Desarrollo de Themes (2) Layout Templates. • Los Layout Templates son un tipo de plugin. • Estos definen las diferentes columnas y filas utilizadas para subdividir el Body donde se organizan los portlets. Built-in Liferay’s Layout Templates
  • 60. Desarrollo de Themes (2) Layout Templates. • Al igual que los themes los layout templates también tienen su propia estructura de carpetas y ficheros. columns-1-4-1-layouttpl/ docroot/ META-INF/ WEB-INF/ liferay-layout-templates.xml liferay-plugin-package.properties columns_1_4_1.png columns_1_4_1.tpl columns_1_4_1.wap.tpl build.xml
  • 61. Desarrollo de Themes (2) Layout Templates. • Ficheros del Layout Template: • [project-name].tpl: Genera el HTML de la estructura del template. • [project-name].wap.tpl: Variante del template para dispositivos móviles. WAP (Wireless Application Protocol). • [project-name].png: Thumbnail representando la disposición del layout template.
  • 62. Desarrollo de Themes (2) Layout Templates. • Ficheros de configuración del Layout Template: • liferay-layout-templates.xml: Especifica el id/nombre del layout template, y la ubicación de sus ficheros TPL y PNG. • liferay-plugin-package.properties: Describe el proyecto que contiene el plugin, al igual que en el resto de plugins, esta información es utilizada por el proceso de auto-despliegue en caliente de Liferay.
  • 63. Desarrollo de Themes (2) Layout Templates. • Los layout templates se construyen a partir de DIVs. <div class="columns-2" id="main-content" role="main"> <div class="portlet-layout row-fluid"> <div class="portlet-column portlet-column-first span6" id="column-1"> $processor.processColumn("column-1", "portlet-column-content portlet-column-content-first") </div> <div class="portlet-column portlet-column-last span6" id="column-2"> $processor.processColumn("column-2", "portlet-column-content portlet-column-content-last") </div> </div> </div>
  • 64. Desarrollo de Themes (2) Layout Templates. • En el <div> principal se deben aplicar una serie de atributos requeridos por Liferay: class="columns-2” (con el nombre del proyecto del Layout Template). También el id=“ main-content” y el role=“main” deben ser aplicados a este <div> principal. • Dentro del <div> principal, hay que crear <div>s para cada fila del layout template. Se deben aplicar las clases portlet- layout y row-fluid CSS a estos <div>s: <div class="portlet-layout row-fluid">.
  • 65. Desarrollo de Themes (2) Layout Templates. • A su vez dentro de cada fila <div>, se deben especificar <div>s para una o más columnas. Cada <div> de columna debe tener la clase portlet-column. Si una columna es la primera, última, o simplemente una columna en la fila, se debe especificar otra clase CSS: portlet-column-first, portlet-column-last, o portlet-column-only. • Los nuevos themes de Liferay 6.2, utilizan un fork de Twitter Bootstrap llamado Alloy Bootstrap que afecta a los layout templates. Los layout templates utilizan el sistema de grid de 12 columnas: http://getbootstrap.com/css/#grid
  • 66. Desarrollo de Themes (2) Layout Templates. • Para cada <div> de columna, se debe especificar una clase CSS llamada span[width] donde width es el numerador de porción respeto a los 12 bloques, que representa el ancho de la columna.
  • 67. Desarrollo de Themes (2) Layout Templates. • A continuación, para cada columna <div>, hay que especificar un ID único. Ejemplo: id="column-1", id="column-2", etc.. • Por último, dentro de cada columna <div>, la directiva de Velocity que será responsable de agregar los portlets que han sido configurados en cada columna: $processor.processColumn("column-1", "portlet-column- content portlet-column-content-first")
  • 68. Desarrollo de Themes (2) Empaquetando los Themes para su distribución. • Los themes al igual que otros plugins se empaquetan y distribuyen como ficheros .war • El empaquetado se puede generar a partir del Plugins SDK ya sea desde el IDE o desde la línea de comandos utilizando ANT o MAVEN. • - ant clean deploy. • - mvn clean install.
  • 69. Desarrollo de Themes (2) Empaquetando los Themes para su distribución. • Desde Liferay IDE ejecutar los targets clean y deploy:
  • 70. Themes Avanzados Introducción a Velocity. • Apache Velocity es un motor de templates basado en Java, que provee un lenguaje de templates para referenciar objetos definidos en el código Java. Es un proyecto open source dirigido por Apache Software Foundation. • http://velocity.apache.org/ • Liferay utiliza este motor de templates para renderizar los themes, layout templates, plantillas de contenidos, etc. • Liferay define una serie de variables disponibles en los templates para ser utilizados por los desarrolladores.
  • 71. Themes Avanzados Usando Velocity para Acceder a Variables. • Algunas variables disponibles para Themes. $theme_display $portlet_display $theme_timestamp $theme_settings $css_class $layout $page_group $liferay_toggle_controls $liferay_dockbar_pinned $css_folder $company_logo $company_logo_height $company_logo_width $company_url $user_id $is_default_user $user_first_name $user_middle_name $user_last_name $user_name Etc…. $images_folder $javascript_folder $templates_folder $full_css_path $full_templates_path $css_main_file $js_main_file $company_id $company_name • Se pueden ver todas las variables disponibles en el fichero [APP_SERVER_PORTAL_DIR]/html/themes/_unstyled/temp lates/init.vm
  • 72. Themes Avanzados Usando Velocity para Acceder a Variables. • Variables disponibles para Layout Templates:
  • 73. Themes Avanzados Internacionalización de mensajes (i18n) en el Theme. • Utilizamos mensajes internacionalizados para mostrar texto en diferentes idiomas de manera dinámica. • Estos textos se deben definir en ficheros de idioma cargados en el contexto del portal. • Utilizando la macro #language es posible acceder a las claves (Keys) definidas en los ficheros de idioma. • Generalmente se utilizan plugins de tipo Hook para incluir nuevos mensajes en los diferentes idiomas. • Por ejemplo: #language (”hello-world”)
  • 74. Themes Avanzados Embebiendo Portlets en el Theme. • Es posible embeber portlets directamente en el theme de manera programática ya sean instanciables o no- instanciables. • Colocando la siguiente línea en nuestro template, estamos colocando el portlet de búsqueda no-instanciable en el theme de manera programática: • $theme.runtime("77”)
  • 75. Themes Avanzados Embebiendo Portlets en el Theme. • Para colocar un portlet instanciable hay que especificar el nombre de instancia completo. Este nombre de instancia se puede obtener mirando el código fuente de la página por ejemplo: INSTANCE_5anm6NtLp0kZ • Con la siguiente línea se coloca una instancia concreta del portlet Navigation • $theme.runtime("71_INSTANCE_5anm6NtLp0kZ")
  • 76. Themes Avanzados Embebiendo Portlets en el Layout Template. • Es posible embeber portlets directamente en el layout template de manera programática ya sean instanciables o no-instanciables, similar como para los themes. <div class="columns_1_4_1" id="main-content" role="main"> <div class="portlet-layout row-fluid"> <div class="portlet-column portlet-column-only" id="column-1"> $processor.processPortlet( "my-hello-world-portlet_WAR_myhelloworldportlet") $processor.processColumn("column-1", "portlet-column-content portlet-column-content-only") </div> </div> ..... </div>
  • 77. Themes Avanzados Diseño para Contenidos Web y Portlets. • Para dar diseño y estilos a Contenidos Web y Portlets vamos a utilizar básicamente las mismas técnicas de CSS explicadas hasta ahora. • Para el caso de los contenidos Web, es posible dar estilos en el propio contenido mediante el uso de la etiqueta <style>, o bien mediante el propio Theme, destinando estilos a este fin. • Por lo general se utiliza un elemento <div> principal que encierra, o bien el contenido Web, o bien el portlet. • Para el caso de portlets, podemos dar estilos dentro del propio portlet, en el theme, e incluso en la propia instancia vía panel de administración (Look & Feel).
  • 80. Themes Avanzados (2) Diseño Responsivo (Mobile/Tablets/Escritorio). • Liferay proporciona herramientas para realizar Diseños Web Responsivos, tanto a nivel de Themes, como también de Layout Templates o Contenidos Web. Incluso podemos realizar multi-sites para diferentes dispositivos utilizando la característica de Reglas de Familias de Dispositivos. • AlloyUI permite la detección por Javascript del tamaño de pantalla del dispositivo (Smartphones/Tables/Desktop), y la utilización de esta información en los ficheros CSS de nuestro Theme. • Por ejemplo: iPad en landscape o Desktop cuya pantalla es >= 960 pixeles de ancho.
  • 81. Themes Avanzados (2) Diseño Responsivo (Mobile/Tablets/Escritorio). • Un iPad en portrait cuya pantalla es <= 720 pixeles de ancho. • Para poder aplicar estilos de acuerdo al tipo de pantalla, es necesario realizar una serie de pasos. • Un teléfono móvil en portrait (480 px), o en landscape (320 px).
  • 82. Themes Avanzados (2) Diseño Responsivo (Mobile/Tablets/Escritorio). • Paso 1. Incluir en el portal_normal.vm de nuestro theme, el siguiente META. … <head> <title>$the_title - $company_name</title> <meta content="target-densitydpi=160dpi, width=device-width, minimum-scale=1.0, maximum-scale=1.0" name="viewport" /> $theme.include($top_head_include) </head> …
  • 83. Themes Avanzados (2) Diseño Responsivo (Mobile/Tablets/Escritorio). • Paso 2. Agregar la siguiente invocación para habilitar los aui-viewport. Esta llamada también se puede realizar desde el fichero [my-theme]/docroot/_diffs/js/main.js … <script type="text/javascript"> AUI().use('aui-viewport'); </script> $theme.include($body_bottom_include) $theme.include($bottom_include) </body> </html> …
  • 84. Themes Avanzados (2) Diseño Responsivo (Mobile/Tablets/Escritorio). • Paso 3. Agregar estilos personalizados para los diferentes tipos de pantalla en el fichero [my- theme]/docroot/_diffs/css/custom.css .view-lt480 #navigation li { display: block; float: none; } .view-480 #navigation li { display: block; float: none; }…
  • 85. Themes Avanzados (2) Diseño Responsivo (Mobile/Tablets/Escritorio). • Estos tipos de estilos se pueden aplicar para las el resto de resoluciones de pantalla si se desea que sea completamente responsivo: • .view-gt320 • .view-320 • .view-lt320 • .view-gt480 • .view-480 • .view-lt480 • .view-gt720 • .view-720 • .view-lt720 • .view-gt960 • .view-960 • .view-lt960
  • 86. Themes Avanzados (2) Diseño Responsivo (Mobile/Tablets/Escritorio). • Con Liferay 6.2 y la inclusión de Alloy Bootstrap, podemos utilizar en nuestros themes unas funciones (mixin) ya disponibles llamadas respond-to, las cuales permiten de una manera mucho más sencilla y elegante aplicar estilos a diferentes tipos de dispositivos, como se muestra en el siguiente ejemplo: @include respond-to(phone) { body { background: red; } input { width: 100%; } }
  • 87. Themes Avanzados (2) Diseño Responsivo (Mobile/Tablets/Escritorio). /* will only style phone displays smaller than 768px */ @include respond-to(phone) { body { background: red; } } /* will only style phone and tablet displays smaller than 980px */ @include respond-to(phone, tablet) { body { background: blue; } } /* will only style tablet and desktop displays greater than 768px */ @include respond-to(tablet, desktop) { body { background: green; } }
  • 88. Themes Avanzados (2) Cómo incluir jQuery y otras librerías Javascript en los Themes. • Si quisiéramos incluir jQuery u otra librería Javascript a nuestro theme, basta con colocar la librería en la carpeta js de nuestro theme, por ejemplo: [my- theme]/docroot/_diffs/js/jquery.js o custom-script.js, y luego incluirlo en el template principal [my- theme]/docroot/_diffs/templates/portal_normal.vm ... <head> #js("$javascript_folder/jquery.js") #js("$javascript_folder/custom-script.js") …
  • 89. Themes Avanzados (2) Resumen. • Un Theme es un tipo de plugin que define como se verán los Sitios Webs o páginas que lo utilicen. • Es posible realizar diseños responsivos para soportar diferentes tipos de tamaño de pantallas de dispositivos. • Se empaquetan en ficheros WAR para su distribución e instalación dentro de Liferay Portal. • Los themes se componen básicamente de HTML, CSS, Imágenes, Templates y Javascript y permiten tener diferentes esquemas de color y configuraciones. • Su construcción más adecuada es mediante la herencia de otros themes de base, que permitan la reutilización, y acorten los tiempos de desarrollo.
  • 90. Themes Avanzados (2) Buenas Prácticas. • Definir junto a los programadores una serie de reglas de nombres para los estilos, utilizando el concepto de <div> contenedor con el id del portlet como clase principal de cada vista. • Evitar el uso de estilos fuera de las hojas de estilo (CSS). • Crear a partir del custom.css una estructura de ficheros importados. [liferay-css]_override.css, [id-portlet].css con el objetivo de mejorar la organización de los estilos y su mantenimiento. • Si se parte de una maqueta HTML estática para construir el theme, comprobar primero que ésta funciona en los diferentes navegadores requeridos.
  • 91. Themes Avanzados (2) Como optimizar el rendimiento. • Liferay utiliza opciones para desarrollo que por defecto estarán activas desde el IDE a través del fichero portal- developer.properties, y éstas son cargadas a través del fichero portal-ide.properties. Estas propiedades desactivan las compresiones y cacheo de CSS, JS, e Imágenes. Para un mayor rendimiento recordar activarlas en el entorno de preproducción para asegurarse de que todo funciona según lo esperado. theme.css.fast.load=true, theme.images.fast.load=true, javascript.fast.load=true
  • 92. Themes Avanzados (2) Como optimizar el rendimiento. • Se recomienda controlar el peso de las páginas para evitar tiempos demasiado grandes de carga. Una buena herramienta para visualizar estos tiempos desde el navegador, es la extensión de Firefox Firebug.
  • 93. Themes Avanzados (2) Uso de Maven para construir Themes. • Apache Maven es una herramienta muy completa para gestión de despliegues, dependencias, documentación etc. • Desde el lanzamiento de Liferay 6.2, la herramienta Liferay IDE trae soporte para Maven! • Desde línea de comandos se cuenta con una serie de arquetipos que permiten crear la estructura de un theme, o cualquier otro tipo de plugin con un simple comando. mvn archetype:generate -DarchetypeArtifactId=liferay-theme-archetype - DarchetypeGroupId=com.liferay.maven.archetypes - DarchetypeVersion=6.2.0-ga1 -DartifactId=lrexperts-theme - DgroupId=com.lrexperts.liferay -Dversion=1.0.0-SNAPSHOT