Migración de datos CSV a párrafos
Con el trabajo cotidiano de la oficina es natural que en el desarrollo de tareas se presenten desafíos y potenciales temas de investigación. Con la incorporación de nuestro desarrollador Lucas, al grupo de mantenedores del core del sistema de migraciones hemos decidido adentrarnos en este tema poco documentado como es la migración de datos CSV a párrafos.
Párrafos es la nueva forma de creación de contenido. Le permite a los constructores de sitios hacer las cosas más limpias para que pueda dar más poder de edición a sus usuarios finales.
Charlotte León Mié, 12/07/2016 - 08:38Configurar las carpetas publicas y privadas en Drupal 8
#DrupalDrama
Luego uno se encuentra con cuentas y hashtag relacionadas a Drupal. En este caso lo relacionado a los dramas con drupal. Es una buena manera de reírse y de sufrir.
Echenle un ojo: https://twitter.com/drupaldrama y https://twitter.com/hashtag/DrupalDrama?src=hash
Categorias: Ligas TweetDrupal & Beers: Gestión de configuración en Drupal 8
Sinónimos 8.x
En este artículo quiero presentar la versión 8.x del módulo Synonyms (https://www.drupal.org/project/synonyms). En términos generales dicho módulo tiene las siguientes funciones:
- Guarda los sinónimos de entidades dentro de sus campos (Fields y Base Fields)
- Provee los controles select con sinónimos y autocompletar con sinónimos para los campos de referencia a entidad
- Provee de filtros y argumentos con sinónimos en las vistas (views)
Entonces se introduce el concepto de los sinónimos de entidad. Un sinónimo es simplemente una frase (cadena de caracteres) que se supone tiene un significado sinonímico al nombre de la entidad a la cual pertenece. Por ejemplo, si tenemos países como términos de taxonomía, podría haber el término México con un sinónimo Méjico.
Para empezar, veámos en detalle cómo se puede aprovechar el concepto de sinónimo y luego analizaremos cómo realmente se guardan los sinónimos de las entidades en la base de datos.
Primeramente hay que aclarar que existe la idea de comportamientos (behaviors). Comportamiento es una atómica función que toma sinónimos de tus entidades y puede hacer algo productivo con ellos. El módulo tiene 2 comportamientos: select con sinónimos y autocompletar con sinónimos.
Select con sinónimos
Como bien dice su nombre, ese comportamiento crea un control para los campos de referencia a entidad de lista desplegable. Esta lista va a tener no solo los nombres de las entidades que pueden ser referidas sino también sus sinónimos. En conjunto con jQuery.Chosen (https://www.drupal.org/project/chosen) se produce una herramienta poderosa.
Cabe señalar que los usuarios avanzados también pueden utilizar ese select con sinónimos dentro de sus formas:
<?php
$form[‘synonyms_select’] = array(
‘#type’ => ‘synonyms_entity_select’,
‘#key_column’ => ‘target_id’,
‘#target_type’ => ‘user’, // Tipo de entidad que generar.
‘#handler’ => ‘default’, // Tipo de EntityReferenceSelection Plugin que utilizar.
‘#handler_settings’ => array(), // Configuración de EntityReferenceSelection Plugin.
‘#multiple’ => FALSE, // Si hacer el select multiple.
‘#default_value’ => array(1), // Lista de IDs de las entidades que deben de ser eligidas por default.
);
?>
Autocompletar con sinónimos
De manera parecida, ese comportamiento crea un control para los campos de referencia a entidad de autocompletar, pero las sugerencias vienen no solo basadas en los nombres de las entidades sino también en sus sinónimos.
Ese control tiene algunas configuraciones:
- Cuántas sugerencias producir como máximo. Por defecto no se hacen más que 10 sugerencias, lo cual es bastante razonable. Pero siempre se puede ajustar.
- Si se debe sugerir la misma entidad únicamente a través de una sola sugerencia: a veces la misma entidad puede ser sugerida por su nombre y por alguno de sus sinónimos a la vez. Si activas esta opción será sugerida solo una vez, ya sea por su nombre o por alguno de sus sinónimos.
- Tipo de búsqueda que realizar: sugerir solo los nombres o sinónimos que empiezan con la palabra clave o los que contienen la palabra clave.
De igual forma, como en el caso de select con sinónimos, los Drupaleros avanzados pueden utilizar ese control directamente en sus formas:
<?php
$form[‘synonyms_autocomplete’] = array(
'#type' => 'synonyms_entity_autocomplete',
'#target_type' => ‘user’, // Tipo de entidad que sugerir.
'#target_bundles' => array(‘user’), // Vector de bundles que sugerir o NULL para segerir todas las bundles dentro del tipo de entidad especificado.
'#suggestion_size' => 10, // Cuántas sugerencias producir como el máximo.
'#suggest_only_unique' => FALSE, // Si una entidad solo se puede sugerir a través de una sola sugerencia.
'#match' => ‘CONTAINS’, // Cómo ejecutar la búsqueda. Puede ser CONTAINS o STARTS_WITH.
'#default_value' => array(User::load(1)), // Vector de entidades que tienen que estar pre-elegidas dentro del campo de autcompletar.
);
?>
Filtros y argumentos de las vistas
Se puede crear un filtro de vistas para entidades y tomará forma de los consabidos controles (select con sinónimos o autocompletar con sinónimos). Lo más probable es que vayas a requerirlo como un filtro expuesto para que así los usuarios de tu vista puedan filtrar (y encontrar entidades a base de cuales hacer el filtro) más fácil.
También existe la opción para especificar el criterio sinónimo o el nombre de la entidad en un argumento de la vista. Eso puede ser de gran utilidad para generar URLs más amigables de tus vistas. Por ejemplo, si tenemos nuestros términos de taxonomía (países), y tenemos allí México con el sinónimo MX. El URL de tu vista puede ir desde http://example.com/mi-vista/mexico a http://example.com/mi-vista/mx (y de forma parecida para todos los países restantes).
Usos más avanzados
Para los más atrevidos también existen pequeñas sorpresas. El módulo provee un par de servicios (Services) que pueden ser muy útiles dentro de tus módulos. Esos servicios pueden ayudarte a encontrar una entidad (su ID) por su nombre (o presumiblemente su sinónimo).
Servicio synonyms.synonyms_entity_get
Por la palabra clave te encuentra el ID de la entidad cuyo nombre o uno de sus sinónimos equivale a la palabra clave. Un ejemplo:
<?php
$entity_type = \Drupal::entityTypeManager()->getDefinition('user');
$entity_id = \Drupal::getContainer()->get('synonyms.synonyms_entity_get')->entityGetBySynonym($entity_type, 'palabra-clave');
?>
Si no se encontrara ninguna entidad por la palabra clave proporcionada, tendrás 0 en la respuesta.
Servicio synonyms.synonyms_find
Si tu caso es más complejo y se necesita algo más flexible que una simple búsqueda por la palabra clave, también existe el servicio synonyms.synonyms_find. Ese, aunque implique más trabajo, te da más flexibilidad en la especificación de los criterios de búsqueda. En el ejemplo que sigue se hace una búsqueda dentro de los sinónimos de los usuarios con los siguientes criterios:
- Alguno de los sinónimos tiene que empezar con ‘palabra-clave’
- El ID del usuario no puede ser 1
<?php
$entity_type = \Drupal::entityTypeManager()->getDefinitions('user');
$condition = new \Drupal\Core\Database\Query\Condition();
$condition->condition(\Drupal\synonyms\SynonymsProviderInterface\SynonymsFindProviderInterface::COLUMN_SYNONYM_PLACEHOLDER, 'palabra-clave%', 'LIKE');
$condition->condition(\Drupal\synonyms\SynonymsProviderInterface\SynonymsFindProviderInterface::COLUMN_ENTITY_ID_PLACEHOLDER, 1, '!=');
$found_synonyms = \Drupal::getContainer()->get('synonyms.synonyms_find')->synonymsFind($condition, $entity_type);
?>
En el resultado tendrás un vector con la información sobre todos los usuarios que satisfacen tus criterios de búsqueda (tendrás entity_id y synonym (sinónimo que satifizo el criterio de búsqueda)). Trata de examinar el archivo \Drupal\synonyms\SynonymsService\Behavior\AutocompleteService para ver un buen ejemplo de cómo se usa esa herramienta.
Proveedores de sinónimos
Aunque los sinónimos son cadenas de caracteres, no significa que siempre están guardados en la base de datos como tales. La arquitectura del módulo permite guardar los sinónimos en cualquier formato (es extensible a través de Plugin API). Lo más probable es que querrás guardar tus sinónimos dentro de los campos (Fields o Base Fields). Para ese caso, el módulo ya brinda soporte para “extraer” sinónimos desde los siguientes tipos de campos:
- Texto
- Referencia a entidad (se utiliza el nombre de la entidad referdia como el sinónimo)
- Número entero (Integer) (puede ser útil para precios u otras cifras descriptivas)
- Coma flotante (Float)
- Decimal
- Teléfono
Entonces, por un lado, se tienen comportamientos que hacen algo productivo con tus sinónimos y, en el lado opuesto, observamos los proveedores de sinónimos que se hacen cargo de guardar y extraer tus sinónimos. Ahora a los administradores de la página, solo les falta habilitar/deshabilitar ciertos comportamientos sobre ciertos proveedores. Eso puede hacerse en la página de configuración de sinónimos (/admin/structure/synonyms). Por ejemplo, se puede habilitar el comportamiento de select con sinónimos sobre el campo de email en los usuarios y habilitar el campo Nombre completo (digamos que existe uno con ese nombre) para el comportamiento de autocompletaje.
Categorias: ModulosVersión: Drupal 8 Tweet
Qué son los Process plugins en Drupal 8
En la entrada Qué son y cómo funcionan los plugins de migración describimos algunos puntos a tomar en cuenta para entender los plugins de migración, hablamos del archivo YAML que contiene la configuración de una migración, entre ellas la clave 'process' (linea 8) describe propiedad por propiedad, como el contenido destino se va a construir a partir de los datos del origen.
¿Cómo hacer un Plugin de migración personalizado en Drupal 8?
En el artículo anterior explicamos que Drupal 8 (D8) trae en el núcleo (core) un sistema de migración automatizada que permite migrar tanto la configuración como el contenido desde Drupal 6/7, en éste articulo explicaremos como migrar sólo el contenido creando un modulo personalizado y un plugin de migración.
Sale Drupal 7.52
Mientras algunos dormíamos, salió este Miércoles Drupal 7.52 y drupal 8.2.3 por si gustan subir de versión. También tenemos algunas noticias sobre seguridad:
https://www.drupal.org/SA-CORE-2016-005
Versión: Drupal 7Drupal 8Categorias: Noticias TweetQue son y como funcionan los plugins de migracion en Drupal 8
En este artículo explicaremos algunos detalles de los plugins de migracion en Drupal 8, esta publicación es la continuación de éste artículo donde encontraremos información de como preparar una migración con la Drupal Console.
Cambiar la "base table" de una view en Drupal 7
Categorizing Migrations According to Their Type
Es muy frecuente que en una migración de drupal 6,7 a drupal 8 se haga el proceso de migración muchas veces, esto se aplica más a sitios que son muy activos en producción, los administradores están actualizando o agregando contenido nuevo.
Hay que tener en cuenta que la API de migración de Drupal 8 ofrece una interfaz de usuario para hacer migraciones, mediante el path /upgrade
. De esta manera el proceso de migración es una sola vez y no podemos hacer personalizaciones.
La forma más clásica de hacer un upgrade, puede ser seguida por estos pasos:
Edys Meza Vie, 11/11/2016 - 12:05Crear un comentario programando en Drupal 8
//Para crear una nueva entidad de comentario...Leer mas
Cambiar la ubicación de la carpeta “config” en Drupal 8
¿Cómo agregar tamaño y tipo de fuente a CKEditor?
Como ya se ha hablado en un blog anterior CKEditor es un módulo muy útil para creación y edición de contenido. En mi trabajo de edición de cierto contenido me encontré con la necesidad de modificar el tamaño y tipo de fuente evitando usar css.
A continuación les explicaré cómo extender el módulo CKEditor utilizando el módulo CKEditor_font, haciendo uso de composer, bower y gulp.
En su terminal utilice el siguiente comando para descargar la versión más estable del módulo:
Charlotte León Vie, 11/04/2016 - 12:02Recomendando el drupal8day
Luego con el trabajo uno se olvida de los evento de drupal, pero si los eventos son en linea se vuelve más sencillo seguirlos. Este 19 de Noviembre van a hacer una serie de presentaciones para explicar mejor Drupal 8. Siendo las presentaciones en linea duraran 24 horas el evento y abarcaran todo el mundo.
Se puede uno inscribir y ver las platicas que ya están listas en este url.
Categorias: EventoVersión: Drupal 8 TweetJornada de contribución a Drupal
Desde Biko queremos devolver a #Drupal parte de todo lo que nos está aportando, por ello el viernes pasado realizamos una jornada de contribución a Drupal.
La jornada comenzó con una breve introducción para conocer los procesos y “normas” que se han de seguir para poder contribuir a Drupal, bien sea en documentación, issues de contrib o issues de Core.
En esta primera jornada, de la que esperamos que haya continuación, participamos 13 personas.
Estas son las slides que usamos:
Contribuir a drupal from Biko
Después de la introducción, tocó el hamaiketako para reponer fuerzas, continuamos con el trabajo sobre una serie de issues previamente seleccionadas para poder facilitar el proceso.
Con el objetivo de tener un entorno de desarrollo limpio para facilitar el trabajo con Drupal, creamos un entorno basado en Docker. Se basa en parte de los sistemas Docker que usamos internamente para algunos desarrollos.
Podéis darle un vistazo en:
Este entorno contiene unos script para iniciar rápidamente el proyecto:
El resultado de la jornada se traduce en que tenemos tres issues fixed y dos en RTBC, de ellas dos al Core y otra a contrib.
Vamos a darles la bienvenida como Core Contributors a David Gil y Karlos (que hacía equipo con Oier Bravo y bug273), y también a Ismael como nuevo contribuir a Drupal con apenas dos semanas y un día
Personalmente estoy muy agradecido por la oportunidad que ha facilitado Biko para poder materializar estas ideas y haber podido participar en ella ayudando a otra gente
Tutorial: Crear un listado de noticias en Drupal 8
Anteriormente os hablé de cómo realizar una galería de imágenes en Drupal 8. En esta ocasión vamos con un tutorial, incluso más sencillo: crear una sección de notícias en nuestra web con Drupal 8.
1. Crear tipo de contenido Notícia
Crearemos un nuevo tipo de contenido al que llamaremos Notícia (Estructura → Tipos de contenido → Añadir tipo de contenido).
Por defecto, en Drupal 8, cuando creamos un nuevo tipo de contenido, tenemos dos campos, Título y Cuerpo. Además de eso, para hacer un poco más completo el tutorial, añadiremos un campo Imagen Principal a la notícia:
Además de añadir el campo de comentarios:
Una vez añadidos estos campos, vamos a la pestaña de Administrar presentación, y configuramos la imagen para que tenga un estilo de imagen predeterminado:
2. Creamos la vista
Crearemos la vista Noticias (Estructura → Vistas → Añadir nueva vista) tal como se muestra en la siguiente imagen:
Una vez hecho esto, ya podremos ir a visitar nuestra página de Notícias:
BONUS:
Como habréis podido comprobar en el listado anterior, las notícias están escritas en latín (no tienen significado, sólo son palabras sueltas). Para generar este contenido, hemos utilizado el módulo Devel Generate. Para ello, tenéis que instalar el módulo Devel y activar Devel Generate. Una vez hecho esto, vamos a la página de generación de contenido Dummy (Configuración → Generate Content).
En esta página indicamos el tipo de contenido que queremos generar, el número de nodos y otras opciones. Una vez hecho esto, tendréis un gran listado de contenido que os servirá para probar las funcionalidades de vuestra web en Drupal 8. También podréis borrar el contenido automático generado desde la misma página.
Unicef.es y las posibilidades de Drupal 8
Hace unos meses hablábamos sobre cómo Drupal busca salir de la isla, asociarse a otros proyectos open source y de esa manera hacer el ecosistema php más consistente. La publicación de Unicef.es viene a demostrar que esto es cierto.
Drupal 8 aporta la consistencia que necesita un sector poderoso como es el de la gestión de contenidos. El desarrollo web ha cambiado y nuestros ecosistemas de software tiene que adaptarse y tener en cuenta las buenas prácticas en el desarrollo, los sistemas basados en API, el diseño “atómico/modular”, los dispositivos y sus soportes, la gestión de despliegues, y el soporte multilingüe. Y después de haber participado en el desarrollo de Unicef.es podemos confirmar que esto es así.
Desde el principio asumíamos este proyecto como un reto. Un reto compartido con KPMG, SBIT y 540. Un reto en el que hemos tenido que aprender rápidamente la potencia oculta de Drupal 8, descubrir sus grandes posibilidades y sufrir en algunos casos por su falta de madurez. Pero eso sí, podemos decir que Drupal 8 sigue siendo el mejor gestor de contenidos del mercado.
Son muchos los detalles que podríamos comentar del desarrollo y en algunos ellos profundizaremos en posteriores posts. Pero rescatamos algunos de los que nos parecen más relevantes:
- Unicef.es es un Drupal pensado para gestionar landigs. Se ha creado un conjunto muy completo de componentes que son lo que se usan para construir portadas en cualquier parte de sitio con cualquier propósito.
- Los formularios de donación y suscripción se han desarrollado para integrarse en el sistema de landings con el objetivo de tener el mayor impacto y compromiso posible.
- Drupal 8 se adapta a cualquier dispositivo. Pero en el desarrollo hemos ido más allá, trabajando estrechamente con KPMG, incluyendo herramientas en la propia gestión de contenidos que permiten definir diferentes puntos de ruptura dependiendo del dispositivo.
- Hemos descubierto las posibilidades de CMI, el mecanismo que Drupal 8 incorpora para la gestión de despliegues. Con stbio.io y las herramientas utilizadas (Gitlab, Jenkis, Ansistrano) podemos hablar de que el devops en Drupal 8 es una realidad. En serio, que no os engañen, en PHP se puede hacer código de calidad con herramientas de calidad.
- Uno de los objetivos en Unicef.es era conectar la gestión de contenidos con su unidad de negocio gestionada por su propio CRM. El equipo de 540, en su mejor estilo craftsmanship ha desarrollado una librería PHP independiente, que permite conectar Drupal con el CRM. Hemos comprobado que la potencia de esta parte del desarrollo es increíble.
En definitiva, la nueva Unicef.es está dando sus primeros pasos y nos alegra haber ayudado en ello. Es un gran proyecto con un gran propósito y de alguna manera esperamos que también pueda servir de inspiración.
Thema Bootstrap actualización de seguridad
Es bueno estar al tanto de los anuncios de seguridad de drupal.org. Por ejemplo acaba de anunciar de este posible problema de seguridad en un thema muy popular: Bootstrap. Se sugiere actualizar a la ultima version.
Por aca la liga completa:
https://www.drupal.org/node/2824413
Versión: Drupal 7Categorias: Seguridad Tweet