Esto último parece que va a decantar en un fork en el que va a haber un Ω que va a ir mas por el lado de lo que fuera Ω3 y otra rama que irá por lo que actualmente es Ω4.
Esto es malo? No. Vamos a tener Las dos filosofias de Omega en Drupal 8. De hecho parece que es fubhy el que va a crear el fork y lo va a llamar "KHAN"
Las novedades que traiga khan/Omega 5 dependerán mucho de como evolucione D8, por lo que de momento no se pronuncian.
Omega como buen theme base tiene un comando drush para crear un subtheme:
drush omega-subtheme NUEVOTHEME
bower install
#o pueden usar make
drush make libraries.make --no-core --contrib-destination=.
Necesitas instalar sass, compass, gemas extra y un par de cosas mas en tu sistema para que todo funcione.
Por eso Omega viene con bundler.
sudo gem install bundler && bundle install
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0, startColorstr='#d8ffffff', endColorstr='#d8ffffff');
body{
background: url('../img/red-a-0.75.png');
}
body{
@include rgba-background(rgba(#FF0000, .75));
}
body {
background: url('../img/rgbapng/ff0000bf-5.png');
background: rgba(255, 0, 0, 0.75);
}
Esta gema nos saca de una situación bastante recurrente y molesta. Ya no tenemos que andar puteando cuando creamos un nuevo archivo, compilamos vamos al navegador no vemos nada y terminamos cayendo en la cuenta que como no lo habiamos incluido en el archivo maestro ese nuevo archivo no se va a renderizar en la vida.
@import "components/*"
O Importar todo lo que haya en todos los subdirectoios recursivamente:
@import "components/**/*"
Con lo que pasamos de tener interminables listas de includes como estas:
@import "base/forms";
@import "base/icons";
@import "base/layouts";
@import "base/lists";
@import "base/tables";
@import "base/typography";
@import "components/blocks";
@import "components/breadcrumb";
@import "components/contact-data";
@import "components/tables";
@import "components/tabs";
@import "components/views/grid";
A esto:
@import "base/**/*";
@import "components/**/*";
Omega no usa media queries, usa la gema breakpoint que está mucho mas buena.
Las media queries son un poco difíciles de tratar a veces. No son semánticas y por ahí te tenés que poner a pensar si la que estas tocando es la que deberías. Bueno este plugin hace todo eso mucho mas fácil.
$between: 100px 479px;
$mobile: 480px;
$tablet: 768px;
$escritorio: 1280px;
body {
background: yellow;
@include breakpoint($between) {
background: $color-movistar;
}
@include breakpoint($mobile) {
background: $color-vodafone;
}
@include breakpoint($tablet) {
background: $color-orange;
}
@include breakpoint($escritorio) {
background: $color-yoigo;
}
}
Hay un par de plugins compass mas en omega como "toolkit" y "compass-normalize" pero no son muy relevantes para esta charla.
Es un programa que abre un canal entre la aplicación misma y un js inyectado en la página que estamos maquetando.
Cuando tocamos un archivo SASS, livereload es capaz de enviar los css compilados directamente al browser y el cliente js se encarga del resto.
Vas RAPIDO.
No tenes que recargar la página cada vez que quieras ver como queda lo que acabas de cambiar.
Al no tener que recargar, podes hacer mas fácilmente cosas como maquetar un modal que aparece después de hacer ciertas acciones en lugar de tener que repetir esos pasos cada vez que refrescas.
drush omega-guard [tutheme]
Ya está. livereload viene configurado para funcionar sin mas.
Problema típico: template.php es enorme.
Omega 4 da una de las soluciones mas elegantes que he visto en mucho tiempo. Separa lo repetitivo :)
Dentro de cada uno de estos directorios tenés que crear un archivo para cada hook que pretendas usar usando una nomenclatura. Ej: HOOK-preprocess.inc
Y dentro del archivo solo pones el código del hook:
function drupixma_preprocess_block(&$vars) {
$vars['block']->subject = "bla bla bla";
}
¿Y si pudieramos tratar a los layout como un recurso mas?
¿Empaquetarlos?
¿Separarlos del resto de un theme?
¿Moverlos a otros proyectos?
Implementa un sistema de layouts válido para él mismo, pero a su vez también para Panels y Context.
Y lo anterior marca un punto de inflexión:
Se pueden empaquetar y mover a otros themes (o módulos llenos de layouts).
Y lo mejor de todo es que NO dependen de Panels ni de Context.
name = Landing description = Tipo portada landing. preview = preview.png template = landing-layout regions[one] = One regions[two] = Two regions[three] = Three stylesheets[all][] = css/landing.layout.css scripts[] = js/landing.layout.js
Pros:
No puede ser mas simple.
Se puede cambiar el layout activo mediante HOOK_omega_layout_alter()
Contras:
Solo podés seleccionar un layout activo y no podes cambiarlo dinamicamente como con context o panels.
Solo hay que habilitar un módulo que hace de puente: context_omega
Para ello usamos panels everywhere (PE)
Los layout de Omega son compatibles con PE
Es un gestor de dependencias para la capa frontal (de la familia de npm o composer).
Cada día se usa mas porque hacía falta.
Creado por twitter.
Su uso en omega es muy simple: bower install
"name": "omega",
"versión": "1.0.0",
"dependencies": {
"respond": "fubhy/respond",
"selectivizr": "fubhy/selectivizr",
"html5shiv": "fubhy/html5shiv",
"matchmedia": "fubhy/matchmedia",
"pie": "fubhy/pie"
}
}
Como el autor de omega tenía miedo de quedarse corto con bower, decidió poner make como un gestor de dependencias alternativo.
drush make libraries.make --no-core --contrib-destination=.
Es un task manager usado prácticamente por todos los proyectos modernos.
Sirve para cualquier tarea mecánica:
Extraigo imágenes de un PSD pero sin pensar en la optimización de las imágenes
Quiero poder tirar un comando en consola que genere una versión optimizada de todas las imágenes extraídas
Para ello solo necesito crear un nuevo task y usar un plugin llamado imagemin
imagemin: {
dist: {
files: [
{
expand: true,
cwd: 'images/src',
src: ['**/*.{png,jpg,gif}'],
dest: 'images/dist'
}
]
}
},
Y aprovecharla mediante un nuevo task:
grunt.registerTask('optimizar', [
'imagemin:dist'
]);
El diseñador quiere auditar las imágenes que vamos usando del diseño original.
No sabe usar GIT, ni usa un IDE, ni le interesa andar navegando por los archivos del proyecto.
Quiere que en lo posible le pasemos un zip con las imágenes.
Pues usamos un nuevo plugin llamado compress
Y un nuevo task que aproveche la generación de imágenes del plugin anterior, y cuando acabe que comprima el directorio de imágenes:
compress: {
main: {
options: {
archive: 'disenyador.tgz'
},
files: [
{src: ['images/dist/**/*']}
]
}
},
grunt.registerTask('imagenes-y-comprimir', [
'imagemin:dist',
'compress:main'
]);
/