backend

Drupal json API | Consumiendo API Json en Drupal 10

Video de Youtube
URL de Video remoto
Texto

     Ahora que ya conocemos los principios básicos acerca del proceso de conexión y consumo de datos desde una API externa en Drupal, vamos a poner en práctica lo aprendido, Creando un módulo personalizado con Drush.

   Conexión con API externa en Drupal 10.

      Paso 1 - Generar un módulo personalizado

          El primer paso para lograr la conexión entre Drupal y un API externa, será generar un módulo personalizado, donde iremos añadiendo toda la estructura necesaria. Para ello, abriremos nuestra consola y ejecutaremos el siguiente comando de Drush:

drush gen module

     A continuación, contestaremos a las preguntas básicas que nos irán apareciendo en la consola, hasta finalizar el proceso.

Drush Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

   Paso 2-  Crear página de confirmación

     Para este ejercicio, además de conectarnos con la API JSON, vamos a mostrar al usuario los datos descargados, con esto, podremos hacerno una idea, de cómo ampliar otras funcionalidades, como la creación de todos los registros dentro de la base de datos de Drupal. Con este propósito, a continuación, y utilizando el mismo módulo personalizado que acabamos de generar, crearemos un contrlador con su respectiva página, para ello ejeuctaremos otra opción de Drush gen:

drush gen controller

     En esta ocasión, seleccionaremos todas las opciones por defecto, así podremos activar nuestro módulo y comprobar que todo funciona correctamente, antes de incluir los cambios finales.

Custom Module Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Ahora es el turno de generar la página donde mostremos la inforamción, una vez realizada la conexión. Esta vez, ejecutaremos el siguiente comando de Drush:

drush gen template

     Seleccionaremos todas las opciones por defecto y sólo añadiremos un nombre de plantilla. (confirmation-data)

Custom Module Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

   Paso 3 - Primeras comprobaciones

     Ya hemos creado nuestro módulo personalizado, así que antes de comenzar a añadir el resto de configuraciones, comprobaremos que todo funciona correctamente. Para ello, activaremos el módulo desde la interfaz de Drupal o mediante consola y a continuación visitaremos la página, cuya url encontraemos dentro del archivo routing.yml.

Custom Module Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

Custom Module Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

Custom Module Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony
Texto

   Conectándonos a la API

     Para este ejemplo, vamos a utilizar la API cat-facts, está muy bien documentada y te servirá para hacer pruebas de conexión entre Drupal y ella.

   Actualizando datos dentro del Controller

     En este ejemplo, la idea es que tengas todas las herramientas necesarias, para que pueda crear tu propio módulo personalizado y conectarte con una API JSON real, por esta razón no entraremos en detalles. No obstante te he añadido comentarios en cada uno de los cambios a realizar, que podrás copiar y pegar, y una vez comprobado y entendido el proceso, sabrás dónde y cómo realizar el resto de cambios, hasta que vayas ganando experiencia.

     El primero de los archivos que actualizaremos será el Controller ApiConnectorController.php, que es dónde realizaremos el trabajo más importante, conectarnos con la API y recuperar los datos para luego pasarlos a la plantilla.

     Así que, lo próximo que deberás hacer, si has seguido todos los pasos anteriores, será COPIAR Y PEGAR el siguiente código:

<?php declare(strict_types = 1);

namespace Drupal\api_connector\Controller;

use Drupal\Component\Serialization\Json;
use Drupal\Core\Controller\ControllerBase;
use GuzzleHttp\Exception\GuzzleException;

/**
 * Returns responses for Api connector routes.
 */
class ApiConnectorController extends ControllerBase {

