mapa de Drupal que permita una visión cohesionada. Target: Un equipo tecnológico sin experiencia en Drupal. Duración: 32 horas divididas en ocho sesiones de cuatro horas cada una.
tecnología Drupal (Ampliar). • Proporcionar un modelo constructivista: el asistente formará su propia experiencia gracias a una combinación teórico-práctica. (Experimentar). • Conseguir en el alumnado el refuerzo necesario como profesionales para emprender proyectos basados en Drupal (Madurar). Complementariamente:
trabajaremos: • Tener una buena base de partida para proyectos basados en Drupal • Saber como crear portales web con Drupal • Conocer como acometer proyectos con Drupal • Experimentar con Drupal en si • Practicar de 0 a web con Drupal • Identificar las ventajas de la arquitectura de Drupal • Identificar bien Drupal 8 • Probar como hacer actualizaciones • Adquirir experiencia en Drupal • Localizar canales y sitios donde encontrar ayuda sobre Drupal
a que probamos, a que estamos experimentando. No existe la prisa ahora. Vamos despacio porque vamos lejos. El verbo más utilizado será “Romper”: construiremos cosas y las probaremos. Algunas se romperán, y así aprenderemos como repararlas. La experiencia se adquiere a través de la práctica y eso incluye el error: Vamos a equivocarnos. Siempre nos aproximaremos a conceptos nuevos desde la experiencia que ya tenemos: los equipos responden mejor al aprendizaje cuando se usan puentes con lo ya experimentado. EL RETO FUNDAMENTAL DEL CURSO Tejer el conjunto intersección de expectativas a tres bandas: organización convocante (vuestra empresa), vosotros y vosotras como asistentes y participantes, y yo como guía. Debemos ser capaces de construir una mecánica fluida, participativa, progresiva, integradora y constructivista. En base a ello, las claves: • Más colaborativo que expositivo • Más práctico que teórico • Más biyectivo que unidireccional • Más intuitivo que complejo • Más experimental que observador • Más dinámico que estático Tenemos 8 sesiones, 30 horas en total para partir de un conjunto de personas que no han experimentado antes ni con Drupal ni con el Stack Tecnológico habitual de Drupal y llegar a un mapa lo más integral posible de experiencias directas con la tecnología: RETO.
1. ¿Qué experiencia tenéis con Drupal? 2. ¿Tenéis práctica con entornos Linux tipo Ubuntu, Debian, etc? 3. ¿PHP? 4. ¿Programación orientada a objetos? 5. ¿Conocéis algún CMS? 6. ¿Habéis practicado con el Modelo-Vista-Controlador, MVC? 7. ¿Control de versiones? ¿svn? ¿git? 8. ¿Habéis trabajado con repositorios externos? 9. ¿Tenéis experiencia con Github? 10. ¿Qué objetivos podemos marcarnos? Plano de situación
tenemos 30 horas para experimentar y este curso tiene una serie de dependencias que hay que “inyectar”: Consola Linux Git PHP Drupal (Inside y Outside)
que iremos añadiendo funcionalidades y sobre el que iremos practicando. 2- Proyecto de desarrollo de un módulo Drupal Crearemos un módulo Drupal de manera colaborativa mediante parches en los repositorios oficiales de Drupal.org Mientras realizamos este curso y antes de terminar, realizaremos dos pequeños proyectos prácticos de manera complementaria y de forma iterativa:
estudiantes de la universidad de Amberes (Dries Buytaert y Hans Snijder), pensaban cómo comunicarse con el resto de estudiantes intentaron construir un panel de anuncios online para intercambiar mensajes. • Ese pequeño panel fue evolucionando y se fue ampliando el número de usuarios, con lo que poco a poco se fue desarrollando un esqueleto inicial de gestor de contenidos en una especie de Intranet universitaria. • Dries consideró “dorp”, una palabra que en holandés significa “pueblo”, pero al teclear introdujo “Drop” y así se quedó. Lanzó drop.org como una plataforma a medio camino entre el foro, red social y tablón de contenido. • La primera versión libre de Drupal se liberó en 2001 • Actualmente está liberado bajo una licencia GPL 2 y 3 , lo que permite entre otras cosas, descargarlo, reutilizarlo, modificarlo y distribuir tus cambios ( lo que son las cuatro libertades básicas del Software Libre ) a partir del software alojado enDrupal.org y poder combinarlo con cualquier otro software cuya licencia sea compatible con las propias de Drupal.
Drupal hay miles de personas contribuyendo activamente. • Con diferentes perfiles: desde desarrolladores que trabajan en el core hasta mantenedores de módulos, pero además multitud de perfiles no específicamente tecnológicos. • Diseñadores que proponen mejoras de UX para las interfaces tanto para la navegación a través del sitio web como para las vistas internas de gestión en menús de administración y módulos, traductores que se encargan de hacer que cada versión del core de Drupal y sus módulos estén disponibles en algún idioma específico y muchas más personas dedicadas a documentar, actualizar y editar los contenidos disponibles, las guías y manuales de instalación y recomendaciones. • Todo un ecosistema de participantes y colaboradores que hacen que actualmente, las cifras en torno a Drupal sean realmente impresionantes: más de treinta y cinco mil módulos disponibles para diferentes versiones del core de Drupal, más de dos mil temas visuales y unos dos mil commits enviados de media a la semana. • Más de mil versiones configuradas a modo de “distribuciones”, es decir, adaptaciones de Drupal como herramientas de propósito específico debidamente “profileadas” (disculpenme el palabro) para usos concretos: gestión de proyectos y tareas con OpenAtrium, construcción de comunidades con Drupal Commons e incluso una versión para iglesias y cultos religiosos: OpenChurch.
is an add-on which provides specialized functionality to Drupal. Some modules are already components of Drupal. Others are developed by the user community and made available to you through the Drupal Cloud service. Module details are described in the Advanced Help menu.” https://www.drupal.org/project/project_module
Módulos de core Módulos contribuidos Módulos custom Tipos de módulos (por funcionalidad): Módulos de desarrollo Módulos de seguridad Módulo de migración Módulos de SEO
a role. role-create (rcrt) Create a new role. role-list (rls) Display a list of all roles defined on the system. If a role name is provided as an argument, then all of the permissions of that role will be listed. If a permission name is provided as an option, then all of the roles that have been granted that permission will be listed. role-delete (rdel) Delete a role. role-remove-perm Remove a specified permission from a role. (rmp) updatedb pml user-cancel drush dis
en tres estructuras de árboles que git gestiona. El primero es nuestro directorio de trabajo que tiene todo los archivos. El segundo es un índice que trabajo como registro y almacenamiento y finalmente el head, que consiste en apuntar al último cambio enviado, el más reciente. Workflow elemental de GIT
donde tengamos el código sobre el que vamos a trabajar. 2. Staging area(Index): es el lugar donde se almacenan los archivos que han sido modificados, antes de escribir los cambios en el repositorio local. 3. Local repo: Repositorio local donde almacenamos y controlamos las diferentes ramas y estados de nuestro código, se encuentra en el directorio .git de nuestro Working directory. 4. Remote repo: Repositorio central con el cual se sincronizan el resto de usuarios.
/path/to/repository Copia remoto -> git clone username@host:/path/to/repository El git clone que usamos ayer -> git clone https://github.com/drush-ops/drush.git /usr/local/src/drush (instrucción - ruta de origen - ruta de destino) git add nombrearchivo -> Añade archivo al index del repositorio local, se puede usar para añadir todos los archivos. git status -> nos dice todos los cambios que hay en el index. git commit -am “message” ->Hace commit de todos los cambios del index al repositorio local. git commit -m “message” archivos -> Hace commits de los archivos indicados. git log -> Muestra el historial de commits. git diff commitX commitY –> muestra las diferencias entre el commitX y el commitY. git checkout -- archivo –> Modifica archivo al estado en el que se encontraba en el último commit. git pull –> Actualiza el repositorio local con el repositorio remoto. git push –> Manda los cambios del repositorio local al repositorio remoto.
cotejado de las diferencias entre un código que está registrado con partes que no lo están y han cambiado. 1- Tenemos un código que nos hemos descargado o tenemos bajo control de versiones. 2- Realizamos cambios en el código. 3- Pedimos a git que nos genere un fichero comparado. git diff > cambios.patch Otras personas aplicarán el parche: git apply cambios.patch Si quieres ver los cambios que trae el parche: git apply --stat cambios.patch Referencias: http://rogerdudler.github.io/git-guide / https://git-scm.com/ https://github.com/trein/dev-best-pra ctices/wiki/Git-Commit-Best-Practice s https://github.com/trein/dev-best-pra ctices/wiki/Git-Tips https://wildlyinaccurate.com/a-hacke rs-guide-to-git/ https://github.com/git-tips/tips
repositorio nuevo en Github, inicialmente vacío 2- Hacer clone en local y traer el repo 3- Crear un “Hello World” en PHP dentro del repositorio local <- Hay sorpresa-> 4- Hacer Push al repositorio remoto EJERCICIO 10: WORKFLOW COLABORATIVO EN GITHUB 1 - Nos separamos por equipos y seleccionamos un usuario como repositorio central. 2- Fork del proyecto central. 3- Paso a local 4- Desarrollamos el Hello World, una pequeña funcionalidad por persona. 5- Push a remoto 6- Pull Request e integración
de código a resolver. primer_ejemplo.info.yml name: Primer Ejemplo type: module description: package: core: EJERCICIO 11: Nuestro primer módulo Drupal 1- Cambiamos el nombre de carpeta. 2- Cambiamos nombre del fichero. 3- Cambiamos los valores de core. 4- Quitamos las comillas en description. ESTRUCTURA ELEMENTAL DE MÓDULOS
DRUPAL 8: - Habíamos visto el formato YAML para la estructura de un módulo. - Habíamos creado nuestro primer módulo. - Lo habíamos instalado. - Habíamos declarado sus dependencias. - Habíamos creado ruta y controlador.
conexión ssh para el uso de git en Drupal.org 1- Subimos todos y todas nuestro primer módulo Drupal al Sandbox de Drupal.org 2- Volvemos a organizarnos por equipos y a seleccionar un proyecto central 3- Checkout del proyecto en entorno local. 4- Creamos cambios sobre el módulo 5- Generamos un parche de cambios y lo subimos al proyecto 6- Integramos parches Formato de nombrado de parche en Drupal: proyecto-tarea-IssueNumber-CommentNu mber.patch git diff > geohide-filter-subsystem-by-city-region-c ountry-2901393-3.patch
Y CONTROLADORES DRUPAL 1- Volvemos a nuestro módulo de referencia 2- Le añadimos una nueva ruta 3- Le añadimos un nuevo controlador y un nuevo contenido a mostrar
módulo de referencia. 2- Necesitamos una nueva carpeta “templates” para guardar la plantilla de extensión .html.twig 3- Necesitamos modificar el controlador para decirle que active la plantilla. 4- Necesitamos una nueva variable en el controlador. 5- Necesitamos un fichero de permisos primer_ejemplo.permissions.yml <p> Hello World! </p> <h2>This is my First Module</h2> <h3> Here is the value: </h3> {{ ejemplo_var }} ------------------------------------------- $build = [ '#theme' => 'primer_ejemplo_theme', '#ejemplo_var' => '9876543210', ]; # Custom permisions. primer ejemplo access: title: 'Primer Ejemplo Access' description: 'Access to the example page.' restrict access: true
Theme es una estructura visual que define una serie de regiones, organización visual, plantillas y recursos para construir la interfaz de nuestro proyecto. El conjunto de elementos se denomina “Theme” y forma parte de nuestro proyecto:
a partir de Bartik Referencias: https://www.hywel.me/drupal/2016/03/0 6/drupal-8-sub-themes-and-stylesheets.ht ml https://www.drupal.org/node/2165673 https://stackoverflow.com/questions/3619 5055/creating-a-bartik-sub-theme-in-drup al-8 THEMING CON DRUPAL # How to know what is the current theme on your Drupal site # move inside project root directory var/www and then drush status theme #the above command will tell you the current theme set as default for site and admin both # Change the site default theme using the below command (use theme name of your choice) drush vset theme_default garland # the above command will make garland as default site theme # now change admin default theme using the below command (use theme name of your choice) drush vset admin_theme garland # Do Ctrl+r to flush cache and reload your Drupal Site
(INTEGRAL): SITEBUILDING CON DRUPAL ¿Qué vamos a construir? Vamos a hacer un sitio web que muestre noticias y artículos de blog. ¿Cómo instalar un Theme en Drupal? /themes
Drupal 8 Probaremos con Zircon, un theme visual preparado para Drupal8: https://ftp.drupal.org/files/projects/zircon-8.x-1.0-rc1.tar.gz El Theme: zircon_d8-8.1.1.zip Instrucciones: https://www.weebpal.com/guides/step-step-guide-install-drupal-8-theme
de usuario: administrador, editor de noticias y editor de artículos. Necesitamos un logo propio y un nombre del sitio web. Necesitamos cambiar colores. Necesitamos desplazar la barra de búsqueda. Necesitamos módulos SEO: Metatags, sitemapxml, GoogleAnalytics Necesitamos un listado de noticias ordenadas por fechas Necesitamos varios listados de artículos de blog ordenados por criterios varios. ¿Probamos Panels y Quicktabs? :-)
13: MÓDULOS DRUPAL EN MODO COLABORATIVO 0- Configuramos nuestra conexión ssh para el uso de git en Drupal.org 1- Subimos todos y todas nuestro primer módulo Drupal al Sandbox de Drupal.org. 2- Volvemos a organizarnos por equipos y a seleccionar un proyecto central. 3- Checkout del proyecto en entorno local. 4- Creamos cambios sobre el módulo. 5- Generamos un parche de cambios y lo subimos al proyecto. 6- Integramos parches. Formato de nombrado de parche en Drupal: proyecto-tarea-IssueNumber-CommentNumber.patch git diff > geohide-filter-subsystem-by-city-region-country-2901393-3.patch
Conceptualicemos de manera intuitiva Una entidad no deja de ser en cierta manera, una clase abstracta, una especie de contrato elemental en el que modelamos a alto nivel una figura que luego iremos particularizando.
que generamos mediante el añadido de campos que van a tratar con datos e información. A partir de esos bundles, en último nivel generaríamos sucesivos objetos específicos con los que trataríamos. Y en última instancia, tomaríamos esos objetos y los manejaríamos en modo CRUD, lo habitual.
por Nodos, Usuarios, Tipos de contenido, Términos de Taxonomías y/o Comentarios. Y sin embargo, en realidad esos elementos también forma parte de la estructura de Entidades y Bundles.
de Drupal: https://www.drupal.org/docs/8/api/entity-api/working-wit h-the-entity-api ¿Practicamos? EJERCICIO 19: Creación de Tipos de Entidades y bundles https://www.drupal.org/project/search_api https://www.drupal.org/project/eck
stable release of the code generator. 2. Make the file executable. 3. Move it to a directory that is part of your PATH. release_url=https://api.github.com/repos/chi-teck/drupal-code-generator/releases/lates t wget $(wget -qO- $release_url | awk -F'"' '/browser_download_url/ { print $4 }') chmod +x dcg.phar sudo mv dcg.phar /usr/local/bin/dcg dcg --version
Creación de Tipo de Contenido y primeros nodos. EJERCICIO 3: Instalación módulo Devel y generación automática de nodos. EJERCICIO 4: Configuración de Roles de usuario, TdC, Vistas, Bloques EJERCICIO 5: Proyectos colaborativos en Git/Github EJERCICIO 6: Localizar módulos interesantes e instalarlos en nuestro Drupal EJERCICIO 7: Crear usuarios con Drush EJERCICIO 8: Backup de Drupal, instalación de backup (todo vía Drush) EJERCICIO 9: Workflow básico en Github EJERCICIO 10: Workflow colaborativo en Github EJERCICIO 11: Nuestro primer módulo Drupal Listado de ejercicios
Drupal EJERCICIO 13: Módulos Drupal en modo colaborativo EJERCICIO 14: Rutas y controladores EJERCICIO 15: Variables y plantillas Twig EJERCICIO 16: Configurar Views para construir listados de contenidos EJERCICIO 17: Crear un subtheme a partir de Bartik EJERCICIO 18 (Integral): Sitio web con noticias y artículos de blog EJERCICIO 19: Creación de tipos de entidades y bundles EJERCICIO 20: Creación de módulos y themes con DCG EJERCICIO 21: Construcción de taxonomías para contenido EJERCICIO FINAL: Retrospectiva
treinta horas totales en las que hemos visto y hemos practicado muchas cosas de diferentes ámbitos dentro del ecosistema Drupal. Herramientas: Drush, DCG Sitebuilding Módulos Theming Comunidad Plataformas Stack Tecnológico
es agredecer a las personas que nos ayudan. Estas cosas no las aprendí solo, las aprendí hablando/escuchando/practi cando/observando/leyendo a: @pcambra @juampynr @reguiguren @alvar0hurtad0
byIR4OM/edit?usp=sharing “Publica tu proyecto en Drupal.org” by Keopx @eguiguren y Alvaro Hurtado @alvar0hurtad0 https://2014.drupalday.es/sites/default/files/publica_tu_proyecto_en_drupal.org_.pdf “Docker & Drupal”, by Ignacio López Flores, @ignaciolflores https://introbay.github.io/drupalday2017/#/ “External Entities”, by Rodrigo Aguilera, @marinero http://rodrigoaguilera.gitlab.io/external-entities-talk/#/ “Headless Drupal: The Gizra Way”, by @RoySegall and @David_Baltha https://docs.google.com/presentation/d/1RIMBy8Tjf6yn-fZuBVv381n1KfLGEWNs2v56 l5i1WJw/edit?usp=sharing