tema personalizado https://drupaladicto.com/ es Gutenberg | Módulo Drupal https://drupaladicto.com/curso/site-building/gutenberg-modulo-drupal <span class="field field--name-title field--type-string field--label-hidden">Gutenberg | Módulo Drupal</span> <div class="field field--name-field-contenidos-cap-gratis field--type-entity-reference-revisions field--label-hidden field__items"> <div class="field__item"> <style>#video-only-925 .play-btn:hover::after { border-left: 15px solid #1fd7d9; transform: scale(20); border-left: 15px solid #fff; } #video-only-925 .play-btn::before { border: 5px solid #1fd7d9; } #video-only-925 .play-btn { background: radial-gradient(#1fd7d9 50%, rgba(66, 109, 202, 0.4) 52%); }</style> <div class="paragraph paragraph--type--video-only paragraph--view-mode--default" id="vol-925"> <section id="video-only-925" class="about area-padding video-block-wrapper"> <div class="col video-box"> <div class="portada"> <img src="/sites/default/files/styles/diapositiva_1200x650/public/2023-07/portada-gratuito-grande_2.jpg?itok=8dBQYXT7" class="img-fluid" alt=""> <div class="field field--name-vo-youtube-video field--type-entity-reference field--label-visually_hidden"> <div class="field__label visually-hidden">Video de Youtube</div> <div class="field__item"><article class="media media--type-remote-video media--view-mode-diapositiva-1200x650"> <div class="field field--name-field-media-oembed-video field--type-string field--label-visually_hidden"> <div class="field__label visually-hidden">URL de Video remoto</div> <div class="field__item"><div class="modal micromodal-slide" id="modal-media-645-0-field-media-oembed-video" aria-hidden="true"> <div class="modal__overlay" tabindex="-1" data-micromodal-close> <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-media-645-0-field-media-oembed-video-content"> <a class="modal__btn" data-micromodal-close aria-label="Close this dialog window">X</a> <main class="modal__content" id="modal-media-645-0-field-media-oembed-video-content"> <div class="videoWrapper"><iframe src="/media/oembed?url=https%3A//youtu.be/xrcMsplfVog&amp;max_width=0&amp;max_height=0&amp;hash=dnHOBkesGLiFGHR0AQ0oFHzAc6TySJ9Cr_MEevNweG8" frameborder="0" allowtransparency="" class="media-oembed-content" title="Time Value of Money"></iframe></div> </main> </div> </div> </div> <div><a class="myButton" data-micromodal-trigger="modal-media-645-0-field-media-oembed-video"><span class="btn play-btn">.</span></a></div> </div> </div> </article> </div> </div> </div> </div> </section> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--text-only paragraph--view-mode--default" id="txonly-1164" style="background-color: ;border: solid px;border-color: #096ba0;border-radius: 5px;padding: 10px;"> <div class="clearfix text-formatted field field--name-to-text field--type-text-long field--label-visually_hidden"> <div class="field__label visually-hidden">Texto</div> <div class="field__item"><p>      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.</p> <p>     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.</p> <p>     No obstante, creo que con un pequeño conocimiento sobre <strong><a href="https://www.drupaladicto.es/curso/instalacion-de-drupal-9-usando-composer">cómo instalar Drupal 9 usando Composer</a></strong> y un breve vistazo a <strong><a href="https://www.drupaladicto.es/actualidad/gestionar-usuarios-roles-y-permisos-en-drupal">cómo gestionar usuarios y permisos</a>,</strong> complementado con la ayuda del<strong> <a href="https://www.drupal.org/project/gutenberg">Módulo Gutenberg</a></strong>, 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.</p> <p>     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.</p> <h3>Descarga y Activación:</h3> <p>Para descargar y activar cualquier módulo de Drupal tienes varias opciones:</p> <p><strong>     Descarga:</strong><br /><br />           1.- La forma recomendada a partir de Drupal 8, es utilizando el gestor de paquetes Composer, ejecutando en tu consola el comando:</p> <pre> composer require drupal/gutenberg</pre> <p>          2.- Descargándolo manualmente el módulo desde la página oficial del <a href="https://www.drupal.org/project/gutenberg" target="_blank">Módulo Gutenberg</a> 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.<br />  </p> <p>     <strong>Activación:</strong></p> <p>          1.- Utilizando la herramienta de consola Drush, la opción "-y" activará todos los sub-modulos automáticamente</p> <pre> drush en gutenberg -y</pre> <p>          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.</p> <p> </p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 56.13%;" data-ratio="56.13" data-b-token="b-cbc2b3c85e3" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img data-entity-uuid="4ab6ffd1-0738-4dfb-b61d-dc79541b1202" decoding="async" loading="lazy" typeof="foaf:Image" alt="gutenberg - www.drupaladicto.com - formacion especializada en drupal y symfony" class="media__element b-lazy b-filter img-fluid" data-src="/sites/default/files/styles/max_1300x1300/public/inline-images/activar_gutenberg.png?itok=-kjwbUmt" src="data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%201%201'%2F%3E" width="800" height="449" /></div></div> <p> </p> <h2>Cómo utilizar Gutenberg</h2> <p>     Una vez activado el <a href="https://www.drupal.org/project/gutenberg" target="_blank">Módulo Gutenberg</a>, veremos que se ha añadido una nueva opción, en la parte inferior izquierda de todos los contenidos, llamada <strong>Gutenberg Experience</strong> 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.</p> <p> </p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 84.74%;" data-ratio="84.74" data-b-token="b-f277838c7ac" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img data-entity-uuid="705c0cff-a5dd-4f30-a422-3cec26973dc8" alt="Gutenberg Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony" decoding="async" class="media__element b-lazy b-filter img-fluid" loading="lazy" data-src="/sites/default/files/styles/max_1300x1300/public/inline-images/gutenberg_experience_0.png?itok=FRkti4I1" src="data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%201%201'%2F%3E" width="662" height="561" typeof="foaf:Image" /></div></div> <p>     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.</p> <p>     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.</p> <p> </p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 56.13%;" data-ratio="56.13" data-b-token="b-bce47a61fed" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img data-entity-uuid="c587a992-32ad-4585-9448-66e48c135b8e" decoding="async" loading="lazy" typeof="foaf:Image" alt="gutenberg - www.drupaladicto.com - formacion especializada en drupal y symfony" class="media__element b-lazy b-filter img-fluid" data-src="/sites/default/files/styles/max_1300x1300/public/inline-images/pantalla_inicial.jpg?itok=coMNn7Vp" src="data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%201%201'%2F%3E" width="800" height="449" /></div></div> <p>     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.</p> <p><em>     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.</em></p> <h2>Gutenberg Cloud</h2> <p>     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 <a href="https://gutenbergcloud.org/blocks">Gutenbergcloud.org</a>, 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.</p> <p>     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.</p> <p> </p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 56.13%;" data-ratio="56.13" data-b-token="b-519c4944b53" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img data-entity-uuid="d8d476a3-25c1-4594-910c-36aae38de216" decoding="async" loading="lazy" typeof="foaf:Image" alt="gutenberg - www.drupaladicto.com - formacion especializada en drupal y symfony" class="media__element b-lazy b-filter img-fluid" data-src="/sites/default/files/styles/max_1300x1300/public/inline-images/cloud_gutenberg.jpg?itok=tG0epQYX" src="data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%201%201'%2F%3E" width="800" height="449" /></div></div> <p>     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.</p> <p> </p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 16.9%;" data-ratio="16.9" data-b-token="b-82293fbcfb9" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img data-entity-uuid="5fcdd712-d8ea-4bc4-812c-00de9ed7eaf9" alt="Gutenberg Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony" decoding="async" class="media__element b-lazy b-filter img-fluid" loading="lazy" data-src="/sites/default/files/styles/max_1300x1300/public/inline-images/no_compatible_0.png?itok=ihf1zaoV" src="data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%201%201'%2F%3E" width="1059" height="179" typeof="foaf:Image" /></div></div> </div> </div> </div> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/luis-alberto-mejia" typeof="schema:Person" property="schema:name" datatype="">webmaster</span></span> <span class="field field--name-created field--type-created field--label-hidden">Mié, 19/04/2023 - 16:33</span> Wed, 19 Apr 2023 14:33:36 +0000 webmaster 430 at https://drupaladicto.com Radix | Descarga, instalación y configuración https://drupaladicto.com/curso/radix-descarga-instalacion-y-configuracion <span class="field field--name-title field--type-string field--label-hidden">Radix | Descarga, instalación y configuración</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/luis-alberto-mejia" typeof="schema:Person" property="schema:name" datatype="">webmaster</span></span> <span class="field field--name-created field--type-created field--label-hidden">Lun, 06/03/2023 - 22:30</span> <div class="field field--name-field-contenidos-post field--type-entity-reference-revisions field--label-visually_hidden"> <div class="field__label visually-hidden">Contenidos</div> <div class="field__items"> <div class="field__item"> <style>#video-only-1052 .play-btn:hover::after { border-left: 15px solid #1fd7d9; transform: scale(20); border-left: 15px solid #fff; } #video-only-1052 .play-btn::before { border: 5px solid #1fd7d9; } #video-only-1052 .play-btn { background: radial-gradient(#1fd7d9 50%, rgba(66, 109, 202, 0.4) 52%); }</style> <div class="paragraph paragraph--type--video-only paragraph--view-mode--default" id="vol-1052"> <section id="video-only-1052" class="about area-padding video-block-wrapper"> <div class="col video-box"> <div class="portada"> <img src="/sites/default/files/styles/diapositiva_1200x650/public/2023-07/custom-module.jpg?itok=5PSIHo9t" class="img-fluid" alt=""> <div class="field field--name-vo-youtube-video field--type-entity-reference field--label-visually_hidden"> <div class="field__label visually-hidden">Video de Youtube</div> <div class="field__item"><article class="media media--type-remote-video media--view-mode-diapositiva-1200x650"> <div class="field field--name-field-media-oembed-video field--type-string field--label-visually_hidden"> <div class="field__label visually-hidden">URL de Video remoto</div> <div class="field__item"><div class="modal micromodal-slide" id="modal-media-744-0-field-media-oembed-video" aria-hidden="true"> <div class="modal__overlay" tabindex="-1" data-micromodal-close> <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-media-744-0-field-media-oembed-video-content"> <a class="modal__btn" data-micromodal-close aria-label="Close this dialog window">X</a> <main class="modal__content" id="modal-media-744-0-field-media-oembed-video-content"> <div class="videoWrapper"><iframe src="/media/oembed?url=https%3A//youtu.be/LXN2xSqCjhc&amp;max_width=0&amp;max_height=0&amp;hash=gh7dpBUTGPwn504zvMnmTHDsNy0TnD7mq_szyPw5hvA" frameborder="0" allowtransparency="" class="media-oembed-content" title="Time Value of Money"></iframe></div> </main> </div> </div> </div> <div><a class="myButton" data-micromodal-trigger="modal-media-744-0-field-media-oembed-video"><span class="btn play-btn">.</span></a></div> </div> </div> </article> </div> </div> </div> </div> </section> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--text-only paragraph--view-mode--default" id="txonly-1114" style="background-color: ;border: solid 2px;border-color: #096ba0;border-radius: 5px;padding: 10px;"> <div class="clearfix text-formatted field field--name-to-text field--type-text-long field--label-visually_hidden"> <div class="field__label visually-hidden">Texto</div> <div class="field__item"><p><span id="cke_bm_96S" style="display: none;"> </span></p> <p>     A pesar de que sigue cobrando fuerza la tendencia de utilizar Drupal Desacoplado o Headless, ya que permite implementar soluciones con Javascript, que amplian las posibilidades para el Frontend o apariencia en tus proyectos, además de ofrecer otras ventajas, como la carga de tus contenidos. Existen otras posibilidades, que nos permitirán desarrollar toda clase de proyectos, con las mismas prestaciones y sin salir de Drupal tal y está concebido.</p> <p>     Una de estas soluciones, la encontraremos en el tema Base conocido como <a href="https://www.drupal.org/project/radix" target="_blank">Radix</a>, cuya implementación permite integrar dentro de su estructura, la posiblidad de utilizar diferentes versiones de Bootstrap, Sass, ES6 y BrowserSync; lo cual permite a los maquetadores, conseguir el mismo resultado y beneficios, que si aplicaran un enfoque Desacoplado.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 58%;" data-ratio="58" data-b-token="b-9bbef2c5832" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img data-entity-uuid="ee179551-7110-451c-a6df-d915db8ec2e1" loading="lazy" alt="Radix Base Theme | www.drupaladicto.com - Consultor especializado en drupal y symfony" decoding="async" class="media__element b-lazy b-filter img-fluid" data-src="/sites/default/files/styles/max_1300x1300/public/inline-images/radix_web.png?itok=nsUrrhXR" src="data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%201%201'%2F%3E" width="650" height="377" typeof="foaf:Image" /></div></div> <h2>   CÓMO INSTALAR RADIX EN DRUPAL</h2> <h3>     PRERREQUISITOS</h3> <p>       Al igual que otros temas Base, utilizando en Drupal, que incluyen funcionalidades extra, en el caso de Radix, necesitaremos tener instalado en nuestro servidor, Node.js y Npm, para completar la configuración del Subtheme.</p> <p>     Por esta razón, utilizaremos <em><strong>Lando</strong></em>, para facilitar este proceso, de esta manera, sólo tendremos que concentrarnos en el resto de requisitos, descritos en su página oficial.</p> <p>     Si todavía no conoces Lando, y quieres saber cómo se instala, <a href="https://www.drupaladicto.com/curso/instalar-lando-en-wsl2-con-windows-10-o-superiores" target="_blank">Haz clic aquí</a></p> <p>     Una vez instalado lando, puedes crear la carpeta donde instalarás tu proyecto de Drupal, y a continuación, añadir el archivo de configuración .lando.yml, con el siguiente contenido, adapatándolo a los detalles de tu proyecto:</p> <pre> name: drupal9 recipe: drupal9 config: webroot: web php: '8.0' proxy: appserver: - drupal9.lndo.site services: node: type: node drupal9: type: mariadb portforward: true creds: user: drupal9 password: drupal9 database: drupal9 tooling: npm: service: node node: service: node gulp: service: node yarn: service: node </pre> <p>     Si lo prefieres, también puedes realizar la instalación con el tipo de servidor que tengas instalado, tomando en cuenta que deberás tener instalado Node.js y NPM.</p> <h2><strong>     INCOMPATIBLE CON DRUSH 11:</strong></h2> <p><strong>     </strong>Es muy importante, que antes de comenzar con el proceso de generación de un Subtema, a partir de Radix, tomes en cuenta, de que no será posible si tu versión de Drush es mayor de 10, ya que a día de hoy, todavía no es compatible con Drush 11. </p> <p>     Así que en nuestro caso, nos aseguraremos de instalar la versión de drush anterior a la 11, para ello, utilizaremos el siguiente comando de composer:</p> <pre> lando composer require drush/drush:10.*</pre> <h2>   CÓMO GENERAR UN SUBTEMA CON RADIX</h2> <p>     Para poder generar un tema personalizado, tomando como base Radix, tendremos que seguir lo siguientes pasos:</p> <ol><li> <h3>DESCARGAR Y ACTIVAR EL MÓDULO <a href="https://www.drupal.org/project/components" target="_blank">COMPONENTES!</a> DE DRUPAL:</h3> <pre> lando composer require drupal/components</pre> <pre> lando drush en components</pre> </li> <li> <h3>DESCARGAR Y ACTIVAR EL THEME RADIX (PARA TENER DISPONIBLE SUS COMANDOS)</h3> <pre> lando composer require drupal/radix</pre> <pre> lando drush then radix</pre> </li> <li> <h3>GENERAR EL SUBTEMA:</h3> <p>Para esto, necesitaremos especificar la ubicación de nuestro tema Radix, dentro del comando drush, o nos devolverá un error de "comandos no disponibles".<br /> Si hemos instalado Drupal usando Composer, la ubicación será "web/themes/contrib"; el comando a utilizar es el siguiente:</p> <pre> lando drush --include="web/themes/contrib/radix" radix:create SUBTHEME_NAME</pre> </li> <li> <h3>ACTIVAR Y CONFIGURAR EL SUBTEMA:</h3> <p>Ahora que se ha generado el nuevo Subtema, podremos activarlo como predeterminado y realizar algunos cambios de configuración, a nivel de la interfaz y ejecutar algunos comandos por consola para que terminen de descargarse y activarse otros elementos del Subtema.</p> </li> </ol><h2><strong>   CONFIGURACIONES EXTRAS EN EL SUBTEMA</strong></h2> <p><strong>     </strong>Una vez hayamos activado nuestro tema, notaremos que todavía faltan algunos ajustes, para que todo se vea aproximadamente parecido a lo que esperamos. A continuación te detallo estos últimos pasos necesarios para poner correctamente en marcha tu nuevo subtema:</p> <ol><li><strong>Redistribución de Bloques</strong><br /> Siempre que instalamos un nuevo Tema o Subtema, Drupal cambia las posiciones de sus bloques, adaptándolos a la configuración del tema, por lo tanto, si queremos que todo funcione correctamente, tendremos que dirigirnos a la página de administración de los bloques, en la url "estructura/bloques" y recolocar todos los elementos, dentro de las zonas correspondientes: <p></p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 65.69%;" data-ratio="65.69" data-b-token="b-d719281c4a0" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img data-entity-uuid="13f32f9f-a4c6-48d4-9175-3cdf2f171488" loading="lazy" alt="Radix Base Theme Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony" decoding="async" class="media__element b-lazy b-filter img-fluid" data-src="/sites/default/files/styles/max_1300x1300/public/inline-images/bloques2.png?itok=gaqW44MN" src="data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%201%201'%2F%3E" width="650" height="427" typeof="foaf:Image" /></div></div> <p> </p> </li> <li><strong>Deshabilitar la combinación de archivos CSS y JS</strong><br /> Durante el proceso de desarrollo, siempre se recomienda que desativemos la opción que nos viene por defecto en Drupal, que combina los archivos CSS y JS, cuyo propósito es reducir el tiempo de carga de nuestra web y así incrementar su velocidad.<br /> Para encontrar esta opción, nos iremos a la url "/admin/config/development/performance", y desmarcaremos ambos check, al menos mientras estemos en nuestro entorno de desarrollo. <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 61.54%;" data-ratio="61.54" data-b-token="b-d10857aa8d7" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img data-entity-uuid="ac692703-7744-4dbd-b932-617dd771685a" loading="lazy" alt="Radix Base Theme Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony" decoding="async" class="media__element b-lazy b-filter img-fluid" data-src="/sites/default/files/styles/max_1300x1300/public/inline-images/no_combinar.png?itok=K5TIhujv" src="data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%201%201'%2F%3E" width="650" height="400" typeof="foaf:Image" /></div></div> <p> </p> </li> <li><strong>Configuración del BrowserSync</strong><br /> Esta opción nos permitirá comprobar en tiempo real, todos los cambios que vayamos añadiendo a nuestro tema, en lo que se respecta a los estilos css.<br /> Para habilitar esta opción, tendremos que editar el archivo proxy.js, dentro de "subtema/config". <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 33.69%;" data-ratio="33.69" data-b-token="b-77082339f01" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img data-entity-uuid="ed964bc4-13b1-46b6-9230-b8756a540aa2" loading="lazy" alt="Radix Base Theme Drupal | www.drupaladicto.com - Consultor especializado en drupal y symfony" decoding="async" class="media__element b-lazy b-filter img-fluid" data-src="/sites/default/files/styles/max_1300x1300/public/inline-images/browser_sync.png?itok=5bPgFQBE" src="data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%201%201'%2F%3E" width="650" height="219" typeof="foaf:Image" /></div></div> <p>Una vez actualizada la variable, dentro del archivo proxy.js, ejecutaremos el siguiente comando para que empiece a funcionar el proceso de sincronización:</p> <pre> npm run watch </pre> <p></p> </li> </ol></div> </div> </div> </div> </div> </div> <div class="field field--name-field-categoria-top field--type-entity-reference field--label-above"> <div class="field__label">Categoria</div> <div class="field__items"> <div class="field__item"><a href="/categoria/template" hreflang="es">template</a></div> <div class="field__item"><a href="/categoria/twig-template" hreflang="es">twig template</a></div> <div class="field__item"><a href="/categoria/subtema" hreflang="es">subtema</a></div> <div class="field__item"><a href="/categoria/subtheme" hreflang="es">subtheme</a></div> <div class="field__item"><a href="/categoria/apariencia" hreflang="es">apariencia</a></div> <div class="field__item"><a href="/categoria/tema-personalizado" hreflang="es">tema personalizado</a></div> </div> </div> Mon, 06 Mar 2023 21:30:44 +0000 webmaster 199 at https://drupaladicto.com Activar tema por defecto utilizando Consola y Drush en Drupal https://drupaladicto.com/snippet/activar-tema-por-defecto-utilizando-consola-y-drush-en-drupal <span class="field field--name-title field--type-string field--label-hidden">Activar tema por defecto utilizando Consola y Drush en Drupal</span> <div class="clearfix text-formatted field field--name-field-snippet-descripcion field--type-text-long field--label-above"> <div class="field__label">Descripción</div> <div class="field__item"><p>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.</p> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/luis-alberto-mejia" typeof="schema:Person" property="schema:name" datatype="">webmaster</span></span> <span class="field field--name-created field--type-created field--label-hidden">Mié, 01/03/2023 - 10:13</span> <div class="clearfix text-formatted field field--name-field-instrucciones field--type-text-long field--label-above"> <div class="field__label">Instrucciones</div> <div class="field__item"><p>Para activar un tema usando la consola y Drush, sigue estos pasos:</p> <ol><li>Utilizando la consola, colócate en la carpeta principal de tu proyecto Drupal.</li> <li>Descarga el tema que quieres utilizar por defecto</li> <li>Ejectua el comando de activación y configuración para que sea el tema por defecto.</li> </ol></div> </div> <div class="clearfix text-formatted field field--name-field-codigo field--type-text-long field--label-hidden field__item"><pre> drush config-set system.theme default Subtheme_name -y</pre> </div> <div class="field field--name-field-snippet-paginador field--type-image field--label-above"> <div class="field__label">Paginador</div> <div class="field__item"> <img src="/sites/default/files/imagenes/snippets/snippet-pager_101.png" width="100" height="100" alt="Snippet | www.drupaladicto.com - Consultores especializados en Drupal y Symfony" title="Snippet | www.drupaladicto.com - Consultores especializados en Drupal y Symfony" loading="lazy" typeof="foaf:Image" class="img-fluid" /> </div> </div> <div class="field field--name-field-categoria-snippet field--type-entity-reference field--label-above"> <div class="field__label">Categoría</div> <div class="field__items"> <div class="field__item"><a href="/categoria/subtema" hreflang="es">subtema</a></div> <div class="field__item"><a href="/categoria/tema-personalizado" hreflang="es">tema personalizado</a></div> <div class="field__item"><a href="/categoria/plantillas" hreflang="es">plantillas</a></div> <div class="field__item"><a href="/categoria/twig-template" hreflang="es">twig template</a></div> <div class="field__item"><a href="/categoria/template" hreflang="es">template</a></div> <div class="field__item"><a href="/categoria/drush" hreflang="es">drush</a></div> <div class="field__item"><a href="/categoria/consola" hreflang="es">consola</a></div> <div class="field__item"><a href="/categoria/console" hreflang="es">console</a></div> </div> </div> <div class="field field--name-field-portada-snippet field--type-entity-reference field--label-above"> <div class="field__label">Portada</div> <div class="field__item"><article class="media media--type-imagen media--view-mode-default"> </article> </div> </div> Wed, 01 Mar 2023 09:13:58 +0000 webmaster 126 at https://drupaladicto.com Crear tema personalizado Drupal 8/9 con Bootstrap Barrio https://drupaladicto.com/snippet/crear-tema-personalizado-drupal-89-con-bootstrap-barrio <span class="field field--name-title field--type-string field--label-hidden">Crear tema personalizado Drupal 8/9 con Bootstrap Barrio</span> <div class="clearfix text-formatted field field--name-field-snippet-descripcion field--type-text-long field--label-above"> <div class="field__label">Descripción</div> <div class="field__item"><p>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.</p> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/luis-alberto-mejia" typeof="schema:Person" property="schema:name" datatype="">webmaster</span></span> <span class="field field--name-created field--type-created field--label-hidden">Mié, 01/03/2023 - 08:50</span> <div class="clearfix text-formatted field field--name-field-instrucciones field--type-text-long field--label-above"> <div class="field__label">Instrucciones</div> <div class="field__item"><p>Para crear un tema personalizado en Drupal 8/9 usando Bootstrap Barrio:</p> <ol><li>Descarga Bootrap Barrio usando Composer <br /><br /> $ composer require drupal/bootstrap_barrio<br />  </li> <li>Crea una carpeta en Themes/custom para poner allí tu theme personalizado<br />  </li> <li>Dentro de Themes/Custom crear un archivo llamado "<code>create_subtheme.sh"</code>, luego <strong>copia y pega dentro</strong> los datos de la ventana código que tienes más abajo cambiando la línea señalada *bootstrap_barrio_subtheme.* con el nombre del subtheme que vas a crear<br />  </li> <li>Abre la consola y colócate dentro de la carpeta Theme/custom y ejecuta el siguiente comando<br /><code>./create_subtheme.sh</code><br />  </li> <li>Actualiza el nombre del Subtheme recién creado en el archivo ".info.yml"</li> </ol><p>      <a href="https://www.youtube.com/watch?v=X935h4885jw&amp;feature=youtu.be">Ver video de explicación</a></p> <p>    <a href="https://www.drupal.org/docs/8/themes/barrio-bootstrap-4-drupal-89-theme/bootstrap-barrio-installation/creating-a-custom"> Visita la página oficial del módulo</a></p> </div> </div> <div class="clearfix text-formatted field field--name-field-codigo field--type-text-long field--label-hidden field__item"><pre> <code>cd themes/custom export CUSTOM_BARRIO=custom_barrio # change this to your custom theme_name cp -r ../contrib/bootstrap_barrio/subtheme $CUSTOM_BARRIO cd $CUSTOM_BARRIO for file in *bootstrap_barrio_subtheme.*; do mv $file ${file//bootstrap_barrio_subtheme/$CUSTOM_BARRIO}; done for file in config/*/*bootstrap_barrio_subtheme.*; do mv $file ${file//bootstrap_barrio_subtheme/$CUSTOM_BARRIO}; done mv {_,}$CUSTOM_BARRIO.theme mv {_,}$CUSTOM_BARRIO.layouts.yml grep -Rl bootstrap_barrio_subtheme .|xargs sed -i '' -e "s/bootstrap_barrio_subtheme/$CUSTOM_BARRIO/"</code></pre> </div> <div class="field field--name-field-snippet-paginador field--type-image field--label-above"> <div class="field__label">Paginador</div> <div class="field__item"> <img src="/sites/default/files/imagenes/snippets/snippet-pager_59.png" width="100" height="100" alt="Snippet | www.drupaladicto.com - Consultores especializados en Drupal y Symfony" title="Snippet | www.drupaladicto.com - Consultores especializados en Drupal y Symfony" loading="lazy" typeof="foaf:Image" class="img-fluid" /> </div> </div> <div class="field field--name-field-categoria-snippet field--type-entity-reference field--label-above"> <div class="field__label">Categoría</div> <div class="field__items"> <div class="field__item"><a href="/categoria/subtheme" hreflang="es">subtheme</a></div> <div class="field__item"><a href="/categoria/custom-theme" hreflang="es">custom theme</a></div> <div class="field__item"><a href="/categoria/tema-personalizado" hreflang="es">tema personalizado</a></div> <div class="field__item"><a href="/categoria/subtema" hreflang="es">subtema</a></div> <div class="field__item"><a href="/categoria/bootstrap" hreflang="es">bootstrap</a></div> <div class="field__item"><a href="/categoria/bootstrap-barrio" hreflang="es">bootstrap barrio</a></div> </div> </div> <div class="field field--name-field-portada-snippet field--type-entity-reference field--label-above"> <div class="field__label">Portada</div> <div class="field__item"><article class="media media--type-imagen media--view-mode-default"> </article> </div> </div> Wed, 01 Mar 2023 07:50:09 +0000 webmaster 84 at https://drupaladicto.com Imagen Background usando Views Template https://drupaladicto.com/snippet/imagen-background-usando-views-template <span class="field field--name-title field--type-string field--label-hidden">Imagen Background usando Views Template</span> <div class="clearfix text-formatted field field--name-field-snippet-descripcion field--type-text-long field--label-above"> <div class="field__label">Descripción</div> <div class="field__item"><p>Este código permite imprimir una imagen de fondo utilizando vistas y plantillas mediante la declaración de una variable.</p> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/luis-alberto-mejia" typeof="schema:Person" property="schema:name" datatype="">webmaster</span></span> <span class="field field--name-created field--type-created field--label-hidden">Mar, 28/02/2023 - 20:58</span> <div class="clearfix text-formatted field field--name-field-instrucciones field--type-text-long field--label-above"> <div class="field__label">Instrucciones</div> <div class="field__item"><ol><li>Añadimos el campo imagen a nuestro contenido antes de crear la vista.<br />  </li> <li>Creamos una vista del tipo "Fields o Campos" y añadimos los campos que deseamos mostrar.<br />  </li> <li>Copiamos la plantilla "views-view-fields.html.twig" desde el módulo views y lo copiamos en las plantillas de nuestro tema personalizado<br />  </li> <li>Creamos la estructura con los divs donde queremos poner nuestra imagen de fondo<br />  </li> <li>Configuramos la vista para que muestre la URL de la imagen<br />  </li> <li>En el template o plantilla declaramos una variable con nuestro campo imagen y luego podremos imprimir nuestro background.</li> </ol></div> </div> <div class="clearfix text-formatted field field--name-field-codigo field--type-text-long field--label-hidden field__item"><pre> {# Declaramos una variable y le asignamos el valor del campo sin etiquietas adicioales #} <code>{% set background_image = fields.yourimage_field.content|striptags|trim %}</code> <code>&lt;div style="background-image:url({{ background_image }});"&gt;</code> <code>&lt;p&gt;Nuestro contenido&lt;/&gt; &lt;/div&gt;</code></pre> </div> <div class="field field--name-field-snippet-paginador field--type-image field--label-above"> <div class="field__label">Paginador</div> <div class="field__item"> <img src="/sites/default/files/imagenes/snippets/snippet-pager_38.png" width="100" height="100" alt="Snippet | www.drupaladicto.com - Consultores especializados en Drupal y Symfony" title="Snippet | www.drupaladicto.com - Consultores especializados en Drupal y Symfony" loading="lazy" typeof="foaf:Image" class="img-fluid" /> </div> </div> <div class="field field--name-field-categoria-snippet field--type-entity-reference field--label-above"> <div class="field__label">Categoría</div> <div class="field__items"> <div class="field__item"><a href="/categoria/imagen" hreflang="es">imagen</a></div> <div class="field__item"><a href="/categoria/imagenes" hreflang="es">imágenes</a></div> <div class="field__item"><a href="/categoria/background" hreflang="es">background</a></div> <div class="field__item"><a href="/categoria/header" hreflang="es">header</a></div> <div class="field__item"><a href="/categoria/cabecera" hreflang="es">cabecera</a></div> <div class="field__item"><a href="/categoria/fondo" hreflang="es">fondo</a></div> <div class="field__item"><a href="/categoria/template" hreflang="es">template</a></div> <div class="field__item"><a href="/categoria/tema-personalizado" hreflang="es">tema personalizado</a></div> <div class="field__item"><a href="/categoria/twig" hreflang="es">twig</a></div> <div class="field__item"><a href="/categoria/twig-template" hreflang="es">twig template</a></div> </div> </div> <div class="field field--name-field-portada-snippet field--type-entity-reference field--label-above"> <div class="field__label">Portada</div> <div class="field__item"><article class="media media--type-imagen media--view-mode-default"> </article> </div> </div> Tue, 28 Feb 2023 19:58:09 +0000 webmaster 63 at https://drupaladicto.com Mostrar bloque vista usando Preprocess Function Drupal 8/9 https://drupaladicto.com/snippet/mostrar-bloque-vista-usando-preprocess-function-drupal-89 <span class="field field--name-title field--type-string field--label-hidden">Mostrar bloque vista usando Preprocess Function Drupal 8/9</span> <div class="clearfix text-formatted field field--name-field-snippet-descripcion field--type-text-long field--label-above"> <div class="field__label">Descripción</div> <div class="field__item"><p>Este código te permitirá mostrar una vista tipo bloque en un nodo o paragraphs</p> <p>Para Nodos:<br /> /** * Implements hook_preprocess_node() for node.html.twig. */<br /> function TUSUBTHEME_preprocess_node(array &amp;$variables) {<br />   $variables['nombre_variable_para_mostrar'] = views_embed_view('nombre_maquina', 'nombre_vista_dentro');</p> <p>}</p> <p>Para Paragraphs</p> <p>/* Implement hook_preprocess_paragraph() */<br /> function wct_oct2020_preprocess_paragraph(&amp;$variables) {<br />   $variables['nombre_variable_para_mostrar'] = views_embed_view('nombre_maquina', 'nombre_vista_dentro');</p> <p>}</p> </div> </div> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/luis-alberto-mejia" typeof="schema:Person" property="schema:name" datatype="">webmaster</span></span> <span class="field field--name-created field--type-created field--label-hidden">Mar, 28/02/2023 - 20:41</span> <div class="clearfix text-formatted field field--name-field-instrucciones field--type-text-long field--label-above"> <div class="field__label">Instrucciones</div> <div class="field__item"><p>Para mostrar una vista tipo bloque en usando Preprocess Function:</p> <ol><li>Abre el archivo TUSUBTHEME.theme para añadir las Preprocess function según necesites, copia el código que está debajo dependiendo de si la usarás para presentarla en un nodo o en un elemento Paragraphs.<br />  </li> <li>Crea una plantilla para el tipo de contenido donde quieres mostrar la vista, conoce el nombre para la plantilla activando el modo depurador.<br />  </li> <li>Añade la el nombre de la variable en la plantilla, en el lugar donde quieres imprimir la vista:<br /><br /> {{ nombre_variable_para_mostrar }}<br />  </li> <li>Refrescar cache</li> </ol></div> </div> <div class="clearfix text-formatted field field--name-field-codigo field--type-text-long field--label-hidden field__item"><pre> /** * Implements hook_preprocess_node() for node.html.twig. */ function TUSUBTHEME_preprocess_node(array &amp;$variables) { $variables['nombre_variable_para_mostrar'] = views_embed_view('nombre_maquina', 'nombre_vista_dentro'); } /* Implement hook_preprocess_paragraph() */ function wct_oct2020_preprocess_paragraph(&amp;$variables) { $variables['nombre_variable_para_mostrar'] = views_embed_view('nombre_maquina', 'nombre_vista_dentro'); }</pre> </div> <div class="field field--name-field-snippet-paginador field--type-image field--label-above"> <div class="field__label">Paginador</div> <div class="field__item"> <img src="/sites/default/files/imagenes/snippets/snippet-pager_27.png" width="100" height="100" alt="Snippet | www.drupaladicto.com - Consultores especializados en Drupal y Symfony" title="Snippet | www.drupaladicto.com - Consultores especializados en Drupal y Symfony" loading="lazy" typeof="foaf:Image" class="img-fluid" /> </div> </div> <div class="field field--name-field-categoria-snippet field--type-entity-reference field--label-above"> <div class="field__label">Categoría</div> <div class="field__items"> <div class="field__item"><a href="/categoria/block" hreflang="es">block</a></div> <div class="field__item"><a href="/categoria/custom-block" hreflang="es">custom block</a></div> <div class="field__item"><a href="/categoria/bloque-personalizado" hreflang="es">bloque personalizado</a></div> <div class="field__item"><a href="/categoria/hook" hreflang="es">hook</a></div> <div class="field__item"><a href="/categoria/preprocess-function" hreflang="es">preprocess function</a></div> <div class="field__item"><a href="/categoria/subtheme" hreflang="es">subtheme</a></div> <div class="field__item"><a href="/categoria/subtema" hreflang="es">subtema</a></div> <div class="field__item"><a href="/categoria/tema-personalizado" hreflang="es">tema personalizado</a></div> <div class="field__item"><a href="/categoria/alter" hreflang="es">alter</a></div> <div class="field__item"><a href="/categoria/hooks" hreflang="es">hooks</a></div> </div> </div> <div class="field field--name-field-portada-snippet field--type-entity-reference field--label-above"> <div class="field__label">Portada</div> <div class="field__item"><article class="media media--type-imagen media--view-mode-default"> </article> </div> </div> Tue, 28 Feb 2023 19:41:28 +0000 webmaster 52 at https://drupaladicto.com Habilitar node ID dentro de la etiqueta <body> Drupal https://drupaladicto.com/snippet/habilitar-node-id-dentro-de-la-etiqueta-drupal <span class="field field--name-title field--type-string field--label-hidden">Habilitar node ID dentro de la etiqueta &lt;body&gt; Drupal</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/luis-alberto-mejia" typeof="schema:Person" property="schema:name" datatype="">webmaster</span></span> <span class="field field--name-created field--type-created field--label-hidden">Mar, 28/02/2023 - 20:21</span> <div class="clearfix text-formatted field field--name-field-instrucciones field--type-text-long field--label-above"> <div class="field__label">Instrucciones</div> <div class="field__item"><h3>PARA HABILITAR LAS CLASES DEL NODE DENTRO DE LA ETIQUETA &lt;BODY&gt;, SIGUE LOS SIGUIENTES PASOS:</h3> <ol><li>Abrir el archivo <strong>.THEME</strong> dentro de tu tema personalizado y agregar las siguientes líneas, actualizando el nombre correspondiente al de tu <strong>SUBTHEME</strong><br />   <p></p> <p> </p> </li> <li>Borra el caché de Drupal.Puedes hacerlo por medio de la interfaz o ejecutando el comando: <pre> drush cr</pre> </li> <li>Confirmar que ahora puedes ver el id dentro de la etiqueta <strong>&lt;body&gt;</strong> de tus contenidos:<br />   <p></p> </li> </ol></div> </div> <div class="clearfix text-formatted field field--name-field-codigo field--type-text-long field--label-hidden field__item"><pre> /** * Implements hook_preprocess_HOOK(). * */ function SUBTHEME_preprocess_html(&amp;$variables) { $path = \Drupal::service('path.current')-&gt;getPath(); $path_args = explode('/', $path); if (isset($path_args[1]) &amp;&amp; isset($path_args[2]) &amp;&amp; ($path_args[1] == 'node') &amp;&amp; (is_numeric($path_args[2]))) { $variables['attributes']['class'][] = 'page-node-' . $path_args[2]; } }</pre> </div> <div class="field field--name-field-snippet-paginador field--type-image field--label-above"> <div class="field__label">Paginador</div> <div class="field__item"> <img src="/sites/default/files/imagenes/snippets/snippet-pager_16.png" width="100" height="100" alt="Snippet | www.drupaladicto.com - Consultores especializados en Drupal y Symfony" title="Snippet | www.drupaladicto.com - Consultores especializados en Drupal y Symfony" loading="lazy" typeof="foaf:Image" class="img-fluid" /> </div> </div> <div class="field field--name-field-categoria-snippet field--type-entity-reference field--label-above"> <div class="field__label">Categoría</div> <div class="field__items"> <div class="field__item"><a href="/categoria/custom-theme" hreflang="es">custom theme</a></div> <div class="field__item"><a href="/categoria/tema-personalizado" hreflang="es">tema personalizado</a></div> <div class="field__item"><a href="/categoria/subtheme" hreflang="es">subtheme</a></div> <div class="field__item"><a href="/categoria/subtema" hreflang="es">subtema</a></div> <div class="field__item"><a href="/categoria/frontend" hreflang="es">frontend</a></div> <div class="field__item"><a href="/categoria/diseno" hreflang="es">diseño</a></div> <div class="field__item"><a href="/categoria/maquetacion" hreflang="es">maquetación</a></div> <div class="field__item"><a href="/categoria/plantillas" hreflang="es">plantillas</a></div> <div class="field__item"><a href="/categoria/twig" hreflang="es">twig</a></div> <div class="field__item"><a href="/categoria/twig-template" hreflang="es">twig template</a></div> </div> </div> <div class="field field--name-field-portada-snippet field--type-entity-reference field--label-above"> <div class="field__label">Portada</div> <div class="field__item"><article class="media media--type-imagen media--view-mode-default"> </article> </div> </div> Tue, 28 Feb 2023 19:21:39 +0000 webmaster 41 at https://drupaladicto.com Cómo Agregar classes a tu plantilla Twig en Drupal 9 https://drupaladicto.com/actualidad/como-agregar-classes-tu-plantilla-twig-en-drupal-9 <span class="field field--name-title field--type-string field--label-hidden">Cómo Agregar classes a tu plantilla Twig en Drupal 9</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/luis-alberto-mejia" typeof="schema:Person" property="schema:name" datatype="">webmaster</span></span> <span class="field field--name-created field--type-created field--label-hidden">Dom, 26/02/2023 - 16:40</span> <div class="field field--name-field-contenidos-post field--type-entity-reference-revisions field--label-visually_hidden"> <div class="field__label visually-hidden">Contenidos</div> <div class="field__items"> <div class="field__item"> <style>#video-only-1007 .play-btn:hover::after { border-left: 15px solid #1fd7d9; transform: scale(20); border-left: 15px solid #fff; } #video-only-1007 .play-btn::before { border: 5px solid #1fd7d9; } #video-only-1007 .play-btn { background: radial-gradient(#1fd7d9 50%, rgba(66, 109, 202, 0.4) 52%); }</style> <div class="paragraph paragraph--type--video-only paragraph--view-mode--default" id="vol-1007"> <section id="video-only-1007" class="about area-padding video-block-wrapper"> <div class="col video-box"> <div class="portada"> <img src="/sites/default/files/styles/diapositiva_1200x650/public/2023-07/portada-post.jpg?itok=kSR2Q5ei" class="img-fluid" alt=""> <div class="field field--name-vo-youtube-video field--type-entity-reference field--label-visually_hidden"> <div class="field__label visually-hidden">Video de Youtube</div> <div class="field__item"><article class="media media--type-remote-video media--view-mode-diapositiva-1200x650"> <div class="field field--name-field-media-oembed-video field--type-string field--label-visually_hidden"> <div class="field__label visually-hidden">URL de Video remoto</div> <div class="field__item"><div class="modal micromodal-slide" id="modal-media-718-0-field-media-oembed-video" aria-hidden="true"> <div class="modal__overlay" tabindex="-1" data-micromodal-close> <div class="modal__container" role="dialog" aria-modal="true" aria-labelledby="modal-media-718-0-field-media-oembed-video-content"> <a class="modal__btn" data-micromodal-close aria-label="Close this dialog window">X</a> <main class="modal__content" id="modal-media-718-0-field-media-oembed-video-content"> <div class="videoWrapper"><iframe src="/media/oembed?url=https%3A//youtu.be/HXUdVGXp9ws&amp;max_width=0&amp;max_height=0&amp;hash=jxU47sH0sD25To-fX0YuOOkDOGA_P0XleN54OzGx5AY" frameborder="0" allowtransparency="" class="media-oembed-content" title="Time Value of Money"></iframe></div> </main> </div> </div> </div> <div><a class="myButton" data-micromodal-trigger="modal-media-718-0-field-media-oembed-video"><span class="btn play-btn">.</span></a></div> </div> </div> </article> </div> </div> </div> </div> </section> </div> </div> <div class="field__item"> <div class="paragraph paragraph--type--text-only paragraph--view-mode--default" id="txonly-1124" style="background-color: ;border: solid px;border-color: #096ba0;border-radius: 5px;padding: 10px;"> <div class="clearfix text-formatted field field--name-to-text field--type-text-long field--label-visually_hidden"> <div class="field__label visually-hidden">Texto</div> <div class="field__item"><p>Con la incorporación de las plantillas Twig a partir de Drupal 8, se facilita notablemente el trabajo de maquetación con CSS, teniendo la oportunidad de añadir o eliminar clases de forma dinámica o algunas específicas para ciertos contenidos o campos, dependiendo de nuestras necesidades. Por defecto, la plantilla <strong>node.html.twig</strong>, incluye clases específicas para cada tipo de contenido, facilitando bastante el trabajo del maquetador.</p> <p>Ahora voy contarte algunas formas disponibles para que puedas trabajar con las clases, en tus plantillas de Drupal 8 o 9 y que puedas explorar las nuevas opciones con las que podrías reducir posibles dolores de cabeza, al momento de implementar algunas soluciones, que antes eran mucho más complejas de aplicar.</p> <h2>AÑADIR UNA CLASE SIMPLE</h2> <p>Imagina el caso de tener un campo tipo Select en que quieras cambiar el color, dependiendo de si el usuario ha elegido un valor u otro o que necesitas una clase específica para diferenciar entre dos campos que se mostrará en varios contenidos, pero no tienes una plantilla específica para el tipo de contenido en cuestión. Estos son sólo dos ejemplos en los que podrías necesitar de añadir una clase simple.</p> <p>Para esto, sólo tendrás que pasar como argumento el nombre de la clase en la función attributes.addClass().</p> <pre> &lt;div {{ attributes.addClass('classname') }}&gt; &lt;/div&gt; </pre> <h2>AÑADIENDO VARIAS CLASES AL MISMO TIEMPO</h2> <p>Otro caso con el que nos podemos encontrar, es el de añadir múltiples clases a un campo en concreto y remover alguna de ellas dependiendo del resultado que queremos obtener, por ejemplo si queremos aplicar algún efecto con javascript.</p> <p>En este caso, crearemos un array con los nombres de todas las clases que vamos a utilizar, para crear un Array en Twig escribiremos la etiqueta "set" y luego el nombre del array, si abres cualquiera de las plantillas de Drupal, veras esta clase de estructura justo al final de los comentarios.</p> <pre> {% set classes = [ 'content', 'node', 'custom', ] %} </pre> <p>Para añadir estas clases al campo, lo que tendremos que agregar es el nombre del array como argumento en la función attributes.addClass()</p> <pre> &lt;div {{ attributes.addClass(classes) }}&gt; &lt;/div&gt; </pre> <p>Siempre que se añadan clases a un elemento de cualquiera de las formas anteriores, estas se fusionarán con las demás clases existentes.</p> <h2>ELIMINAR CLASES DINÁMICAMENTE</h2> <p>Como mencionamos al principio, puede que además de añadir clases, nos haga falta eliminar una o varias existentes para obtener un resultado específico. La forma en que podemos hacerlo en Twig es añadiendo el nombre de la clase a la función attributes.removeClass().</p> <pre> &lt;div {{ attributes.addClass(classes).removeClass('node') }}&gt; &lt;/div&gt; </pre> <h2> DOS EJEMPLOS REALES QUE PODRÁS EXPLORAR EN TU INSTALACIÓN DE DRUPAL 9</h2> <p>Si abres, en tu editor de texto favorito, la carpeta donde se guardan las plantillas del tema Classy "core/themes/classy/templates", verás dos claros ejemplos sobre lo que explicábamos al principio de este artículo.</p> <h3>EJEMPLO DE CLASE SIMPLE</h3> <p>Si abres la plantilla ubicada en "field/<strong>time.html.twig</strong>", verás que se ha añadido la clase datetime en el elemento time</p> <pre> &lt;time{{ attributes.addClass('datetime') }}&gt;&lt;/time&gt; </pre> <h3>EJEMPLO DE MÚLTIPLES CLASES</h3> <p>Si abres la plantilla ubicada en "layout/<strong>region.html.twig</strong>", podrás ver un ejemplo real de cómo añadir varias clases utilizando un array en Twig.</p> <pre> {% set classes = [ 'region', 'region-' ~ region|clean_class, ] %} </pre> <p>Como habrás notado, en este último ejemplo exites dos clases, una simple llamada "region", per en la segunda vemos varios elementos adicionales:&gt;</p> <ul><li>'region-': es una variables simple tipo sting<br />  </li> <li>~ este es un operador de Twig, que sirve para concatenar strings<br />  </li> <li>region: la variable region. Ésta será reemplazada por la región actual(ej.: block)<br />  </li> <li>|: Un pipe que separará las variables (region) de un filtro (clean_class)<br />  </li> <li>clean_class: un filtro que, en este caso removerá los caracteres no validos de las clases HTML</li> </ul><p>Si tienes un block en la región Header, entonces, según el código anterior, se añadirrá la clase llamada region-header.</p> <pre> &lt;div class="region region-header"&gt; </pre> <h3>CLASE NODE</h3> <p>El último de los ejemplos es la clase que se añade al elemento artículo en la plantilla node.html.twig, varás otro ejemplo de cómo añadir clases múltiples en la plantilla ubicada en "content/<strong>node.html.twig</strong>"</p> <pre> {% set classes = [ 'node', 'node--type-' ~ node.bundle|clean_class, node.isPromoted() ? 'node--promoted', node.isSticky() ? 'node--sticky', not node.isPublished() ? 'node--unpublished', view_mode ? 'node--view-mode-' ~ view_mode|clean_class, ] %} </pre> <p>Como mencioné al comenzar este artículo, la plantilla node.html.twig añade dinámicamente clases específicas para cada tipo de contenido, facilitando la aplicación de estilos notablemente, este comportamiento está definido en la línea:</p> <pre> 'node--type-' ~ node.bundle|clean_class, </pre> <p>Un tipo de contenido es un tipo de paquete en Drupal. Entonces node.bundle devolverá el nombre de la máquina del tipo de contenido. Al igual que en el ejemplo de campo, esto se pasa a través del filtro clean_class.</p> <p>Una muestra clara de este comportamiento, podemos comprobarlo si estamos viendo un nodo del tipo artículo, si ejecutamos el explorador del navegador con la tecla F12, e inspeccionamos el código html, veremos que la clase añadida al artículo es:</p> <pre> node--type-article </pre> <p>En el Array de clases anterior, también podemos ver una serie de condiciones que verifican si algo existe antes de añadir las clases:</p> <pre> node.isPromoted() ? 'node--promoted', </pre> <p>Esta línea comprueba si hemos dejado seleccionada la opción que nos viene por defecto, para promocionar el contenido en la página principal, y si es el caso, entonces añade la clase node--promoted</p> <pre> not node.isPublished() ? 'node--unpublished', </pre> <p>Esta línea comprueba si nuestro contenido está o no publicado, si no es así entonces le añade la clase node--unpublished</p> <p>Echa un vistazo al video para que veas ejemplos de cómo trabajar con twig</p> </div> </div> </div> </div> </div> </div> <div class="field field--name-field-categoria-post field--type-entity-reference field--label-above"> <div class="field__label">Categoría</div> <div class="field__items"> <div class="field__item"><a href="/categoria/twig" hreflang="es">twig</a></div> <div class="field__item"><a href="/categoria/twig-template" hreflang="es">twig template</a></div> <div class="field__item"><a href="/categoria/plantillas" hreflang="es">plantillas</a></div> <div class="field__item"><a href="/categoria/custom-theme" hreflang="es">custom theme</a></div> <div class="field__item"><a href="/categoria/tema-personalizado" hreflang="es">tema personalizado</a></div> <div class="field__item"><a href="/categoria/subtheme" hreflang="es">subtheme</a></div> </div> </div> Sun, 26 Feb 2023 15:40:38 +0000 webmaster 22 at https://drupaladicto.com Cómo convertir cualquier plantilla en una web Drupal 9 https://drupaladicto.com/actualidad/como-convertir-cualquier-plantilla-en-una-web-drupal-9 <span class="field field--name-title field--type-string field--label-hidden">Cómo convertir cualquier plantilla en una web Drupal 9</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" about="/luis-alberto-mejia" typeof="schema:Person" property="schema:name" datatype="">webmaster</span></span> <span class="field field--name-created field--type-created field--label-hidden">Dom, 26/02/2023 - 16:11</span> <div class="field field--name-field-contenidos-post field--type-entity-reference-revisions field--label-visually_hidden"> <div class="field__label visually-hidden">Contenidos</div> <div class="field__items"> <div class="field__item"> <div class="paragraph paragraph--type--text-only paragraph--view-mode--default" id="txonly-1126" style="background-color: ;border: solid px;border-color: #096ba0;border-radius: 5px;padding: 10px;"> <div class="clearfix text-formatted field field--name-to-text field--type-text-long field--label-visually_hidden"> <div class="field__label visually-hidden">Texto</div> <div class="field__item"><p>Aunque casi siempre, crear una web desde cero podría convertirse en algo mucho más complicado de lo que nos imaginábamos, en realidad, uno de los mayores inconvenientes con el que solemos encontrarnos, es la falta de documentación relacionada sobre nuestras opciones, que nos sirva de introducción o nos facilite el planteamiento del proyecto, para tomar la mejor decisión antes de empezarlo o para tener una idea aproximada del tiempo, herramientas, pros y contras con el que posiblemente nos encontremos al hacerlo.</p> <p>En mi opinión, Drupal debería ser la primera opción a considerar para realizar cualquier tipo de desarrollo, tanto si se trata de una web sencilla o compleja, como de una aplicación móvil; ya que, entre otras cosas, realizar una instalación de <a href="/drupal-8-paso-paso-en-espanol" target="_blank">Drupal 8</a> o <a href="/drupal-9-paso-paso-en-espanol">Drupal 9</a>, es bastante sencillo, y una vez lo pongamos en marcha, tendremos una interfaz fácil e intuitiva <a href="/actualidad/gestionar-usuarios-roles-y-permisos-en-drupal">gestión de usuarios y permisos</a>, o la posibilidad de crear un diseño totalmente personalizado con Bootstrap <a href="/curso/themes-y-subthemes" target="_blank">Haz clic aquí</a>. </p> <p>Hoy te quiero enseñar cómo crear una web completamente funcional con Drupal 9, partiendo de una Plantilla gratuita desarrollada con Boostrap <a href="https://bootstrapmade.com/bootstrap-business-templates/">Haz clic aquí</a> y algunos módulos adicionales que facilitarán todavía más el proceso de creación de tu proyecto, como son <br /><a href="/curso/creacion-de-contenidos-con-paragraphs" target="_blank">Paragraphs</a><br /><br /><a href="https://www.drupal.org/project/pathauto" target="_blank">Pathauto</a><br /><br /><a href="/curso/backup-and-migrate" target="_blank">Backup and Migrate</a> <br /><br /><a href="https://www.drupal.org/project/admin_toolbar" target="_blank">Admin Toolbar</a></p> <h3>Requisitos</h3> <p><strong>Paso 1 Instalación del Servidor Local:</strong><br /><br />      Lo primero que necesitarás es un servidor con Apache, Php, Mysql donde puedas instalar Drupal 9, en nuestro caso hemos decidido utilizar un Servidor Docker local con Wsl2 en Windows <a href="/actualidad/como-instalar-drupal-9-usando-docker-en-windows-10-home" target="_blank">Haz clic aquí</a>, pero si lo prefieres, puedes usar un Servidor local<a href="/curso/instalacion-servidor-local-xampp-para-drupal" target="_blank"> Xampp</a>, con las modificaciones específicas para que tu Drupal funcione correctamente <a href="/snippet/configuracion-servidor-local-drupal-8" target="_blank">mHaz clic aquí</a>.</p> <p><strong>Paso 2 Instalación de Drupal 9:</strong></p> <p>     Ahora que ya hemos instalado el servidor local y lo tenemos funcionando a toda velocidad, pasamos a la instalación de Drupal, tienes dos opciones a elegir:</p> <p>     Opción A: Instalar Drupal utilizando <a href="/curso/descarga-de-drupal-8-utilizando-composer" target="_blank">Composer</a> (La forma recomendada a partir de Drupal 8)</p> <p>     Opción B: Instalar Drupal Descargándolo el archivo desde la <a href="/curso/instalacion-utilizando-el-archivo-drupal-900zip" target="_blank">página oficial</a></p> <p><strong>Paso 3 Selección de la plantilla:</strong></p> <p>     Desde la aparición de Bootstrap, existen varias webs que ofrecen plantillas gratuitas para instalar en nuestros proyectos, en este artículo te dejo dos que conozco ( <a href="https://bootstrapmade.com/bootstrap-business-templates/" target="_blank">bootstrapmade.com</a>) y ( <a href="https://startbootstrap.com/" target="_blank">startbootstrap.com</a>), pero puedes buscar en Google la que prefieras, lo importante es que cumpla con los requisitos que deseas para tu proyecto, así que una vez hayas seleccionado la que más te guste, la descargarás en tu ordenador y una vez descomprimido los archivos, comenzaremos a trabajar con su adaptación a nuestro desarrollo.</p> <p><strong>Paso 4 Instalar un subtema basado en Bootstrap:</strong></p> <p>     Como hemos dicho antes, vamos a utilizar plantillas diseñadas utilizando Bootstrap, por lo que lo lógico en esta parte será Instalar el Tema Bootstrap para Drupal y a continuación crear un Subtheme partiendo de Bootstrap como modelo <a href="/curso/themes-y-subthemes" target="_blank">Haz clic aquí</a>.</p> <p><strong>Paso 5 Análisis:</strong></p> <p><strong>     </strong>Este es uno de los momentos más importantes, porque ahora ya tenemos el Drupal 9 funcionando, con un tema personalizado basado en Bootstrap, pero sin ningún tipo de contenido específico. </p> <p>     A partir de este momento es cuándo tendremos que elegir los elementos que vamos a implementar de nuestra plantilla y en función de esto, decidiremos  qué tipos de contenido vamos a necesitar y cómo tendremos que crearlos para que funcionen de acuerdo a la plantilla original.</p> <p>     En Drupal tendremos disponibles varias "Plantillas" con las cuáles podremos modificar la estructura y presentación de todos los elementos de nuestra web, por ejemplo, si queremos modificar solamente nuestra página principal (Inicio o Home), tendremos que copiar la plantilla "page.html.twig" y renombrarla a "page--front.html.twig", de esta forma, todos los cambios que apliquemos a la plantilla de la página principal, no afectarán al resto de páginas de la web.</p> <p>     Yo suelo crear un tipo de contenido "Página Inicio" o "Página principal" y luego sólo añado un campo tipo Paragrahs al que llamo "Contenidos" y así podré añadir posteriormente todos los bloques tipo paragraphs y modificar el orden según las necesidades del proyecto.</p> <p>     Pero ¿cómo sabremos el nombre de las plantillas que queremos para modificar, por ejemplo, un bloque o un elemento tipo Paragraphs?, en este caso, tendremos que <a href="/snippet/configuracion-desarrollo-local-drupal-8" target="_blank">activar el modo depurador o debug</a>, para que podamos conocer los nombre de las plantillas. El procedimiento es bastante sencillo, una vez hayamos creado un tipo de contenido, con el modo depurador podremos copiar la plantilla original y renombrarla para que afecte sólo al contenido correspondiente.</p> <p>    <strong>Ejemplo práctico</strong>: Si en nuestra plantilla tenemos un <strong>área en la que se muestran nuestros servicios o productos destacados</strong>.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 56.38%;" data-ratio="56.38" data-b-token="b-e3440eec807" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img class="img-fluid media__element b-lazy b-filter" data-entity-uuid="65f8a2dc-56e3-40e0-80d1-2743e600e5f3" data-image-style="" data-responsive-image-style="" alt="plantilla original" decoding="async" loading="lazy" data-src="/sites/default/files/styles/max_1300x1300/public/inline-images/bloque_servicios.png?itok=qk81Ouiu" src="data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%201%201'%2F%3E" width="1300" height="733" typeof="foaf:Image" /></div></div> <p> </p> <p>Entonces tendríamos que crear, primero, un tipo de contenido <strong>"Servicio"</strong> con los campos correspondientes (Nombre del servicio, Descripción, Icono)</p> <p>- Nombre del servicio (Campo Título)</p> <p>- Descripción del servicio: (Tipo Texto sin formato)</p> <p>- Icono del servicio (Tipo Texto sin formato)</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div data-b-token="b-47d3812d9d1" class="media media--blazy media--image media--ratio media--ratio--11 is-b-loading"><img class="img-fluid media__element b-lazy b-filter" data-entity-uuid="11312c15-1368-4a07-821c-80b17da61d36" data-image-style="" data-responsive-image-style="" alt="Plantilla Servicio" decoding="async" loading="lazy" data-src="/sites/default/files/styles/max_1300x1300/public/inline-images/servicio.jpg?itok=xwD0RRIu" src="data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%201%201'%2F%3E" width="650" height="650" typeof="foaf:Image" /></div></div> <p>y después utilizando el módulo <a href="/curso/bootstrap-plantillas-paragraphs-y-permisos" target="_blank">Paragraphs</a>, crearíamos un <strong>bloque llamado, por ejemplo " Area o Bloque Servicios"</strong>, con dos campos, "Título del bloque" y "Servicios", de esta forma podremos usar una plantilla para el el bloque y otra para reescribir todos los servicios con una misma plantilla.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 81.25%;" data-ratio="81.25" data-b-token="b-481abc54692" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img class="img-fluid media__element b-lazy b-filter" data-entity-uuid="cf8bc2e7-8352-40e7-9f35-23dbaf5b8b77" data-image-style="" data-responsive-image-style="" alt="Plantilla Servicios" decoding="async" loading="lazy" data-src="/sites/default/files/styles/max_1300x1300/public/inline-images/plantilla_bloque_servicios.jpg?itok=NDBQg6E_" src="data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns%3D'http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg'%20viewBox%3D'0%200%201%201'%2F%3E" width="800" height="650" typeof="foaf:Image" /></div></div> <p>En nuestra plantilla tipo Paragrarphs, donde colocaremos el listado de servicios, según este diseño, tendríamos tres campos diferentes:</p> <p>- Super título del bloque (Tipo Texto sin formato)</p> <p>- Título del bloque (Tipo Texto sin formato)</p> <p>- Servicios (Tipo referencia a contenidos: Servicio)</p> <p> </p> <p><strong>Un último apunte:</strong></p> <p>Generalmente cuando encuentres alguna plantilla de este tipo, los archivos estarán agrupados en carpetas, a veces divididos los de javascripts y los de css, pero otras veces no. Para que tu proyecto sea más fácil de mantener, te recomiendo que dividas siempre en carpetas separadas para que sea más fácil corregir fallos o añadir más funcionalidades.</p> <p>Como hemos partido de utilizar un Subtheme basado en Bootstrap, verás lo sencillo que resultará añadir nuevas librerías, desde las carpetas de la plantilla que haz descargado hasta las equivalentes dentro del Subtheme en tu Drupal.</p> </div> </div> </div> </div> </div> </div> <div class="field field--name-field-categoria-post field--type-entity-reference field--label-above"> <div class="field__label">Categoría</div> <div class="field__items"> <div class="field__item"><a href="/categoria/plantillas" hreflang="es">plantillas</a></div> <div class="field__item"><a href="/categoria/template" hreflang="es">template</a></div> <div class="field__item"><a href="/categoria/twig-template" hreflang="es">twig template</a></div> <div class="field__item"><a href="/categoria/custom-theme" hreflang="es">custom theme</a></div> <div class="field__item"><a href="/categoria/tema-personalizado" hreflang="es">tema personalizado</a></div> <div class="field__item"><a href="/categoria/diseno" hreflang="es">diseño</a></div> <div class="field__item"><a href="/categoria/design" hreflang="es">design</a></div> </div> </div> Sun, 26 Feb 2023 15:11:57 +0000 webmaster 11 at https://drupaladicto.com