  /**
   * Builds the response.
   * @throws GuzzleException
   */
  public function getData(): array {

    $client = \Drupal::httpClient();
    $request = $client->get(
      "https://cat-fact.herokuapp.com/facts" // Url de API JSON
    );
    $response = $request->getBody()->getContents();
    $results = Json::decode($response);
    $data = $results;

    //ksm($data);
    // Descomentar para comprobar valores (Debes tener módulo Devel activado)
    //https://drupaladicto.com/curso/programacion-drupal/contenidos-de-prueba-generados-con-el-modulo-devel

    $build['content'] = [
      '#theme' => 'confirmation_data', //Coloca el nombre de tu plantilla declarada en .module
      '#data' => $data, //Esta es la encargada de pasar todos los valores recuperados a la plantilla.
      '#title' => t('Data from External JSON API') //Este es un título adicional que podrás personalizar y mostrar en la plantilla.
    ];

    return $build;
  }

}

   Explicación sobre los cambios en el Controller

      Lo más relevante que deberás tomar en cuenta, dentro del Controller, son las líneas donde se realiza la conexión, que es donde hemos añadido la url a la que nos conectaremos.

 $request = $client->get( "https://cat-fact.herokuapp.com/facts" // Url de API JSON );

     

     Además, hemos añadido el método getData(), para que tenga más coherencia con nuestro ejemplo, sustituyendo al __invoke(), que nos genera Drush automáticamente cuando creamos el módulo mediante el uso de comandos; por esta razón, tendremos que añadirlo dentro de nuestro archivo routing. 

   También encontrarás la línea que te permitirá comprobar los valores recibidos, que está comentada, para que no te muestre nada si no lo necesitas. El objetivo es que una vez sustituidos todos los valores necesarios en cada archivo, si descomentas esta línea, te mostrará en la página, todos los datos con su respectiva estructura. Para habilitarlo, borrar las dos líneas inclidadas a la izquierda de ksm. (También necesitarás haber descargado y activado el módulo Devel)

//ksm($data);

Custom Module Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony
Texto

   Actualizando datos en el .module

     El siguiente archivos que actualizaremos será el api_connector.module, donde comentaremos la parte del código que no vamos a necesitar para este ejemplo y actualizaremos el hook_theme, para poder mostrar en la plantilla el título y los valores recuperados desde la API JSON.

     Si has seguido todos los pasos anteriores, podrás COPIAR Y PEGAR el siguiente código:

<?php declare(strict_types = 1);

/**
 * @file
 * Primary module hooks for API Connector module.
 */

/**
 * Implements hook_theme().
 */
function api_connector_theme(): array {
  return [
    'confirmation_data' => [
      'variables' => ['data' => [], 'title' => '' ] //Hemos sustituido esta línea con los nuevos valores que mostremos en Twig.
    ],
  ];
}

///**
// * Prepares variables for confirmation-data.html.twig template.
// *
// * Default template: confirmation-data.html.twig.
// *
// * @param array $variables
// *   An associative array containing:
// *   - foo: Foo variable description.
// */
//function template_preprocess_confirmation_data(array &$variables): void {
//  $variables['foo'] = 'bar';
//}
Texto

   Actualizando la plantilla

     Ahora que hemos realizado el resto de cambios en .module y en el controlador, es el turno de añadir una pocas líneas que nos permitirán ver en pantalla, los datos extraidos desde la API JSON. Como he dicho al principio del ejemplo, esta es una guía básica, para que puedas comenzar y continuar practicando y perfeccionando, en función de las necesidades de tu proyecto.

     En este caso, los datos no se guardan en Drupal, pero gracias a que estamos mostrándolos dentro de una plantilla Twig, nos permite aplicar algunso filtros como el |upper, que aplica mayúsculas al texto relacionado con el tipo de animal.

     Si has seguido todos los pasos anteriores, podrás COPIAR Y PEGAR el siguiente código dentro de tu plantilla:

{#
/**
 * @file
 * Default theme implementation to display confirmation_data.
 *
 * Available variables:
 * - foo: Foo variable description.
 *
 * @see template_preprocess_confirmation_data()
 *
 * @ingroup themeable
 */
#}
<div class="wrapper-class">
  {# Con esta línea recuparamos el título personalizado #}
  <h2>{{ title }}</h2>
  <ul>
    {#  {{ foo }}#}
    {% for item in data %}
      <li>{{ item.text }} - <strong>{{ item.type|upper }}</strong></li>
    {% endfor %}
  </ul>
</div>

   Explicación de los cambios

     En esta plantilla, podrás imprimir el resto de valores extraidos, que verás en la parte superior, si descomentas la línea //ksm del Controller, añadiendo punto (.), después de la variable item, seguido del nombre del dato que quieres mostrar.

Texto

   Actualizando el routing

     Como hemos mencionado anteriormente, al añadir el método getData(), dentro de nuestro Controller, tendremos que especificar su llamada, en el archivo routing.yml, para que Drupal pueda llamarlo y mostar los datos relacionados dentro de nuestra plantilla.

api_connector.example:
  path: '/api-connector/example'
  defaults:
    _title: 'Example'
    _controller: '\Drupal\api_connector\Controller\ApiConnectorController::getData'
  requirements:
    _permission: 'access content'

     Con este ejemplo, ya cuentas con las herramientas necesarias, para conectarte desde Drupal, hacia una API JSON externa y mostrar los datos recibidos, dentro de una plantilla, que podrás personalizar. En próximos artículos, abordaremos otros temas, como la manera de guardar los datos en Drupal y/o, mostrarlos dentro de una vista.

     Hasta la próxima.

Migración Drupal 7 | Configuración de entornos

   Configuración de entornos locales para migración

     Actualmente existen innumerables herramientas, que facilitan la instalación de entornos de desarrollo locales; como cada vez ganan más terreno, soluciones basadas en contenedores virtuales de Docker, para nuestro  ejercicio, hemos decidido utilizar Lando, debido a lo fácil y sencillo que resulta poner en marcha cualquier proyecto.

     De esta forma, podremos configurar, rápidamente, todos los requermientos necesarios, para cada uno de los Drupales, con los que vamos a trabajar de aquí en adelante.

Lando Drupal 9 | www.drupaladicto.com - Consultor especializado en drupal y symfony

   Si todavía no haz trabajado con Lando, HAZ CLIC AQUÍ

   Cómo instalar ambos entornos para la migración.

     Para que podamos acceder a las dos instancias de Drupal, que utilizaremos para realizar la migración, será necesario generar un archivo de Lando, por cada uno de los proyectos y a continuación, realizar las modificaciones específicas para cada uno de los casos.

   Pasos previos a la instalación del Drupal 7 en local.

     Al tratarse de una migración desde un proyecto Drupal 7, asumimos que vas a descargarlo desde tu servidor de producción, para instalarlo en tu entorno local, así que lo primero que deberás verificar son los detalles relacionados con la versión de PHP, Mysql y Memoria, que econtrarás en el apartado de "/informes", y que deberás ajustar en tu archivo de configuración de lando, para que todo funcione tal y como se espera.

     Antes de comenzar con el resto de procesos relacionados con la migración, asegúrate de que todas las páginas, usuarios, taxonomías, imágenes y otros elementos, se comportan y se muestran sin ninguna alteración.

     Recuerda que si vas a trabajar con un Drupal que ya está en funcionamiento, deberías comprobar si tienes los siguientes archivos y/o carpetas:

  • Carpeta files, con imágenes, archivos de cache, etc. (Ubicación: sites/default/files)
  • Carpeta libraries (Si haz descargado el módulo)
  • Carpeta modules (Ubicación: sites/all/modules)
  • Carpeta themes (Ubicación: sites/all/themes)
  • Archivo settings.php (Ubicación: sites/default/settings.php)

     Para este ejemplo, hemos descargado los archivos de Drupal 7, desde la Web Oficial de Drupal, es por esta razón que, en la siguiente imagen, ves como se repiten las carpetas modules y themes, ya que se han ido recolocando, preparando la estructura, de acuerdo con el estandar que se empleó a partir de Drupal 8.

 

Drupal 7 | www.drupaladicto.com - Consultor especializado en drupal y symfony

 

Es probable, que en tu proyecto de Drupal 7, solo tengas las carpetas que aparecen dentro de "sites/all".

 

Drupal 7  | www.drupaladicto.com - Consultor especializado en drupal y symfony

 Una vez configurado el archivo de lando, deberías acceder al sitio de Drupal en local para continuar con el proceso de migración. (Recuerda modificar el puerto para evitar conflictos entre ambas instalaciones)

   Pasos previos a la instalación del Drupal Destino (8, 9 o superior)

     En el caso del Drupal Destino (8, 9 o superior), lo recomendable es que instales el proyecto utilizando el gestor de paquetes Composer, para asegurarte de que la estructura te permitirá realizar acciones de mantenimiento o actualizaciones, siguiendo los parámetros necesarios y evitando posibles fallos futuros.

     Una vez configurado el archivo de lando, deberías acceder al sitio de Drupal en local para continuar con el proceso de migración. (Recuerda modificar el puerto para evitar conflictos entre ambas instalaciones)

   Siguientes pasos

     En el siguiente capítulo, instalaremos el proyecto de Drupal, basándonos en la estructura base que hemos descargado desde www.drupal.org, además, para que el ejemplo sea lo más parecido a la realidad, añadiremos un módulo custom, equivalente a los que te encontrarás en tu proyecto y generaremos algunos contenidos, utilizando el módulo devel.

     Por último, descargaremos algunos módulos que sufrieron cambios importantes en versiones posteriores a Drupal 7, como Views, que se integró en el Core de Drupal o el módulo FieldCollection, que fue sustituido por Paragraphs, así podrás apreciar mejor, cómo analizar tu estrategia de migración, para el proyecto que migrarás a la versión que elijas.

Migración Drupal 7 | Configuración de entornos

Texto

   Configuración de entornos locales para migración

     Actualmente existen innumerables herramientas, que facilitan la instalación de entornos de desarrollo locales; como cada vez ganan más terreno, soluciones basadas en contenedores virtuales de Docker, para nuestro  ejercicio, hemos decidido utilizar Lando, debido a lo fácil y sencillo que resulta poner en marcha cualquier proyecto.

     De esta forma, podremos configurar, rápidamente, todos los requermientos necesarios, para cada uno de los Drupales, con los que vamos a trabajar de aquí en adelante.

lando | www.drupaladicto.com - Consultores especializados en Drupal y Symfony

     Si todavía no haz trabajado con Lando, HAZ CLIC AQUÍ

   Cómo instalar ambos entornos para la migración.

     Para que podamos acceder a las dos instancias de Drupal, que utilizaremos para realizar la migración, será necesario generar un archivo de Lando, por cada uno de los proyectos y a continuación, realizar las modificaciones específicas para cada uno de los casos.

   Pasos previos a la instalación del Drupal 7 en local.

     Al tratarse de una migración desde un proyecto Drupal 7, asumimos que vas a descargarlo desde tu servidor de producción, para instalarlo en tu entorno local, así que lo primero que deberás verificar son los detalles relacionados con la versión de PHP, Mysql y Memoria, que econtrarás en el apartado de "/informes", y que deberás ajustar en tu archivo de configuración de lando, para que todo funcione tal y como se espera.

     Antes de comenzar con el resto de procesos relacionados con la migración, asegúrate de que todas las páginas, usuarios, taxonomías, imágenes y otros elementos, se comportan y se muestran sin ninguna alteración.

     Recuerda que si vas a trabajar con un Drupal que ya está en funcionamiento, deberías comprobar si tienes los siguientes archivos y/o carpetas:

  • Carpeta files, con imágenes, archivos de cache, etc. (Ubicación: sites/default/files)
  • Carpeta libraries (Si haz descargado el módulo)
  • Carpeta modules (Ubicación: sites/all/modules)
  • Carpeta themes (Ubicación: sites/all/themes)
  • Archivo settings.php (Ubicación: sites/default/settings.php)

     Para este ejemplo, hemos descargado los archivos de Drupal 7, desde la Web Oficial de Drupal, es por esta razón que, en la siguiente imagen, ves como se repiten las carpetas modules y themes, ya que se han ido recolocando, preparando la estructura, de acuerdo con el estandar que se empleó a partir de Drupal 8.

Migracion Drupal 7 | www.drupaladicto.com - Consultores especializados en Drupal y Symfony
 
  Es probable, que en tu proyecto de Drupal 7, solo tengas las carpetas que aparecen dentro de "sites/all".

Migracion Drupal 7 | www.drupaladicto.com - Consultores especializados en Drupal y Symfony

 

   Una vez configurado el archivo de lando, deberías acceder al sitio de Drupal en local para continuar con el proceso de migración. (Recuerda modificar el puerto para evitar conflictos entre ambas instalaciones)

   Pasos previos a la instalación del Drupal Destino (8, 9 o superior)

     En el caso del Drupal Destino (8, 9 o superior), lo recomendable es que instales el proyecto utilizando el gestor de paquetes Composer, para asegurarte de que la estructura te permitirá realizar acciones de mantenimiento o actualizaciones, siguiendo los parámetros necesarios y evitando posibles fallos futuros.

     Una vez configurado el archivo de lando, deberías acceder al sitio de Drupal en local para continuar con el proceso de migración. (Recuerda modificar el puerto para evitar conflictos entre ambas instalaciones)

   Siguientes pasos

     En el siguiente capítulo, instalaremos el proyecto de Drupal, basándonos en la estructura base que hemos descargado desde www.drupal.org, además, para que el ejemplo sea lo más parecido a la realidad, añadiremos un módulo custom, equivalente a los que te encontrarás en tu proyecto y generaremos algunos contenidos, utilizando el módulo devel.

     Por último, descargaremos algunos módulos que sufrieron cambios importantes en versiones posteriores a Drupal 7, como Views, que se integró en el Core de Drupal o el módulo FieldCollection, que fue sustituido por Paragraphs, así podrás apreciar mejor, cómo analizar tu estrategia de migración, para el proyecto que migrarás a la versión que elijas.

Drupal con Docker | Configuración entorno local

Video de Youtube
URL de Video remoto
Texto

Si haz decidido dedicarte profesionalmente al desarrollo de aplicaciones web, lo ideal es que comiences a experimentar con las herramientas y opciones más actuales que existen en el mercado. Una de mis recomendaciones es el uso de contenedores Docker, que nos permitirá configurar, replicar y/o compartir, entornos de trabajo, evitando los históricos fallos de versión del lenguaje, o del servidor con el que estemos trabajando en nuestros proyectos.

En el caso de Drupal, no basta con añadir un archivo Dockerfile, para contar con todos los requerimientos necesarios, pero ya existen varias alternativas disponibles, facilitándonos esa parte del proceso. Una de ellas es la conocida como Docker4Drupal, cuyo mantenimiento continuo y permanente, nos permite realizar las instalaciones de Drupal, en cada nueva versión publicada.

Docker4Drupal, tiene múltiples funcionalidades, que podremos activar, personalizar y utilizar, dependiendo de las necesidades del proyecto, como son el administrador de base de datos AdminerXdebug, servidor para correos locales Mailhog, servidor de base de datos Postgres, servidor Apache Solr, entre otros.

Además de utilizar las variables de entorno, que nos pueden servir para realizar comprobaciones sobre el comportamiento de nuestras aplicaciones, sin la necesidad de realizar despliegues en otros entornos adicionales a nuestro local.

Aunque no profundizaremos en todas las opciones y configuraciones disponibles con Docker4Drupal, te animo a que visites su página oficial https://github.com/wodby/docker4drupal y eches un vistazo a su documentación, para que conozcas un poco más acerca de todo lo que tiene para ofrecernos.

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony
Texto

   Cómo instalar un entorno local con Docker4Drupal

     Requisitos:

          - Entorno Linux: Yo he utilizado el subsistema WSL2, con Ubuntu 2204, dentro de una máquina Windows 11. HAZ CLIC AQUI

          - Docker Desktop: Para las instrucciones desde su página oficial. HAZ CLIC AQUI

     Para este curso, utilizaremos Docker4Drupal, dentro de un entorno Linux (Ubuntu 2204), con WSL2 y Windows 11, de esta manera no tendremos que configurar máquinas virtuales adicionales, que podrían consumir muchos más recursos de los necesarios en nuestra máquina. Aunque si lo deseas, también puedes aplicar los mismos pasos en la distribución de Linux que prefieras.

     Si quieres reproducir exactamente los ejercicios que vamos a detallar en este curso, sólo necesitarás descargar y configurar DockerDesktop y WSL2 en tu ordenador y a continuación, abrir la consola para continuar con el resto de la instalación que verás en el video.

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony
Texto

   Descarga y configuración del Docker4Drupal

      Ahora que ya tienes configurado el entorno Linux donde vas a trabajar, abriremos nuestra consola y nos colocaremos en la ubicación donde instalaremos nuestro Drupal 10, a continuación, abriremos la url del respositorio de Docker4Drupal y lo clonaremos, para comenzar con la descarga de los archivos que vamos a necesitar.

     Si quieres, puedes aprovechar el proceso de clonación para configurar el nombre de tu carpeta, al mismo tiempo que realiza la descarga, para ello, tendrás que añadir una línea como la siguiente:

git clone https://github.com/wodby/docker4drupal.git/ drupal_10

     Esto creará la carpeta con el nombre drupal_10 en la ubicación que hayas seleccionado y dentro de ella colocará todos los archivos descargados desde el repositorio, donde podremos continuar con otros cambios necesarios, antes de descargar el esqueleto o estructura principal de nuestro proyecto de Drupal.

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony
Texto

   Configuración inicial del servidor

     Una vez terminada la descarga de los archivos para nuestro servidor, el siguiente paso será la personalización de algunas opciones, para que podamos descargar, arrancar y acceder a nuestro proyecto de Drupal, que descargaremos, una vez terminados estos primeros cambios.

     Así que, con nuestro IDE favorito, abriremos la carpeta donde hemos descargado los archivos del repositorio, para comenzar con las primeras configuraciones.

   Paso 1 - Eliminar docker-compose.override.yml

     Eliminaremos el archivo docker-compose.override.yml, para que podamos controlar el comportamiento del servidor a través de la configuración en la variable de entorno.

   Paso 2 - Ajustes en la variable de entorno.

     Por el momento, el archivo que necesitamos conocer y ajustar es el responsable de nuestro entorno de trabajo, conocido como .env, donde podremos personalizar los siguientes detalles:

    Nombre del proyecto, url y puerto de conexión

  • Nombre del proyecto: PROJECT_NAME=my_drupal10_project
  • Url del proyecto: PROJECT_BASE_URL=drupal.docker.localhost 
  • El puerto de conexión: PROJECT_PORT=8000

    Cuando hayamos realizado el cambio en la url del proyecto y el puerto, podremos acceder a nuestro Drupal, una vez descargado, escribiendo en el navegador 

http://drupal.docker.localhost:8000

   Nombre de usuario, base de datos y contraseña

  • Nombre de la base de datos: DB_NAME=drupal 
  • Nombre del usuario para la base de datos: DB_USER=drupal 
  • Contraseña del usuario de base de datos: DB_PASSWORD=drupal    
Texto

   Arrancando nuestros contenedores Docker

     Un servidor basado Docker que ejecuta varios contenedores, conectados entre sí, que permiten ejecutar nuestro código sin la necesidad de instalar ningún archivo extra en nuestra máquina, esto es lo que se conoce como virtualización del entorno.

     En otra palabras, en lugar de arrancar un servidor tipo XAMPP, con todo incluido y administrable desde un panel de control, como hacíamos años atrás, con Docker, tendremos varios servicios independientes, que podremos modificar y/o ajustar, según nuestras necesidades. 

     Si exploras un poco más, dentro del archivo .env, que modificamos hace un momento, podrás comprobar que tienes varias opciones de versión y configuración, que podrás activar o desacticar, añadiendo o quitando, el símbolo de almohadilla (#), que acompaña cada una de las definiciones:

### --- MARIADB ----

MARIADB_TAG=10.11-3.26.3
#MARIADB_TAG=11.0-3.26.3
#MARIADB_TAG=10.10-3.26.3
#MARIADB_TAG=10.9-3.26.3
#MARIADB_TAG=10.6-3.26.3
#MARIADB_TAG=10.5-3.26.3
#MARIADB_TAG=10.4-3.26.3

### --- VANILLA DRUPAL ----

DRUPAL_TAG=10-4.58.1
#DRUPAL_TAG=9-4.58.1
#DRUPAL_TAG=7-4.58.1

### --- PHP ----

# Linux (uid 1000 gid 1000)

PHP_TAG=8.2-dev-4.47.1
#PHP_TAG=8.1-dev-4.47.1
#PHP_TAG=8.0-dev-4.47.1

Para arrancar nuestros contenedores, tenemos dos opciones:

docker compose up -d

O también puedes utilizar el paquete Make, que viene por defecto instalado con la distribución de Ubuntu, en este caso el comando para arrancar los contenedores sería:

make up

Una vez ejecutado cualquiera de los anteriores comandos, si todo va bien, deberías ver en tu consola, algo parecido a la siguiente imagen:

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

   Descargando Drupal en nuestro servidor con Docker

     Gracias a que hemos eliminado previamente, el archivo docker-compose.override.yml, que reescribe la configuración de nuestros contenedores, podremos descargar el esqueleto de un proyecto Drupal 10, en este caso, para colocarlo dentro de nuestra carpeta del rood y así tener todos los archivos listos, por si en un futuro queremos compartir nuestro código, con otros miembros del equipo o trasladarlo a otra máquina.

   Pasos para descargar el Esqueleto de Drupal

       Paso 1 - Acceder al contenedor PHP

          A partir de Drupal 8, es recomendable utilizar el gestor de paquetes Composer, para garantizar la descarga total de las dependencias y facilitar las tareas de actualización y/o mantenimiento de Drupal, una vez esté en funcionamiento.

          Composer está disponible dentro del contenedor encargado de ejecutar PHP, así que primero comprobaremos los nombres de todos los contenedores y luego accederemos al contenedor de PHP. Para conocer los contenedores que tenemos funcionando actualmente, ejecutaremos el siguiente comando en la consola:

docker ps

        Esto nos debería devolver el listado con todos los contenedores que estén en funcionamiento:

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

 

En nuestro caso, el contenedor de php se llama my_drupal10_project_php, para acceder dentro del contenedor y poder ejecutar el comando composer, escribiremos lo siguiente en la consola:

docker exec -it my_drupal10_project_php bash

Esto nos colocará dentro de la carpeta ROOT del servidor:

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

A continuación, podremos descargar el esqueleto de Drupal 10, añadiendo el siguiente comando:

composer create-project drupal/recommended-project vaciar

Este comando descargará todos los arhivos necesarios para una instalación de Drupal 10, dentro de la carpeta que yo he llamado VACIAR, para que recordemos que no debemos dejar nada dentro una vez termine la descarga.

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

   Añadiendo archivos no deseados al .gitignore

     Antes de sacar los archivos de la carpeta VACIAR, para evitar que se suban por error, cualquiera de los archivos de Docker, que sólo deberían estar en nuestro servidor local, tendremos que añadir esos archivos al .gitignore que nos viene por defecto al descargar Docker4Drupal, así que, lo abriremos con nuestro editor, y a continuación, añadiremos todos los archivos correspondientes a Docker y sus contenedores:

     El archivo .gitignore, quedaría de la siguiente manera, con nuestros cambios añadidos:

.idea/
mutagen.yml.lock
.vscode

#ignoramos los archivos de Docker y el servidor
tests
.dockerignore
.env
docker-compose.yml
docker.mk
LICENSE.md
Makefile
README.md
traefik.yml

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

 

   Moviendo los archivos de Drupal a la raiz del  servidor

      Ya que tenemos configurado el archivo .gitignore, procederemos a extraer todos los archivos de la carpeta vaciar, para colocarlos en la carpeta raíz de nuestro servidor y de esta forma iniciar el proceso de instalación del Drupal. Para ello, no hace falta que estemos dentro del contenedor:

mv vaciar/* .
mv vaciar/.* .

     Con esto, quedarán fuera de la carpeta vaciar, todos los archivos de Drupal y a continuación, podremos eliminar la carpeta.

sudo rm -rf vaciar

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

   Arrancando el instalador de Drupal

     Ahora que ya hemos colocado todos los archivos necesarios para instalar Drupal, podremos proceder con el instalador, pero antes, para estar seguros de que tenemos todo actualizado a la versión más reciente disponible, ejecutaremos el comando update de Composer, desde nuestro contenedor php:

composer update

     El resultado, debería ser algo parecido a la siguiente imagen:

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Para comprobar que podremos instalar nuestro Drupal 10, abriremos el navegador y escribiremos los datos que constan en la variable de entorno, y que explicamos al principio de este ejercicio, si no has cambiado ninguno de los valores por defecto, deberías escribir esto en tu navegador :

http://drupal.docker.localhost:8000/

     El resultado, será que se pondrá en marcha el instalador de Drupal 10.

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

   Proceso de instalación

     Al hacer clic en la primera pantalla del instalador, es posible que nos encontremos con algunos mensajes, relacionados con archivos que nos faltan por descargar, crear o configurar. El primero de ellos, en mi caso es una alerta que me advierte de la ausencia de la carpeta translations, encargada de alojar los archivos relacionados con las traducciones de Drupal, ya que nuestra instalación será en Español. 

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Para corregir el error, creaemos la carpeta files, dentro de la ubicación: web/sites/default/, y acontinuación, daremos permisos de escritura a la carpeta files...

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Si volvemos al navegador y refrescamos, veremos que nos deja continuar con el proceso de instalación, hasta la siguiente pantalla:

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

 

     Al hacer clic en el botón Guardar y continuar, nos encontraremos con otro mensaje de alerta: 

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     El instalador Drupal necesita que se cree un archivo ./sites/default/settings.php como parte del proceso de instalación. Así que simplemente, seguiremos las instrucciones, copiaremos el archivo default.settings.php y lo renombraremos a settings.php, asegurándonos de otorgarle permisos de escritura, que serán necesarios durante el resto de la instalación, para que Drupal pueda configurar los datos de acceso a la base de datos y la carpeta para la sincronización.

cp web/sites/default/default.settings.php  web/sites/default/settings.php

chmod -R 777 web/sites/default/settings.php

     Esta vez, cuando hayamos refrescado el navegador, veremos la pantalla donde tendremos que añadir los datos de acceso a la base de datos, que son los que podremos confirmar en nuestra variable de entorno .env, es muy importate que en lugar de dejar localhost, cambiemos el servidor de la base de datos por mariadb, o nos devolverá un error de permisos.

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Tan pronto como se terminen de descargar las traducciones, debido a que nuestra instalación es en Español, veremos la pantalla final, donde debemos rellenar los detalles del usuario administrador, el correo electrónico que utilizará Drupal, para comunicarse con los usuarios que interactuén, el lenguaje, horario y pais... 

     Rellenaremos todo, presionaremos el botón continuar, y por fin, hemos terminado el proceso completo de instalación de un proyecto Drupal 10, con Docker.

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     Ahora ya podremos comenzar a trabajar con nuestro Drupal.

Docker Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

 

   Añadiendo archivos al repositorio

     Como hemos comentado al principio, por lo general, cuando estás trabajando con algún proyecto de desarrollo, en algún momento tendrás que realizar el despliegue al entorno de producción, por lo cual es muy recomendable, que desde el principio, te acostumbres a trabajar con un repositorio, añadiendo y comiteando tus cambios, a medida que vayas avanzando en el proceso.

     Para evitar que se añadan archivos innecesarios de Drupal, como vendor o files, actualizaremos el archivo .gitignore, antes de realizar nuestro primer commit.

     Accede a este enlace y copia todo su contenido, justo debajo de nuestros últimos cambios en el .gitignore:

     https://drupaladicto.com/snippet/git-ignore-para-drupal

     Una vez actualizado tu archivo, podemos añadir y comentar nuestros cambios:

git init

git add .

git commit -m "Archivos base para instalar Drupal 10"

     Así nos aseguramos de que, al ejecutar el comando de subida a nuestro repositorio, git pull, sólo subamos lo necesario para no ocupar espacio innecesario en nuestro repositorio final.

Database backup | 4 opciones para crear copias de seguridad

Texto

Cuatro maneras para realizar una copia de tu base de datos Drupal

        Antes de realizar cualquier tipo de actualización en tu proyecto de Drupal, es altamente recomendable, sacar una copia de tu base de datos actual, para evitar posibles pérdidas de información durante el proceso. Tienes varias opciones para extraer esta copia de la base de datos.

  • Copia de la base de datos utilizando Drush.

       Para exportar la base de datos de tu proyecto Drupal, utilizando Drush, colócate en la carpeta raiz de tu proyecto, usando tu consola de comandos y a continuación, ejecuta el siguiente comando, sustituyendo el final, por el nombre que quieres para identificar tu copia de seguridad:

    drush sql:dump --result-file=../mi_backup.sql 

Drupal Update | www.drupaladicto.com - Consultor especializado en drupal y symfony
  • Copia de la base de datos desde la interfaz PhpMyAdmin.

    Si tienes activado el administrador de Base de datos PhpMyAdmin, puedes exportar tu base de datos, a través de su interfaz. Para ello, sólo tienes que acceder a PhpMyAdmin, y a continuación seleccionar la base de datos que necesitas exportar; luego seleccionas el botón exportar, desde el menú superior de PhpMyAdmin y haces clic en continuar.

    El resultado será un archivo con la extensión .sql, que se descargará automáticamente.

Drupal Update | www.drupaladicto.com - Consultor especializado en drupal y symfony
  • Exportar la base de datos utilizando la línea de comandos MySql.

     Para extraeer una copia de tu base de datos, a través de los comandos MySql, deberás ejecutar la siguiente línea, sustituyendo los datos del usuario root, y tu bases de datos y el archivo.sql resultante.

mysqldump -u usuario -p base_de_datos > archivo.sql

 

  • Exportar una copia de la base de datos, usando el módulo Backup and Migrate.

     Otra forma que nos ofrece Drupal, para exportar una copia de la base de datos, será a través del módulo Backup and Migrate, con el que podremos descargar, a través de la interfaz de Drupal, una copia completa de nuestro sitio web, en formato comprimido, que podremos importar en el entorno local o cualquier otro entorno que necesitemos.

     Si quieres aprender a configurar y utilizar el Módulo Backup and Migrate HAZ CLIC AQUI

Drupal Update | www.drupaladicto.com - Consultor especializado en drupal y symfony

Gutenberg | Módulo Drupal

Video de Youtube
URL de Video remoto
Texto

      Aunque en mi opinión, una de las cosas que me enamoró de Drupal en cuanto lo conocí, es la posibilidad de manipular, personalizar y saber encontrar, prácticamente dónde y cuando ocurren la mayoría de sus funcionalidades, entiendo que el objetivo principal de cualquier herramienta de desarrollo, debería ser facilitarnos la vida, además de ofrecernos grandes posibilidades a nuestro alcance.

     Como cada proyecto requiere de diferentes requisitos para llevarse a cabo, y por lo general, uno de los más importantes, es el tiempo que tendremos que invertir hasta su puesta en producción, muchos desarrolladores web prefieren apostar por otros CMS o construir desde cero proyectos enteros, para sentir que tienen mayor control sobre sus creaciones.

     No obstante, creo que con un pequeño conocimiento sobre cómo instalar Drupal 9 usando Composer y un breve vistazo a cómo gestionar usuarios y permisos, complementado con la ayuda del Módulo Gutenberg, conocido mayormente por usuarios de Wordpress, podrías llegar a tener lo que haz estado buscando hace tiempo, una plataforma simple de manipular, pero potente, con posibilidad de adaptación a la mayoría de webs sencillas.

     Es por esta razón que a continuación, te voy a mostrar cómo puedes utilizar las opciones que integra este módulo a la interfaz de usuario, facilitándote de forma notable, la creación de nuevos contenidos en Drupal 9.

Descarga y Activación:

Para descargar y activar cualquier módulo de Drupal tienes varias opciones:

     Descarga:

          1.- La forma recomendada a partir de Drupal 8, es utilizando el gestor de paquetes Composer, ejecutando en tu consola el comando:

composer require drupal/gutenberg

          2.- Descargándolo manualmente el módulo desde la página oficial del Módulo Gutenberg y una vez descargado y colocado en carpeta "modules/contrib", si haz descargado todos tus módulos manualmente, deberías crear la carpeta "contrib", para que puedas diferenciar entre tus módulos personalizados y los que están disponibles directamente en la Página oficial de Drupal.
 

     Activación:

          1.- Utilizando la herramienta de consola Drush, la opción "-y" activará todos los sub-modulos automáticamente

drush en gutenberg -y

          2.- Desde la interfaz de usuario de Drupal, en la url "/admin/modules", y luego marcando el check junto al nombre de tu módulo y haciendo clic en el botón guardar que aparecer al final de la página.

 

gutenberg - www.drupaladicto.com - formacion especializada en drupal y symfony

 

Cómo utilizar Gutenberg

     Una vez activado el Módulo Gutenberg, veremos que se ha añadido una nueva opción, en la parte inferior izquierda de todos los contenidos, llamada Gutenberg Experience y que al activarla podremos ver dos listados con todos los nuevos bloques, tanto del propio módulo como de el núcleo de Drupal, que podremos activar o no, para que estén disponibles como parte de las opciones del tipo de contenido en que se han activado, modificando inmediatamente la interfaz de creación de dicho contenido.

 

Gutenberg Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony

     La idea principal de Gutenberg, es que convierte todos los elementos que podamos añadir, en bloques individuales, con sus propias opciones, disponibles en el momento en que seleccionamos dicho bloque o elemento, haciéndolo mucho más gráfico el método para añadir, modificar o reutilizar dicho elemento.

     Para comenzar a añadir contenidos o "Bloques" en nuestro tipo de contenido, veremos un símbolo de más dentro de un círculo y al hacer clic sobre éste, se desplegarán las diferentes opciones disponibles para agregar y una vez seleccionado el elemento que deseamos añadir y se añade, inmediatamente cambiará el panel de la derecha de la pantalla, adaptándose a las opciones disponibles para él.

 

gutenberg - www.drupaladicto.com - formacion especializada en drupal y symfony

     De entre sus opciones más llamativas, está la posibilidad de arrastrar directamente los elementos hasta la posición deseada desde el escritorio de tu ordenador, la integración con módulos como Media o Imagen, insertar directamente elementos embebidos como vídeos, sonidos, etc, o la posibilidad de crear "Bloques" de contenido reutilizables en cualquier otro lugar de la web.

     El objetivo de utilizar Gutenberg, es que todos tus tipos de contenido, sólo tengan el campo "Body" y dentro de este campo se podrán añadir, editar o eliminar el resto de elementos que se mostrará en tus páginas, incluyendo imágenes o incluso bloques del núcleo de Drupal.

Gutenberg Cloud

     Una de las opciones más novedosas de este módulo, es la posibilidad de añadir "bloques" de contenido, directamente desde su repositorio en la web Gutenbergcloud.org, mediante el sistema de CDN, por lo que dichos bloques, con características, estilos y funcionalidades prediseñados, no se guardan como el resto de contenidos en la base de datos de Drupal. Por el contrario, se añaden como etiquetas dentro del campo "BODY", que añade Drupal por defecto cada vez que creamos un nuevo tipo de contenido.

     Para añadir esta funcionalidad, sólo habría que activarla como cualquier otro módulo y una vez hecho esto, se añadirá como una de las opciones disponibles para agregar en el listado de bloques cuando hagamos clic en el selector.

 

gutenberg - www.drupaladicto.com - formacion especializada en drupal y symfony

     Por desgracia, esta funcionalidad no es compatible para todas las versiones de Drupal 9, por lo menos al momento de escribir este artículo. Pero sí podrás utilizarla en cualquier instalación de Drupal 8 o menor que la 9.1.

 

Gutenberg Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony