Instalar npm y gulp utilizando docker4drupal
En algunas ocasiones necesitarás instalar NPM y Gulp, sobretodo cuando trabajas con el frontend de Drupal, en estos casos, si estás utilizando Docker4Drupal, es bastante sencillo...
En algunas ocasiones necesitarás instalar NPM y Gulp, sobretodo cuando trabajas con el frontend de Drupal, en estos casos, si estás utilizando Docker4Drupal, es bastante sencillo...
Al intentar realizar la instalación de Symfony 6.1 con Docker, siguiendo las instrucciones desde su página oficial HAZ CLIC AQUI PARA VERLA
me encontré con este error al intentar entrar a los contenedores
OCI runtime exec failed: exec failed: unable to start container process: exec: "bash": executable file not found in $PATH: unknown
Este código te permitirá añadir Google Fonts en tu tema personalizado o "Subtheme" Drupal 8/9.
Puedes consultar la Página oficial de Drupal
Para elegir otra fuente desde la página de google fonts:
Este código te permitirá mostrar una vista tipo bloque en un nodo o paragraphs
Para Nodos:
/** * Implements hook_preprocess_node() for node.html.twig. */
function TUSUBTHEME_preprocess_node(array &$variables) {
$variables['nombre_variable_para_mostrar'] = views_embed_view('nombre_maquina', 'nombre_vista_dentro');
}
Para Paragraphs
/* Implement hook_preprocess_paragraph() */
function wct_oct2020_preprocess_paragraph(&$variables) {
$variables['nombre_variable_para_mostrar'] = views_embed_view('nombre_maquina', 'nombre_vista_dentro');
}
Este código te permitirá utilizar una imagen desde un campo TIPO IMAGEN como fondo de un div que podrás añadir a cualquier plantilla.
Para comprobar el o los roles asignados a un usuario logueado....
Cuando estamos trabajando con Docker y Composer, es posible que nos encontremos con un error producido por la falta de memoria de nuestro contenedor de PHP, durante el proceso, para solucionarlo sigue las siguientes instrucciones:
Con esta instalación podrás crear un theme personalizado, usando como base Bootstrap Barrio, con todas las opciones responsive necesarias para hacer rápidamente un diseño rápido y efectivo.
Este código te ayudará en tus configuraciones de conexión Rest con Drupal.
La Preprocess Function sirve para modificar los comportamientos por defecto de Drupal, en este caso vamos a acceder al formulario por defecto y lo haremos disponible para colocarlo dentro de un nodo y posteriormente dentro de un paragarphs, así podremos imprimirlo en cualquier lugar y posición dentro de la web.
Si quieres aprender más sobre las preprocess functions
Algunas veces, instalamos mysql o mariadb y por alguna razón, necesitamos borrarlo, ya sea para reinstalarlo y corregir algún error de configuración o por conflictos con otra apliación, a continuación te muestro los pasos para borrarlo, con todos sus archivos en Ubuntu
Al instalar nuestro sitio multi-idioma en Drupal, en algunos casos nos encontraremos con la necesidad de que el selector de idiomas (Language Switcher), que viene con Drupal, muestre los nombres abreviados para cada indioma, ya que por defecto mostrará su nombre completo. En principio, para cambiarlo sólo deberíamos acceder a la url de configuración del módulo Language, previamente activado, accediendo a "/admin/config/regional/language" y allí seleccionar EDITAR y cambiar el nombre del idioma Ej. English a EN, pero esto no funciona correctamente y sólo te cambia el resto de los idiomas.
Para solucionarlo, tendremos que añadir en nuestro archivo TUTEMA.theme, la siguiente función, cambiando sólamente en nombre equivalente a tu tema.
Con estas instrucciones podrás personalizar las plantillas y formularios para crear, editar tus tipos de contenido
Cuando trabajas con Symfony y Postgree, es posible que al intentar cambiar el tipo de valor para una tabla o para una columna, te encuentres con este error, que no te permitirá realizar la actualización al ejecutar el comando doctrine:migrations:migrate.
SQLSTATE[42804]: Datatype mismatch: 7 ERROR: column "xxx" cannot be cast automatically to type boolean HINT: You might need to specify "USING xxx::boolean".
Cuando trabajas con Colorbox, necesitarás instalar la librería DOMPurify, como uno de sus requisitos, en algunas ocasiones, aunque trabajes con Composer, puede que no se descargue en el lugar correcto y por eso no la encuentre, para solucionarlo, puedes utilizar el comando de Drush que te pongo debajo.
Para extraer la url de un campo media e imprimirlo en tu plantilla Twig, tanto si el campo está en el primer nivel del Paragraphs o dentro de un Paragraphs, que está anidado en otro.
Los ejemplos se puedes aplicara contenidos, productos o paragraphs en Drupal.
¿Sabes que puedes averigurar la versión instalada de Drupal, además de otros datos, utilizando un comando de Drush?
En algunos casos, puede que necesites crear una copia de seguridad mysql o restaurar, utilizando tus contenedores de Docker, te dejo ambas opciones.
En algunas ocasiones, cuando estamos trabajando con Lando, dentro de nuestro servidor WSL2 o en Ubuntu 20.04, es posible que al ejecutar el los comandos sudo apt update y sudo apt upgrade, nos devuelva el error siguiente:
The following packages have unmet dependencies: lando : Depends: docker-ce but it is not installable
Este código te permitirá modificar tus formularios personalizados, utilizando el módulo Devel.
Cuando trabajamos con campos de múltiples valores, podremos acceder a cada valor por separado y así crear estructuras a medida.
Corrige el icono hamburguesa de bootstrap si usas Bootstrap Barrio
Drupal 8 ha modificado la manera en que se trabaja con las entidades, por lo que recomendamos visitar la página oficial para entender como se hace a partir de ahora: https://www.drupal.org/docs/8/api/entity-api/working-with-the-entity-api
Algunas veces quieres crear tus propias tablas, dentro de tus proyectos de drupal. Para ello necesitarás la ayuda de un módulo personalizado.
Si quieres saber cómo crear un módulo personalizado
Puedes ver el video de cómo crear tablas programáticamente, haciendo clic aquí
Para los que han tenido incovenientes con la nueva manera de utilizar services de Drupal 8 y tengan que conectarse utilizando Post para enviar datos a un servidor externo de Drupal usando Guzzle, les dejo el código que utilicé en un módulo custom para un proyecto.
$this->messenger() te permitirá imprimir en pantalla tus mensajes al ejecutar algo de código en tus desarrollos con Drupal 8 o 9
/* Con este ejemplo, al ejecutar el método submitForm en tu formulario personalizado, podrás pasar como parámetro los campos de tu formulario formando parte del mensaje. */
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
$this->messenger()->addStatus($this->t('Su número es @number', ['@number' => $form_state->getValue('numero_telefono')]));}
}
Algunas veces, instalamos apache y por alguna razón, necesitamos borrarlo, ya sea para reinstalarlo y corregir algún error de configuración o por conflictos con otra apliación, a continuación te muestro los pasos para borrarlo, con todos sus archivos en Ubuntu
En algunos desarrollos, es posible que necesites recurrir a procedimientos automáticos que ejecuten tareas como la de borrar usuarios. Aquí tienes el código que podría ayudarte.
Puede que necesites para algún proyecto, añadir en tu menú, opciones sin enlace. En este caso tienes varias opciones disponibles
route:<nolink>
Link::fromTextAndUrl(t('Title'), Url::fromUri('route:<nolink>'));
An exception has been thrown during the rendering of a template
("Could not find the entrypoints file from Webpack: the file "./public/build/entrypoints.json" does not exist.")
Durante la instalación de un proyecto de Symfony, es posible que nos encontremos con este error cuando intentamos acceder a la plantilla correspondiente al Controller que generamos por defecto con el comando make:controller, para solucionar el fallo tendrás que eliminar el archivo ENCORE ubicado dentro de config/packages. Pero no manualmente, sino ejecutando el comando que está más abajo.
Testeado en la versión Symfony 5.4.6
Cómo imprimir valores de un Nodo que contiene campos del tipo Paragraphs, usando Twig.
Este código te permitirá extraer e imprimir en plantillas los valores de un campo enlace por separado "Texto del enlace" + "Enlace", directamente en la plantilla del campo para conseguir, por ejemplo una lista con iconos en un campo múltiple de enlaces.
Cuando realizamos una instalación de la versión 4.4 de Graphql, utilizando composer, es posible que nos econtremos con un error, debido a su dependencia con el módulo typed_data.
drupal/graphql 4.4.0 requires drupal/typed_data * -> found drupal/typed_data[dev-1.x, 1.0.0-alpha1, ..., 1.x-dev (alias of dev-1.x)] but it does not match your minimum-stability.
Hoy en día, los usuarios de Windows, hemos estado evolucionando hacia otras maneras de implementar nuestros entornos de desarrollo, así que es posible, que si intentas instalarte un XAMPP, no puedas arrancar el apache y te encuentres con este error:
Apache Service detected with wrong path
Normalmente irías a la opción config y cambiarías el puerto en el archivo http.conf del apache, y esto debería solucionarte el problema; que generalmente es causado porque tienes el Skype instalado y entra en conflicto con el puerto 80 del Apache, pero en otros casos, se trata de que en algún momento tuviste instalado Apache2.4 directamente en tu disco C y modificaste el path desde la ventana de Services.
Así que para solucionarlo, sigue los siguientes pasos:
Crea una hoja de estilos css, específica para dispositivos te permite corregir errores más rápidamente.
Para ver la explicación en video HAZ CLIC AQUI
Este código te ayudará a corregir el error de memoria, en tu entorno local, cuando ejecutas composer.
Este código te ayudará a generar una tabla, con tu módulo personalizado en Drupal.
Este campo evalúa entre los valores "izquierda" o "derecha" de un SELECT y ejecuta un código según su valor
Este código permitirá alterar tu formulario para que algunos campos sólo sean de lectura, para ello tendrás que utilizar el módulo Devel y hook_form_alter
Con este código podremos borrar un contenido de forma programática, utilizando nuestro módulo personalizado.
Aunque puedes utilizar la interfaz de usuario de Drupal para activar y configurar tus temas, también podrás hacerlo mediante la consola, gracias a la herramienta Drush.
Con este hook, podrás crear una acción una vez se ha hecho submit en tu webform Drupal.
Este código imprimer en pantalla un mensaje, al hacer clic en el submit de tu webform.
Aunque no está recomendado, es posible forzar la subida de cambios hacia nuestros repositorios de Git.
Si has estado trabajando con módulos personalizados, o borrado algún campo relacionado con tus contenidos, dentro de Drupal 9 o 10, es muy probable que te hayas encontrado con este error.
Al utilizar javascript en tus proyectos de Drupal, es posible que te muestre, dentro de tu código, un mensaje de alerta con este contenido:
`let' is available in ES6 (use 'esversion: 6') or Mozilla JS extensions (use moz)
Si haz perdido el acceso a tu proyecto de Drupal, y estás en un entorno dónde no puedes enviarte el correo de recuperación, puedes modificar la contraseña de un usuario, incluido el usuario con permisos de administrador, utilizando el comando de drush user:password
A partir de la versión 5 de Symfony, cuando utilizamos el motor de base de datos con MariaDB, nos encontraremos con un error de actualización de datos, generalemente después de ejecutar los comandos para generar las entidades (console make:entity / console doctrine:migrations:migrate). Para corregir el error sigue los siguientes pasos.
Desde la página oficial podrás descargarte la estructura más reciente para instalar un proyecto Drupal utilizando el gestor de paquetes Composer
Si todavía no haz instalado Composer en tu ordenador visita la página oficial de composer
Este código permite imprimir una imagen de fondo utilizando vistas y plantillas mediante la declaración de una variable.
Este texto permite enviar los valores de varios campos, en formato json a un servidor externo a Drupal 8
Este código te ayudará a descargar contenidos programáticamente
Si estás intentando ejecutar por primera vez algún script usando tu consola PowerShell en Windos, te encontrarás con un error parecido a este:
«No se puede cargar el archivo XXXX.ps1 porque en el sistema está deshabilitada la ejecución de scripts. Vea «get-help about_signing» para obtener más información».
Una vez cambies la configuración siguiendo los pasos que están en las instrucciones, podrás ejecutar código cada vez que lo necesites.
Aquí te dejo varios comandos útiles para trabajar con Docker
Este código te ayudará a entender el comportamiento de javascript en Drupal.
Cuando trabajamos con PhpStand en Symfony, es posible que nos encontremos con una alerta que nos advierte sobre propiedades o campos como el $id, que nunca se han utilizado o leído, pero en realidad, en este caso, el $id, sólo se crea para la interacción entre Symfony y Doctrine, por lo que no hace falta Leerlo ni Usarlo más allá.
Así que para evitar esta alerta, que nos saltará siempre que ejecutemos la revisión con PhpStand, sigue los siguientes pasos:
Este código te permitirá imprimir el logo y el nombre del sitio utilizando en cualquier página de Drupal 8 y 9, recuerda que si necesitas utilizarlo en otro contenido que no sea una página, entonces la preprocess_function() deberá corresponderse con ese tipo de contenido.
Este código convierte el contenido de un nodo a formato Json
Es posible que te hayas encontrado con la necesidad de imprimir algún contenido, dentro de un paragraphs en un sitio multi-idioma.
En mi caso me tocó hacerlo con el witget de Turitop, para un sitio en dos idiomas, así que comparto el ejemplo por si te hace falta.
La solución es implementar una preprocess function:
Aquí te dejo varios comandos para utilizar con el control de versiones en tus proyectos.
Añadiendo estas variables, podrás obtener valores del perfil de usuario e imprimirlos en tus plantillas de Drupal.
User Deprecated: Method "Symfony\Component\Console\Command\Command::execute()" might add "int" as a native return type declaration in the future. Do the same in child class "App\Command\UpdateInfoCommand" now to avoid errors or add an explicit @return annotation to suppress this message
Este código permite:
Este código te imprimirá el valor del campo imagen dentro de la plantilla.
La Preprocess Function sirve para modificar los comportamientos por defecto de Drupal, en este caso vamos a acceder al formulario por defecto y lo haremos disponible para colocarlo dentro de un nodo y posteriormente dentro de un paragarphs, así podremos imprimirlo en cualquier lugar y posición dentro de la web.
Si quieres aprender más sobre las preprocess functions
Para crear un nuevo usuario de forma programática...
Este código permitirá que puedas borrar todos los restos de un módulo que hayas desinstalado.
En algunos casos, como por ejemplo, al instalar un proyecto de Symfony 2.4.0, necesitarás utilizar la anterior versión de Composer, o no podrás terminar con la instalación.
En estos casos, aunque estés trabajando con contenedores de Docker, sólo tendrás que ejecutar el siguiente comando y Composer volverá a la versión anterior a la actual.
Cuando trabajamos con Lando, utilizando el Subsitema de Windows (WSL2), uno de los requerimientos que nos encontraremos es el de instalar el Docker-CE, como parte del proceso.
Para evitar econtrarnos con el error durante la instalación de Lando, vamos a descargar y activar Docker-CE antes de proceder con la instalación de Lando.
La sincronización de configuración de Drupal o CMI, es la manera más efectiva y práctica de conectar y mantener diferentes entornos sin grandes pérdidas de tiempo. Aqui te dejos algunos de los comandos más utilizados.
En Symfony, al trabajar con propiedades o campos del tipo fecha en nuestra entidades, es posible que nos encontremos con este error:
App\Entity\Entidad::setValidateTo(): Argument #1 ($validateTo) must be of type DateTimeInterface, string given, called in /app/src/Command/UpdateEntidadInfo.php on line 50
Esto significa que aunque en nuestra entidad hemos declarado correctamente el tipo de propiedad, al intentar leerla desde otro lugar, sea controlador o comando de consola, tendremos que volver a añadir su tipo.
Las funciones de preproceso son la manera "tradicional" en que podremos pasar valores dentro de cualquier contenido de drupal, aunque hoy en día ya se utilizan módulos como Twig Tweak, para realizar esta clase de procedimientos.
Cuando trabajamos con Repositorios GIT, es posible que tengamos que conectarnos a ramas ya existentes en el servidor y comenzar a trabajar a partir de ellas en nuestro entorno local.
Si estás utilizando un servidor NGNIX para tus proyectos de Drupal, es posible que te hayas encontrado con el error 502 Bad Gateway error, sobretodo cuando estás como administrador o editando tus contenidos.
El problema parece estar relacionado con los fastcgi buffers de Nginx
Para solucionarlo, abre el archivo /etc/nginx/nginx.conf, y a continuación añade el código que está debajo en el área de http
GNU Make es una herramienta que controla la generación de ejecutables y otros archivos no fuente de un programa a partir de los archivos fuente del programa.
Por ejemplo, en el caso de trabajar con contenedores de Docker, una vez tengas instalado Make, podrás ejecutar make up, en lugar de docker-compose up -d, para ponerlos en funcionamiento.
Composer es un Gestor de paquetes, recomendado para realizar descargas de código desde repositorios seguros y en el caso de Drupal, recomendado a partir de la versión 8, ya que nos servirá para la instalación completa de un proyecto Drupal y de sus módulos.
Si quieres más información puedes visitar su Página Oficial
Este código te permite habilitar las sugerencias de nombres para modificar las plantillas de los bloques.
Para editar el contenido de un nodo...
Este código te permitirá crear una vista de contenidos relacionados.
Cómo consumir y devolver un Json dentro de un controller de Symfony
A partir de Drupal 8 se recomienda que la instalación se realice utilizando el gestor de paquetes COMPOSER para mantener una estructura de archivos más fácil de gestionar mediante línea de comandos.
Esto presenta un nuevo problema que es la creación de la carpeta "/web" dentro de esa estructura que en la mayoría de los servidores compartidos terminará mostrándose como parte de nuestra url, ya que el dominio principal apuntará por defecto a la carpeta public_html o www en lugar de "public_html/web".
A los que estamos trabajando con WSL2 en Windows 10, nos puede pasar este error de conexión entre nuestra consola y el servidor para descargar las aplicaciones. En mi caso me sucedió al intentar instalar cerbot.
Al parecer Ubuntu 20.04 LTS reemplazó el software de ubuntu con snapcraft por completo. Entonces, es obvio que el snap se está convirtiendo en el 'predeterminado' de la distribución.
El problema es que snap no parece funcionar actualmente en wsl2 debido a que depende de systemd. Si lo entiendo correctamente, el servicio snapd debería estar ejecutándose en segundo plano para que funcione, que snapd ya viene preinstalado, sin embargo snapd no puede iniciarse debido a que WSL2 no tiene systemd.
error: cannot communicate with server: Post http://localhost/v2/snaps/hello-world: dial unix /run/snapd.socket: connect: no such file or directory
Por eso, si intentáramos ejecutar el comando: sudo service snapd start, nos saldría en pantalla algo parecido a esto:
snapd: unrecognized service
Este código añadirá a la tabla de logs de Drupal 8 los errores que se generen en tu archivo controllador o en tu módulo.
Este código te permite acceder a la url de la imagen e imprimirla desde una plantilla tipo views-field
Si estás tratando de implementar algún carrusel para Drupal 10, siguiendo ejemplos que haz encontrado en internet, esto te ayudará a corregirlo.
Se trata de una clase u objeto, desarrollada por otros o por tí, cuya funcionalidad es realizar alguna tarea. Ej.: Mailer o Logger.
Para identificar un Servicio sólo tienes que preguntarte, si esta clase toma información y realiza algún proceso con esta información o si sólamente sirve para guardar esa información en base de datos.
Para acceder al listado de servicios en Drupal 10 y su documentación HAZ CLIC AQUI
Si quieres saber un poco más sobre webservices en Drupal HAZ CLIC AQUÍ
Si queremos reescribir los valores de un campo media, usando la plantilla field.html.twig, podremos obtener sus valores usando la siguiente estructura:
Para cumplir con algunos requerimientos de SEO, es necesario que podamos extraer los valores de texto alternativo "alt" y el título de la imagen, cuando el campo con el que estamos trabajando en Drupal, es de tipo Media, cambiar la estructura, con respecto al tradicional campo tipo imagen.
Si todavía no haz instalado composer en tu ordenador visita la página oficial de composer
Es posible que en algunas ocasiones, nos encontremos con fallos cuando utilizamos Composer, para que se encargue de descargar las dependencias en nuestros proyecto PHP.
En estos casos, puedes comprobar si el error está relacionado con la ejecución del composer o con el resto de tu código, ejecutando el siguiente comando:
Para crear un formulario personalizado...
Para añadir el archivo .gitignore a Drupal sigue estos pasos:
Este código te peritirá crear un enlace tipo ancla, para acceder a zonas específicas sin recargar la página.
Es muy recomendable utilizar los repositorios, para mantener controlada la evolución de nuestro código, a medida que avanzamos en cualquier proyecto. Bitbucket te permite crear, de forma gratuita, una cuenta en la que podrás alojar tu proyecto.
Este código te permitirá modificar el texto que aparece por defecto en el botón de Añadir al carrito o Add to Cart de Drupal 8 Commerce, utilizando tu propio módulo personalizado.
Con el hook_form_alter podremos modificar cualquier formulario existente en Drupal, en esta ocasión añadiremos una clase a nuestro formulario.
Visita la página oficial para más información: https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Form%21form.api.php/function/hook_form_alter/8.2.x
Redirects to external URLs are not allowed by default, use \Drupal\Core\Routing\TrustedRedirectResponse for it.
Es posible que al realizar el despliegue en producción de uno de nuestros sitios Drupal, nos encontremos con este error, para solucionarlo sigue los pasos que te cuento a continuación:
Para algunos de tus proyectos, es posible que necesites ejecutar comandos de automatización, que permitan la creación de algunos nodos, por ejemplo. A continuación te dejo el código que podría ayudarte con esa tarea.
Si estás instalando Drupal, en un servidor VPS con Nginx, este es el archivo completo que deberías utilizar, para Drupal 10
La primera vez que ejecutas Docker Desktop, es posible que te encuentres con este error, relacionado con los permisos de Docker.
File "docker/transport/unixconn.py", line 43, in connect PermissionError: [Errno 13] Permission denied
A partir de Drupal 8, con la orientación a objetos se efectuaron grandes cambios...
Debido a que las propiedades del objeto de nodo están protegidas, no podremos acceder a ellas directamente de la forma en que lo hizo en el código de Drupal 7.
Por esta razón, si deseas usarlas en funciones de preproceso, deberás usar las funciones de obtención relevantes para acceder a ellas.
A continuación, se muestran algunos ejemplos en los que deberá cambiar la forma en que accede a las propiedades:
Este código imprime en una plantilla paragraphs.html.twig el campo "field_section_hero_image", configurado con el módulo media para subir las imágenes, en lugar de un campo imagen normal de Drupal 8.
Para extraer url de archivo en una plantilla tipo Node.twig.html ...
Cannot assign Doctrine\ORM\PersistentCollection to property App\Entity\Xxx::$Xxx of type Doctrine\Common\Collections\ArrayCollection