development http://drupaladictos.es/ es Drupal 10 con Symfony | Guía de programación http://drupaladictos.es/curso/drupal-10-con-symfony-guia-de-programacion-resumen <span class="field field--name-title field--type-string field--label-hidden">Drupal 10 con Symfony | Guía de programación</span> <div class="field field--name-field-portada-ce field--type-entity-reference field--label-hidden field__item"><article class="media media--type-imagen media--view-mode-default"> <div class="field field--name-field-media-image field--type-image field--label-visually_hidden"> <div class="field__label visually-hidden">Imagen</div> <div class="field__item"><svg xmlns="http://www.w3.org/2000/svg" id="a" viewBox="0 0 650 650"> <rect y="0" width="650" height="650" style="fill:#054065; stroke:#1d1d1b; stroke-miterlimit:10;"></rect> <text transform="translate(183.61 309.27)" style="fill:#fff; font-family:Montserrat-Light, Montserrat; font-size:99.05px; font-weight:300;"> <tspan x="0" y="0" style="letter-spacing:-.02em;">C</tspan> <tspan x="69.04" y="0">u</tspan> <tspan x="135.3" y="0" style="letter-spacing:0em;">r</tspan> <tspan x="174.03" y="0">so</tspan> <tspan x="-58.14" y="90">G</tspan> <tspan x="18.42" y="90" style="letter-spacing:-.05em;">r</tspan> <tspan x="52.69" y="90">atui</tspan> <tspan x="241.97" y="90" style="letter-spacing:-.02em;">t</tspan> <tspan x="279.51" y="90">o</tspan> </text> </svg></div> </div> </article> </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">Lun, 28/08/2023 - 18:56</span> <div class="clearfix text-formatted field field--name-field-descripcion-ce field--type-text-long field--label-hidden field__item"><p>En este curso nos enfocaremos en explorar los conceptos básicos de programación orientada a objetos, que deberías conocer si vienes del mundo de la programación y quieres entender cómo funciona Drupal. </p> <p>Algunos conceptos que trataremos son (Services, Dependency Injection, Controllers and Services, Events, etc.)</p> </div> <div class="field field--name-field-tipo-ce field--type-list-string field--label-hidden field__item">Curso Gratuito</div> <div class="field field--name-field-suscribete-youtube field--type-link field--label-hidden field__item"><a href="https://www.youtube.com/drupaladicto">Suscríbete al canal</a></div> <div class="field field--name-field-categoria-ce field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><a href="/categoria/backend" hreflang="es">backend</a></div> <div class="field__item"><a href="/categoria/programacion" hreflang="es">programacion</a></div> <div class="field__item"><a href="/categoria/codigo" hreflang="es">código</a></div> <div class="field__item"><a href="/categoria/desarrollo" hreflang="es">desarrollo</a></div> <div class="field__item"><a href="/categoria/development" hreflang="es">development</a></div> </div> <div class="field field--name-field-comenzar-curso field--type-string field--label-hidden field__item">https://drupaladicto.com/curso/drupal-10-con-symfony-guia-de-programacion</div> Mon, 28 Aug 2023 16:56:05 +0000 webmaster 455 at http://drupaladictos.es Gutenberg | Módulo Drupal http://drupaladictos.es/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 http://drupaladictos.es Contenidos de Prueba | Generados con el módulo Devel http://drupaladictos.es/curso/programacion-drupal/contenidos-de-prueba-generados-con-el-modulo-devel <span class="field field--name-title field--type-string field--label-hidden">Contenidos de Prueba | Generados con el módulo Devel</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-870 .play-btn:hover::after { border-left: 15px solid #1fd7d9; transform: scale(20); border-left: 15px solid #fff; } #video-only-870 .play-btn::before { border: 5px solid #1fd7d9; } #video-only-870 .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-870"> <section id="video-only-870" 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-590-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-590-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-590-0-field-media-oembed-video-content"> <div class="videoWrapper"><iframe src="/media/oembed?url=https%3A//youtu.be/eGXutQIDMIw&amp;max_width=0&amp;max_height=0&amp;hash=xkWV5NsCeCudS1gHm_0C5rpeAX6WhQh7VbpwqGyLRG0" 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-590-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-1185" 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>      Cuando estamos empezando con el desarrollo o implementación de cualquier proyecto, en la mayoría de los casos nos resultará necesario la creación de contenidos con los que podamos realizar pruebas de todo tipo.</p> <p>     Para realizar esta tarea, en Drupal contamos con el módulo <strong>Devel Generate</strong>, integrado dentro de las dependencias del módulo <a href="https://www.drupal.org/project/devel" target="_blank">Devel</a>. Por lo que, una vez instalado y activado en nuestro Drupal, sólo tendremos que dirigirnos a la url "/admin/config/development/generate/content", y allí veremos el listado de todos los tipos de contenidos que tengamos creados en nuestro proyecto.</p> <h3>CÓMO INSTALAR Y CONFIGURAR EL MÓDULO:</h3> <p><strong>Paso 1 Descargar el módulo:</strong></p> <p>     Lo primero que tendrás que hacer es descargarlo, para ello, a partir de Drupal 8 se recomienda que utilices el gestor de paquetes <a data-extlink="" href="https://getcomposer.org/" rel="noreferrer" target="_blank">Composer</a>, ya que te facilitará tanto la instalación como futuras actualizaciones del tus proyectos. No obstante también podrías descargarlo desde la <a data-extlink="" href="https://www.drupal.org/project/devel" rel="noreferrer">Página oficial del módulo</a> y una vez descargado, tendrás que colocarlo en la carpeta "modules" o "modules/contrib", dependiendo de tu instalación y asegurarte de descargar todas sus dependencias o el módulo no funcionará, esta es una de las ventajas con las que cuentas al hacer la instalación usando Composer.</p> <p><strong>Paso 2 Activación del módulo</strong> :</p> <p>     Para activar el módulo Devel, al igual que todos los demás módulos contribuidos de Drupal, tendrás la posibilidad de hacerlo, mediante el uso de la herramienta Drush, con el comando <strong>"drush en devel -y"</strong>, que sirve para activar cualquier módulos y todas sus dependencias, o desde la interfaz de Drupal.    </p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 25.08%;" data-ratio="25.08" data-b-token="b-bf562569176" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img data-entity-uuid="bbffe9dd-d7d5-4f17-9b0a-52076bde5c34" loading="lazy" alt="Devel 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/modulo_devel.png?itok=DyCTE5F_" 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="163" typeof="foaf:Image" /></div></div> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 81.38%;" data-ratio="81.38" data-b-token="b-07e736f3d56" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img data-entity-uuid="e63f7359-7862-4490-b2de-6abe96112e6c" loading="lazy" alt="Devel 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/generar_contenido.jpg?itok=dQhk5U7r" 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="529" typeof="foaf:Image" /></div></div> <p>     Además de poder generar automáticamente nuestros contenidos, podremos configurar algunas opciones adicionales como, especificar su fecha de publicación, comentarios relacionados, títulos para los contenidos con un límite de caracteres específico, el idioma o incluso los usuarios que los crearon, esta última opción nos facilitará el testeo de los permisos de usuario.</p> <p>     Para generar nuestro contenidos, sólo tendremos que marcar las opciones con las que deseamos trabajar, es recomendable intentarlo la primera vez como poco contenido para estar seguros de obtener lo que pensábamos o si hará falta modificar algún campo.</p> <p>     Si no estás conforme con el contenido generado o simplemente quieres volver a generar contenidos otra vez, puedes seleccionar la opción de eliminar todos los contenidos previamente creados antes de ejecutarlo.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 74%;" data-ratio="74" data-b-token="b-4b2c2db1ff0" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img data-entity-uuid="f0925341-0457-435c-b020-899f5a76c3ec" loading="lazy" alt="Devel 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/como_generar_contenidos.jpg?itok=P7foOYOI" 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="481" typeof="foaf:Image" /></div></div> <p>     Una vez que hayamos revisado todos los campos que nos interesan, haremos clic en el botón que aparece en la parte inferior de la pantalla y comenzará el proceso inmediatamente.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 62.62%;" data-ratio="62.62" data-b-token="b-529a6e0212d" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img data-entity-uuid="b59a89a7-77d6-44a7-b385-3b59d1edc906" loading="lazy" alt="Devel 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/idioma_y_usuarios.jpg?itok=faRslW2Z" 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="407" typeof="foaf:Image" /></div></div> <p>     Cuando se haya realizado el proceso de generación de nuestros contenidos, veremos un mensaje de confirmación en la parte superior de la pantalla, con la cantidad y el tipo de contenido que decidimos utilizar.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 49.91%;" data-ratio="49.91" data-b-token="b-6a5876e61c1" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img data-entity-uuid="dac200ad-bc83-4875-81f5-e8f373ae57f9" loading="lazy" alt="Devel 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/generados.png?itok=lhYaSXTY" 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="533" height="266" typeof="foaf:Image" /></div></div> <p>     Para comprobarlo, sólo tendremos que dirigirnos al listado de contenidos en la url "/admin/content" y veremos el listado de contenidos generados por el módulo con las configuraciones adicionales, si es que hemos seleccionado alguna.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 49.38%;" data-ratio="49.38" data-b-token="b-4e4a8d061ee" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img data-entity-uuid="182f2e84-9c0d-473e-93c7-26d287a6072f" loading="lazy" alt="Devel 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/listado_generados.jpg?itok=Jtk5KaGC" 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="321" 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">Dom, 19/03/2023 - 09:10</span> Sun, 19 Mar 2023 08:10:21 +0000 webmaster 409 at http://drupaladictos.es Symfony 2 CRUD | Entidades http://drupaladictos.es/curso/symfony-2-crud/symfony-2-crud-entidades <span class="field field--name-title field--type-string field--label-hidden">Symfony 2 CRUD | Entidades</span> <div class="field field--name-field-contenidos-cap-gratis field--type-entity-reference-revisions field--label-hidden field__items"> <div class="field__item"> <div class="paragraph paragraph--type--text-only paragraph--view-mode--default" id="txonly-1188" 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>     En este capítulo comenzaremos a preparar nuestra aplicación, para que podamos interactuar con la base de datos através de lo que se conoce en Symfony, como Entidades y Modelo de datos.</p> <p>     Gracias a que hemos optado por utilizar Lando, ver o modificar los detalles de conexión con nuestra base de datos es bastante sencillo, podemos verlo en el archivo de configuración de lando, .lando.yml, donde encontraremos rápidamente la siguiente configuración:</p> <pre> services: phpmyadmin: type: phpmyadmin hosts: - symfony2.symfony2app.internal symfony2: type: mariadb portforward: true creds: user: symfony2 password: symfony2 database: symfony2</pre> <p>     Como puedes ver, además del acceso a la herramienta PhpMyAdmin, con la cual podrás manipular tus tablas y base de datos, mediante interfaz gráfica; tienes también el nombre tipo de motor de base de datos <em><strong>mariadb</strong></em> y los detalles para el usuario, clave y base de datos.</p> <p>     Pero si lo prefieres, también podrás ver toda la información relacionada con la base de datos, ejecutando el comando siguiente:</p> <pre> lando info</pre> <p>     El resultado será parecido a la siguiente imagen:</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 37.54%;" data-ratio="37.54" data-b-token="b-9e18256ab37" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271e55534c5.png?itok=5i0mEBoE" 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="244" typeof="foaf:Image" /></div></div> <p>     Para que podamos conectar nuestra aplicación de Symfony, con esta base de datos, tendremos que modificar el archivo parameters.yml, que se encuentra en la <em><strong>ubicación app/config/parameters.yml</strong></em></p> <p><em><strong>     </strong></em>En realidad, este archivo se puede configurar automáticamente, cuando comenzamos con la instalación de nuestra aplicación de Symfony, pero hemos preferido dejarlo para este momento, ya que tendría más sentido mecionarlo, ahora que trabajaremos con las entidades y los datos.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 37.08%;" data-ratio="37.08" data-b-token="b-ddbf4ad7361" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271e80d3c54.png?itok=O_E1vT1L" 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="241" typeof="foaf:Image" /></div></div> <p>     En el caso de que no tuviéramos creada la base de datos para nuestra aplicación, sólo necesitaríamos ejecutar el siguiente comando para que Symfony se encargara de hacerlo por nosotros (Recuerda que trabajamos con Lando, por eso hemos añadido la palabra al principio del comando):</p> <pre> lando php app/console doctrine:database:create</pre> <p>     Pero como nosotros ya teníamos la base de datos creada desde el principio, lo que tendremos que hacer es decirle a Symfony que la borre y luego vuelva a configurarla, y así podremos interactuar con ella.</p> <pre> lando php app/console doctrine:database:drop --force</pre> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 12.15%;" data-ratio="12.15" data-b-token="b-dc209e71905" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271e9d70b19.png?itok=sob5NKa9" 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="79" typeof="foaf:Image" /></div></div> <p>     Así, podremos volver a crear nuestra base de datos con el siguiente comando:</p> <pre> lando php app/console doctrine:database:create</pre> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 10.31%;" data-ratio="10.31" data-b-token="b-28f65716ef9" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271ebd11880.png?itok=OYqIgFR0" 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="67" typeof="foaf:Image" /></div></div> <p>     Ahora, para trabajar con nuestro modelo de datos (blog de noticias), tendremos que crear algo llamado Entidad. Esta es básicamente una clase de PHP que define toda la información sobre nuestras páginas de noticias. Symfony tiene una ingeniosa herramienta de línea de comandos para esto que usaremos y otra buena para crear las tablas de base de datos reales que coincidan con este modelo de datos.</p> <p>     Para generar nuestra entidad, a la que llamaremos noticia, vamos a ejecutar el siguiente comando de Symfony 2, con la ayuda de Lando:</p> <pre> lando php app/console doctrine:generate:entity</pre> <p>     Al igual que nos pasó cuando generamos el Bundle, Symfony nos presentará en pantalla una serie de preguntas relacionadas con nuestra entidad, que debermos ir completando hasta terminar el proceso; sin en algún punto de la generación de la entidad nos equivocamos, podremos hacer clic en la combinación de las teclas Ctrl + C y podremos comenzar nuevamente desde cero.</p> <p>     En nuestro ejemplo, la entidad tendrás los siguientes campos y se guardará dentro de nuestro Bundle, por eso, en la primera pregunda, para el shortcut o atajo, escribiremos el nombre del bundle seguido de dos puntos y luego el nombre para nuestra entidad. Ej.: <strong>NewsBundle:News</strong>, el resto de la información será la siguiente:</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 49.38%;" data-ratio="49.38" data-b-token="b-9dde740dda5" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271edbc45ae.png?itok=9qFdKsy7" 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="321" typeof="foaf:Image" /></div></div> <p>     Una vez terminado el proceso, podremos echarle un vistazo a nuestra entidad, ubicada dentro de nuestro bundle, en la carpeta Entity, con el nombre <strong>News.php</strong>, su aspecto será como la siguiente imagen:</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 66.46%;" data-ratio="66.46" data-b-token="b-0abb44c165e" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271efd60f86.png?itok=NvKX4o6I" 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="432" typeof="foaf:Image" /></div></div> <p>     En este momento, ya estamos listos para que Symfony se encargue de generar la tabla equivalente, con los datos de nuestra entidad, para ello, ejecutaremos el siguiente código en la consola:</p> <pre> lando php app/console doctrine:schema:update --force</pre> <p>     Como sólo tendremos una entidad, el proceso Symfony tardará muy poco en crear nuestra tabla y mostrarnos en pantalla el mensaje de confirmación, indicándonos el resultado:</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 11.54%;" data-ratio="11.54" data-b-token="b-8365742c68e" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271f17e4d3c.png?itok=z0E0u3Un" 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="75" typeof="foaf:Image" /></div></div> <p>     Gracias a Lando, podremos verificar los datos de nuestra tabla, accediendo a PhpMyAdmin, para ello, si no recuerdas la url, sólo tendremos que escribir el comando de información de lando:</p> <pre> lando info</pre> <p>     Y buscar la url que nos permitirá acceder a la interfaz gráfica de PhpMyAdmin:</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 14.31%;" data-ratio="14.31" data-b-token="b-3d78a3b9805" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271f34257a2.png?itok=3b1z33if" 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="93" typeof="foaf:Image" /></div></div> <p>     Dentro de PhpMyAdmin, podrás comprobar, que han sido generados correctamente, la tabla News y sus respectivos campos, coincidiendo con el modelo que hemos planteado en nuestra Entidad.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 24%;" data-ratio="24" data-b-token="b-d57366a3250" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271f50014a8.png?itok=3Aky_lDW" 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="156" 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">Jue, 09/03/2023 - 17:30</span> Thu, 09 Mar 2023 16:30:17 +0000 webmaster 356 at http://drupaladictos.es Bundle - Creación y personalización http://drupaladictos.es/curso/symfony-2-crud/bundle-creacion-y-personalizacion <span class="field field--name-title field--type-string field--label-hidden">Bundle - Creación y personalización</span> <div class="field field--name-field-contenidos-cap-gratis field--type-entity-reference-revisions field--label-hidden field__items"> <div class="field__item"> <div class="paragraph paragraph--type--text-only paragraph--view-mode--default" id="txonly-1187" 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>     Los datos con los que trabajaremos son páginas de un Blog de noticias. Crearemos una entidad (que sirve como nuestro modelo de datos para las páginas del blog) y aprenderemos a leerla y mostrarla. Durante todo el curso, aprenderemos cómo realizar las otras operaciones, es decir, agregar, actualizar y eliminar las páginas de noticias. Pero primero, necesitaremos crear un <strong>Bundle</strong> o paquete.</p> <p>     En symfony un Bandle es el equivalente a los conocidos como Plugins en otras aplicaciones. La diferencia principal con respecto a estos, es que dentro de un Bundle de Symfony podremos encontrar, tanto la funcionalidad del propio Framework central, como el código escrito para nuestra aplicación personalizada. Esto le brinda la flexibilidad de usar funciones preconstruidas empaquetadas en paquetes de terceros o para distribuir sus propios paquetes. Hace que sea fácil seleccionar y elegir qué funciones habilitar en su aplicación y optimizarlas de la manera que desee.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 63.03%;" data-ratio="63.03" data-b-token="b-43ae0dfd1e0" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271bb806cf8.jpg?itok=J4IPL-g6" 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="595" height="375" typeof="foaf:Image" /></div></div> <p>      Un <strong>Bundle</strong> o paquete en Symfony, es un directorio donde guardas todos los archivos necesarios, para una funcionalidad específica en tu aplicación. En esta pequeña aplicación donde configuraremos para nuestro Modelo de datos, las operaciones básicas que implican un CRUD (Create, Read, Update, Delete ), necesitaremos crear un Bundle, antes de poder generar las entidades que nos ayudarán con los datos.</p> <p>     Para generar un Bundle, nos colocaremos en la carpeta raiz de nuestra aplicación y ejecutaremos el siguiente código en consola, y dejaremos que Symfony 2 haga el trabajo por nosotros, como estamos trabajando con Lando, añadiremos lando, como parte del comando:</p> <pre> lando php app/console generate:bundle</pre> <p>     Entonces veremos en consola, el mensaje de bienvenida de symfony al sistema para generar nuestro Bundle:</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 85.24%;" data-ratio="85.24" data-b-token="b-7ca8f74d06f" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271be489814.png?itok=WT4jH_pO" 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="637" height="543" typeof="foaf:Image" /></div></div> <p>     En este ejemplo, he decidido añadir los siguientes datos, pero puedes cambiarlos por los tuyos, en cuanto aprendas a trabajar con la generación de un Bundle:</p> <p>Bundle name: <strong>NewsBundle</strong></p> <p>Target Directory [src/]: <strong>yes</strong></p> <p>Configuration format (annotation, yml, xml, php) [annotation]: <strong>yes</strong></p> <p><strong>     </strong>Al finalizar, veremos un mensaje de confirmación, y a la vez uno de error, ya que en esta versión de Symfony 2, tendremos que añadir manualemente una línea, dentro de nuestro archivo composer.json y a continuación ejecutar nuevamente el comando de composer update, en este caso utilizando LANDO:</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 79.68%;" data-ratio="79.68" data-b-token="b-3f36f8edcb0" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271c036d179.png?itok=Heoa3ZA_" 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="620" height="494" typeof="foaf:Image" /></div></div> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 30.92%;" data-ratio="30.92" data-b-token="b-dd777c7feb1" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271c1459c98.jpg?itok=xsnSliKT" 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="201" typeof="foaf:Image" /></div></div> <p>     Una vez añadida la línea con el nombre de nuestro <strong>NewsBundle</strong>, que es el que usamos para el ejercicio, ejecutaremos en pantalla el comando que permitirá a Composer actualizar en Syfmony nuestro Bundle.</p> <pre> lando composer update</pre> <p>     Al terminar la actualización de Composer, deberíamos ver un mensaje de confirmación, parecido al siguiente:</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 53.85%;" data-ratio="53.85" data-b-token="b-2e7ab879c70" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271c2fa5aee.png?itok=0Kwn65nT" 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="350" typeof="foaf:Image" /></div></div> <h2>   Comprobación de que el NewsBundle funciona</h2> <p>     En este caso, el NewsBundle, que acabamos de generar, nos permitierá acceder a una página con el mensaje por defecto que viene en el Twig, generada por Symfony 2. </p> <p>     Para comprobarlo, primero abriremos el archivo DefaaultController.php, donde podremos comprobar la URL para nuestra página, en el apartado de las anotaciones, (Los comentarios que se muestran justo encima de la función).</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 36.46%;" data-ratio="36.46" data-b-token="b-4db2401807a" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271c4e71314.jpg?itok=bjflhO94" 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="237" typeof="foaf:Image" /></div></div> <p>     Podemos coprobar que nuestro nuevo NewsBundle funciona correctamente, accediendo a la url de desarrollo:</p> <pre> http://symfony2-app.lndo.site/app_dev.php</pre> <p> </p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 16.77%;" data-ratio="16.77" data-b-token="b-9f8f4652700" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271c6dc30d0.png?itok=Q9varpGg" 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="109" typeof="foaf:Image" /></div></div> <h2>   Dónde se encuentra esta plantilla que vemos en pantalla?</h2> <p>     Para encontrar desde dónde se está imprimiendo este mensaje en pantalla, tendremos que abrir el archivo <strong>index.html.twig</strong>, que es la plantilla twig, llamada desde el controlador.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 43.08%;" data-ratio="43.08" data-b-token="b-41ac15cbe21" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="CRUD Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="CRUD Symfony 2 | 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/file-63271c8a0cc83.png?itok=FL9mmORj" 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="280" 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">Jue, 09/03/2023 - 17:27</span> Thu, 09 Mar 2023 16:27:25 +0000 webmaster 355 at http://drupaladictos.es Symfony 2 | Instalación con Lando http://drupaladictos.es/curso/symfony-2-crud/symfony-2-instalacion-con-lando <span class="field field--name-title field--type-string field--label-hidden">Symfony 2 | Instalación con Lando</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-971 .play-btn:hover::after { border-left: 15px solid #1fd7d9; transform: scale(20); border-left: 15px solid #fff; } #video-only-971 .play-btn::before { border: 5px solid #1fd7d9; } #video-only-971 .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-971"> <section id="video-only-971" 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-692-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-692-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-692-0-field-media-oembed-video-content"> <div class="videoWrapper"><iframe src="/media/oembed?url=https%3A//youtu.be/vh2XS_1jXsw&amp;max_width=0&amp;max_height=0&amp;hash=i1IFtShc3mkPM9FEbsxvlRYoGiNFPoDxKbMruQFZ740" 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-692-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-1186" 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"><h2><strong>Si no ves el video, puedes refrescar el navegador, presionando (Ctrl+Shift+R | Ctrl+F5 o Shift+F5), o abrirlo directamente desde el Canal de Youtube... <a href="https://youtu.be/vh2XS_1jXsw" target="_blank">HAZ CLIC AQUI</a></strong></h2> <p>     A pesar de que en la actualidad, todas las aplicaciones y lenguajes de programación, siguen evolucionado para mejorar sus características y funcionalidades, relacionadas sobretodo, con la seguridad o escalabilidad; facilitándonos cada vez más, las tareas de desarrollo e implementación, en cualquier proyecto o aplicación.</p> <p>     En la vida real, nos encontramos con una gran cantidad de empresas, que se resisten a dicha evolución y pretenden continuar con versiones obsoletas e inseguras, en lugar de invertir tiempo y dinero en su actualización.</p> <p>     Muchos de los casos con los que me he encontrado, a lo largo de estos últimos meses, tienen relación con proyectos desarrollados, utilizando el <strong>framework PHP, Symfony</strong>, que actualmente ha lanzado la <strong>versión 6</strong>, pero en lugar de utilizar ésta, la mayoría funciona todavía con la versión <strong>Symonfy 2.</strong></p> <p>     Por esta razón, he decidido compartir una guía rápida, para que puedas configurar un entorno local, utilizando<strong> Lando</strong>, en lugar de hacerlo con Docker puro, que suele ser un poco más complejo, para tus proyectos de <strong>Symfony 2</strong>.</p> <h2>   Instalación de Symfony 2 utilizando Lando</h2> <h3>    Incompatibilidades:</h3> <p>          Lo primero que debes tener en cuenta, son las posibles <strong>incompatibilidades con</strong> las que te encontrarás, ya que <strong>Symfony 2</strong> funciona correctamente, sólo con las versiones <strong>PHP 5.3 hasta la 7.2</strong>, a partir de entonces experimentarás diversos fallos. </p> <p>          Symfony 2, tampoco funciona con las versiones actuales de <strong>Composer</strong>, por lo que en caso de que estés tratando de instalar un proyecto de Symfony 2, deberás utilizar versiones anteriores a la 2.0</p> <h3>   Paso 1 - Instalar el lando</h3> <p>Si todavía no lo haz instalado, puedes ver el video y leer las instrucciones <a href="https://www.drupaladicto.com/actualidad/instalar-drupal-9-en-ubuntu-2004-con-lando-y-wsl2-en-windows-11" target="_blank">HAZ CLIC AQUÍ</a></p> <pre> git clone https://github.com/drupaladicto/symfony2-lando.git</pre> <h3>   Paso 2 - Descargar las actualizaciones de Symfony</h3> <p>     Para ello, nos moveremos dentro de la carpeta del proyecto y ejecutaremos el comando para que comience a funcionar Lando:</p> <pre> lando start</pre> <p>     A continuación, ejectuaremos el comando de Composer, para comenzar con la descargas de las dependencias de Symfony 2</p> <pre> lando composer update</pre> <h3>   Paso 3 - Acceder a la página de bienvenida de Symfony</h3> <p>     Para acceder a la página de bienenida de Symfony2, añadiremos a la url <strong>/app_dev.php</strong>:</p> <pre> http://symfony2-app.lndo.site/app_dev.php</pre> <p> </p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 49.85%;" data-ratio="49.85" data-b-token="b-b42fcaa93bf" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Curso Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="Curso Symfony 2 | 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/file-62fd41690daea.png?itok=XGL5AdWt" 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="324" typeof="foaf:Image" /></div></div> <h3>Detalles de la instalación:</h3> <p>     El proyecto incluye un archivo de configuración para lando que activará, La versión 1.10.1 de Composer y PHP 7.2, para evitar errores de compatibilidad en esta versión Obsoleta de Symfony, además de PhpMyAdmin con una base de datos completamente configurable:</p> <pre> name: symfony2-app recipe: symfony config: php: 7.2 webroot: web composer_version: '1.10.1' services: phpmyadmin: type: phpmyadmin hosts: - symfony2.symfony2app.internal symfony2: type: mariadb portforward: true creds: user: symfony2 password: symfony2 database: symfony2</pre> <p>Guardaremos los cambios y continuaremos con el siguiente paso.</p> <h2>   Descarga de las dependencias</h2> <p>        Una vez descargados los archivo del repositorio, necesitarás ejecutar el comando de composer para que terminen de descargarse todas las dependencias de Symfony definida en el archivo composer.json. Para ello el comando que deberás utilizar es el siguiente:</p> <pre> lando composer update</pre> <h3> </h3> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 26.15%;" data-ratio="26.15" data-b-token="b-935b6db5dad" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Curso Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="Curso Symfony 2 | 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/file-62fd41a5f24b0.png?itok=BQxy72gG" 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="170" typeof="foaf:Image" /></div></div> <h3>   Desactivación de las comprobaciones en el navegador</h3> <p>     Cuando realizamso una instalación de <strong>Symfony 2</strong>, tendremos que realizar un pequeña modificación en dos archivos (<strong>app_dev.php</strong> y <strong>config.php</strong>), se trata de un trozo de código que se encarga de comprobar los accesos de las ips en entornos locales, pero que podremos modificar ya que estaremos trabajando en nuestro ordenador.</p> <p>     Antes de realizar ningún cambio más, vamos a comprobarlo. Arrancaremos el proyecto, ejecutando el comando de lando:</p> <pre> lando rebuild</pre> <h2>   Posibles Fallos</h2> <p>        Según la documentaicón oficial de esta versión, podremos comprobar si nos falta algo en la configuración inicial del proyecto, accediendo a la url http://nuestrositio/config.php, pero debido a la comprobación del navegador dentro de este mismo arhivo, es posible que veamos un error en pantalla como el siguiente:</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 38.62%;" data-ratio="38.62" data-b-token="b-5e4b7c320f3" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Curso Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="Curso Symfony 2 | 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/file-62fd41cdc892f.png?itok=c7DxfkB0" 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="251" typeof="foaf:Image" /></div></div> <p>     Ahora que estamos seguros de que no funciona, vamos a ejecutar los cambios necesarios para continuar.</p> <h2>   Config.php</h2> <p>     El primer archivo que deberíamos corregir y ejecutar, tan pronto arranque nuestro proyecto es <strong>config.php</strong> y nos confirmará si todo ha ido bien en la instalación del proyecto.</p> <p>     Está ubicado en '<strong>/web/config.php</strong>' y las líneas que tenemos que comentar, para no tener que borrarlas, están al principio del archivo, son las siguientes:</p> <pre> &lt;?php if (!isset($_SERVER['HTTP_HOST'])) { exit('This script cannot be run from the CLI. Run it from a browser.'); } if (!in_array(@$_SERVER['REMOTE_ADDR'], array( '127.0.0.1', '::1', ))) { header('HTTP/1.0 403 Forbidden'); exit('This script is only accessible from localhost.'); }</pre> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 22.77%;" data-ratio="22.77" data-b-token="b-8709325be34" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Curso Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="Curso Symfony 2 | 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/file-62fd41fe46c72.png?itok=CfL6jxv0" 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="148" typeof="foaf:Image" /></div></div> <p>     Una vez realizado el cambio, si ejecutamos el comando lando rebuild y accedemos a la url <a href="https://www.drupaladicto.com/actualidad/www.drupaladicto.com">http://proyecto.lndo.site/config.php</a>, deberíamos ver que todo funciona correctamente:</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 57.54%;" data-ratio="57.54" data-b-token="b-e71dfe7cf49" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Curso Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="Curso Symfony 2 | 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/file-62fd4223ec2a8.png?itok=YOqfwUQb" 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="374" typeof="foaf:Image" /></div></div> <h2>   app_dev.php</h2> <p>     El próximo arhivo está ubicado, al igual que el anterior, dentro de la carpeta '/<em><strong>web/app_dev.php'</strong></em>, es el que nos muestra la pantalla de bienvenida de Symfony 2, al acceder a la url <a href="https://www.drupaladicto.com/actualidad/www.drupaladicto.com">http://proyecto.lndo.site/app_dev.php</a>. En este caso, las líneas que tendremos que comentar son las siguientes:</p> <pre> // This check prevents access to debug front controllers that are deployed by accident to production servers. // Feel free to remove this, extend it, or make something more sophisticated. if (isset($_SERVER['HTTP_CLIENT_IP']) || isset($_SERVER['HTTP_X_FORWARDED_FOR']) || !in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1','fe80::1', '::1')) ) { header('HTTP/1.0 403 Forbidden'); exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.'); }</pre> <p> </p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 26.31%;" data-ratio="26.31" data-b-token="b-f6b02c95c3f" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Curso Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="Curso Symfony 2 | 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/file-62fd42512a4bb.png?itok=8Jizns1w" 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="171" typeof="foaf:Image" /></div></div> <p>     En este caso, la pantalla que deberíamos ver una vez realizados los cambios y ejecutado el comando <strong>lando rebuild</strong>, sería la siguiente:</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 49.85%;" data-ratio="49.85" data-b-token="b-f3ac92e405d" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Curso Symfony 2 | www.drupaladicto.com - Consultor especializado en drupal y symfony" title="Curso Symfony 2 | 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/file-62fd42853b470.png?itok=b_fIqw9a" 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="324" typeof="foaf:Image" /></div></div> <h2>   Trabajando con un proyecto Symfony 2 existente</h2> <p>     En el caso de que necesites trabajar en tu entorno local, con un proyecto desarrollado en Symfony 2, sólo sería necesario que tuvieras instalado lando en tu ordenador y una vez añadido el archivo de configuración .lando.yml, arrancar el servidor y ajustar los detalles de urls.</p> <p>     Si quieres saber más sobre Symfony 2, visita su <a href="https://symfony.com/doc/2.4/book/installation.html" target="_blank">Documentación Oficial de Symfony 2</a></p> <p>     <strong>Solución de problemas</strong>: <a href="https://www.drupaladicto.com/snippet/symfony-2-solucionar-problemas-de-instalacionactualizacion" target="_blank">HAZ CLIC AQUÍ</a></p> </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">Jue, 09/03/2023 - 17:24</span> Thu, 09 Mar 2023 16:24:34 +0000 webmaster 354 at http://drupaladictos.es Symfony 2 CRUD | Introducción http://drupaladictos.es/curso/symfony-2-crud/symfony-2-crud-introduccion <span class="field field--name-title field--type-string field--label-hidden">Symfony 2 CRUD | Introducción</span> <div class="field field--name-field-contenidos-cap-gratis field--type-entity-reference-revisions field--label-hidden field__items"> <div class="field__item"> <div class="paragraph paragraph--type--bloque-parrafo paragraph--view-mode--default"> <div class="clearfix text-formatted field field--name-field-textos-curso field--type-text-long field--label-hidden field__item"><h2>Symfony 2 | Introducción</h2> <p>Symfony es un framework PHP que nos permite muy fácilmente utilizar la arquitectura MVC (Model-View-Controller). Fue escrito desde un origen para ser utilizado sobre la versión 5 de PHP ya que hace ampliamente uso de la orientación a objetos que caracteriza a esta versión y desde la versión 2 de Symfony se necesita <strong>mínimamente  PHP 5.3.3</strong>.</p> <p>[tipexperto titulo = “Nota”]Esta guía está actualizada para utilizar la versión 2.2 de Symfony ya que desde esta versión se crearon muchas mejoras.[/tipexperto]</p> <p>Symfony Fue creado por una gran comunidad liderada por <a href="http://fabien.potencier.org/about" target="_blank">Fabien Potencier</a>, quién a la fecha, sigue al frente de este proyecto con una visión muy fuertemente orientada hacia las mejores prácticas que hoy en día forman parte del estándar de desarrollo de software.</p> <p>Por más que Symfony puede ser utilizado para otros tipos de desarrollos no orientados a la Web, fue diseñado para optimizar el desarrollo de aplicaciones Web, proporcionando herramientas para agilizar aplicaciones complejas y guiando al desarrollador a acostumbrarse al orden y buenas prácticas dentro del proyecto.</p> <p>El concepto de Symfony es no reinventar la rueda, por lo que reutiliza conceptos y desarrollos exitosos de terceros y los integra como librerías para ser utilizados por nosotros. Entre ellos encontramos que integra plenamente uno de los frameworks ORM más importantes dentro de los existentes para PHP llamado <a href="http://www.doctrine-project.org/" target="_blank">Doctrine</a>, el cual es el encargado de la comunicación con la base de datos, permitiendo un control casi total de los datos sin importar si estamos hablando de MySQL, PostgreSQL, SQL server, Oracle, entre otros motores ya que la mayoría de las setencias SQL no son generadas por el programador sino por el mismo Doctrine.</p> <p>Fuente: <a href="https://www.maestrosdelweb.com/curso-symfony2-introduccion-instalacion/" target="_blank">http://www.maestrosdelweb.com/curso-symfony2-introduccion-instalacion/</a></p> </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">Jue, 09/03/2023 - 17:18</span> Thu, 09 Mar 2023 16:18:20 +0000 webmaster 353 at http://drupaladictos.es Symfony 2 | CRUD (Create - Read - Update - Delete) http://drupaladictos.es/curso/symfony-2-crud-create-read-update-delete-resumen <span class="field field--name-title field--type-string field--label-hidden">Symfony 2 | CRUD (Create - Read - Update - Delete)</span> <div class="field field--name-field-portada-ce field--type-entity-reference field--label-hidden field__item"><article class="media media--type-imagen media--view-mode-default"> <div class="field field--name-field-media-image field--type-image field--label-visually_hidden"> <div class="field__label visually-hidden">Imagen</div> <div class="field__item"><svg xmlns="http://www.w3.org/2000/svg" id="a" viewBox="0 0 650 650"> <rect y="0" width="650" height="650" style="fill:#054065; stroke:#1d1d1b; stroke-miterlimit:10;"></rect> <text transform="translate(183.61 309.27)" style="fill:#fff; font-family:Montserrat-Light, Montserrat; font-size:99.05px; font-weight:300;"> <tspan x="0" y="0" style="letter-spacing:-.02em;">C</tspan> <tspan x="69.04" y="0">u</tspan> <tspan x="135.3" y="0" style="letter-spacing:0em;">r</tspan> <tspan x="174.03" y="0">so</tspan> <tspan x="-58.14" y="90">G</tspan> <tspan x="18.42" y="90" style="letter-spacing:-.05em;">r</tspan> <tspan x="52.69" y="90">atui</tspan> <tspan x="241.97" y="90" style="letter-spacing:-.02em;">t</tspan> <tspan x="279.51" y="90">o</tspan> </text> </svg></div> </div> </article> </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">Jue, 09/03/2023 - 17:12</span> <div class="field field--name-field-tipo-ce field--type-list-string field--label-hidden field__item">Curso Gratuito</div> <div class="field field--name-field-suscribete-youtube field--type-link field--label-hidden field__item"><a href="https://www.youtube.com/drupaladicto">Suscríbete al canal</a></div> <div class="field field--name-field-categoria-ce field--type-entity-reference field--label-hidden field__items"> <div class="field__item"><a href="/categoria/symfony" hreflang="es">symfony</a></div> <div class="field__item"><a href="/categoria/symfony2" hreflang="es">symfony2</a></div> <div class="field__item"><a href="/categoria/programacion" hreflang="es">programacion</a></div> <div class="field__item"><a href="/categoria/php" hreflang="es">php</a></div> <div class="field__item"><a href="/categoria/development" hreflang="es">development</a></div> <div class="field__item"><a href="/categoria/desarrollo" hreflang="es">desarrollo</a></div> <div class="field__item"><a href="/categoria/mvc" hreflang="es">mvc</a></div> <div class="field__item"><a href="/categoria/backend" hreflang="es">backend</a></div> </div> <div class="field field--name-field-comenzar-curso field--type-string field--label-hidden field__item">/symfony-2-crud-create-read-update-delete</div> Thu, 09 Mar 2023 16:12:50 +0000 webmaster 351 at http://drupaladictos.es Drupal 9 - Ready to Work http://drupaladictos.es/curso/drupal-9-ready-work <span class="field field--name-title field--type-string field--label-hidden">Drupal 9 - Ready to Work</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">Jue, 09/03/2023 - 12:27</span> <div class="field field--name-field-intro-curso field--type-string field--label-hidden field__item">Aprende todo lo necesario para trabajar con Drupal desde cero</div> <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-1062 .play-btn:hover::after { border-left: 15px solid #1fd7d9; transform: scale(20); border-left: 15px solid #fff; } #video-only-1062 .play-btn::before { border: 5px solid #1fd7d9; } #video-only-1062 .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-1062"> <section id="video-only-1062" 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/readytowork.jpg?itok=4BvMTyw4" 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-748-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-748-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-748-0-field-media-oembed-video-content"> <div class="videoWrapper"><iframe src="/media/oembed?url=https%3A//youtu.be/AEiz2w4i7ac&amp;max_width=0&amp;max_height=0&amp;hash=zEDatNuWnLTqXw75OdOAkkTbqiOBqIn_nKxU5nUCfos" 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-748-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-1063" style="background-color: #16628f;border: solid px;border-color: #096ba0;border-radius: 5px;padding: 20px;color: white;"> <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>    Si te interesa trabajar en el desarrollo de páginas web, utilizando el CMS Drupal, te ofrezco la oportunidad de aprender, todo lo que necesitarás para lograr ese objetivo. </p> <h3>"DRUPAL 9 READY TO WORK"</h3> <p>     Diridigo a tod@s aquell@s que estén interesad@s  en el desarrollo de aplicaciones web, utilizando este potente CMS, cuyo núcleo está basado en el Framework Symfony, a partir de Drupal 8.</p> <p>     El propósito fundamental de este curso-taller, es conectar en tiempo real con tod@s l@s participantes, durante 2 horas, cada día, en las cuales trabajaremos, paso a paso, en el desarrollo de un proyecto completo, donde abarcaremos todas las posibles fases del mismo, desde la configuración de un entorno para el desarrollo, pasando por el uso de un repositorio Git, la integración continua, por medio de drush y terminando con la publicación del proyecto, en un entorno de producción.</p> <p>     Además, todos los alumnos tendrán acceso a documentación y videos específicos relacionados con el curso, en español, que no estarán disponibles en ninguna otra plataforma o canal público.</p> <p>     Es por esta razón, que para garantizar al máximo el tiempo de atención a cada alumno y que todos podamos avanzar según el plan de trabajo diario, el número total de participantes admitidos será de <strong>SOLO 10 PERSONAS</strong>.</p> <h2><strong>     REQUISITOS:</strong></h2> <ul><li>Nociones básicas sobre desarrollo o diseño web.</li> <li>Ordenador (Computadora) con el sistema Windows 10 instalado.</li> <li>Conexión a internet lo suficientemente rápida para soportar Video Llamadas.</li> </ul><h2>     <strong>MODALIDAD DEL CURSO:</strong></h2> <p>     Todas las sesiones del curso se realizarán, en tiempo real, como si estuvieramos en un aula, a través de Video llamada, ya sea por medio de Skype, Zoom o similar, para mantener una comunicación fluida e interacción, entre todos los participantes.</p> <h3>     <strong>SOPORTE:</strong></h3> <p>     Todos los participantes del curso, tendrán acceso a varios videos y documentación relacionada con cada una de las sesiones, además de acceso al canal de Slack, para comentar las dudas que vayan apareciendo entre cada una de las sesiones.</p> <h2><strong>     DURACIÓN DEL CURSO:</strong></h2> <h3><strong>     LUNES A VIERNES (4 SEMANAS)</strong></h3> <p>        <strong>40 horas</strong>, repartidas en <strong>5 sesiones</strong> semanales, de <strong>2 horas cada una</strong>, en horario a elegir <strong>de 18:00 a 20:00 ó de 20:00 a 22:00</strong>, hora de España</p> <h3>     <strong>PRECIO Y FORMA DE PAGO:</strong></h3> <p><strong>        </strong>El coste del curso será de<strong> 500€</strong> y el método de pago a través de<strong> Paypal o transferencia bancaria</strong>.</p> <h2><strong>     Precio especial para grupos y/o empresas</strong></h2> <p><strong>       Para más información, </strong>contactar al <strong>Whatsapp: +34 644 065 036</strong>, para confirmar la disponibilidad del curso, ya que <strong>el grupo será muy limitado.</strong></p> <p><strong> </strong></p> <h2><strong>     FECHA DE INICIO</strong></h2> <p><strong>        </strong>El curso comienza durante la <strong>primera semana de cada mes.</strong></p> <p><strong>        </strong>Sólo se admiten nuevos estudiantes<strong> hasta el 5to día de clases.</strong></p> <p> </p> <p><!--%3Cscript%20src%3D%22https%3A%2F%2Fwww.paypal.com%2Fsdk%2Fjs%3Fclient-id%3DAdvY5K4XB45eVFbKcH_7LZ9rxGl1eAVfKccuxSZF6KertkK6ZaCEOHtrx6fOgCjAEpEW462sKuHHQLte%26enable-funding%3Dvenmo%26currency%3DEUR%22%20data-sdk-integration-source%3D%22button-factory%22%3E%3C%2Fscript%3E--><!--%3Cscript%3E%0A%20%20%20%20function%20initPayPalButton()%20%7B%0A%20%20%20%20%20%20paypal.Buttons(%7B%0A%20%20%20%20%20%20%20%20style%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20shape%3A%20'rect'%2C%0A%20%20%20%20%20%20%20%20%20%20color%3A%20'gold'%2C%0A%20%20%20%20%20%20%20%20%20%20layout%3A%20'vertical'%2C%0A%20%20%20%20%20%20%20%20%20%20label%3A%20'paypal'%2C%0A%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20createOrder%3A%20function(data%2C%20actions)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20actions.order.create(%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20purchase_units%3A%20%5B%7B%22description%22%3A%22Curso-taller%20Drupal%20Ready%20to%20Work%5CnOrientado%20a%20estudiantes%20y%2Fo%20profesionales%20interesados%20en%20comenzar%20a%20trabajar%20con%20este%20CMS%22%2C%22amount%22%3A%7B%22currency_code%22%3A%22EUR%22%2C%22value%22%3A500%7D%7D%5D%0A%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20onApprove%3A%20function(data%2C%20actions)%20%7B%0A%20%20%20%20%20%20%20%20%20%20return%20actions.order.capture().then(function(orderData)%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Full%20available%20details%0A%20%20%20%20%20%20%20%20%20%20%20%20console.log('Capture%20result'%2C%20orderData%2C%20JSON.stringify(orderData%2C%20null%2C%202))%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Show%20a%20success%20message%20within%20this%20page%2C%20e.g.%0A%20%20%20%20%20%20%20%20%20%20%20%20const%20element%20%3D%20document.getElementById('paypal-button-container')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20element.innerHTML%20%3D%20''%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20element.innerHTML%20%3D%20'%3Ch3%3EThank%20you%20for%20your%20payment!%3C%2Fh3%3E'%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%2F%2F%20Or%20go%20to%20another%20URL%3A%20%20actions.redirect('thank_you.html')%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%20%20%20%20%7D%2C%0A%0A%20%20%20%20%20%20%20%20onError%3A%20function(err)%20%7B%0A%20%20%20%20%20%20%20%20%20%20console.log(err)%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%7D).render('%23paypal-button-container')%3B%0A%20%20%20%20%7D%0A%20%20%20%20initPayPalButton()%3B%0A%20%20%3C%2Fscript%3E--></p> <h2>CONTENIDO DEL CURSO</h2> <h3>PRIMERA SEMANA:</h3> <p><strong>     Sesión 1 - Configuración del entorno</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán a configurar el entorno de desarrollo LAMP, para sus proyectos con Drupal 9, utilizando WSL2, Consola de Windows mejorada, Docker for windows, Composer. También podrán acceder a otras opciones, que podrían ajustarse mejor al sistema operativo de cada alumno.</p> <p><strong>     Sesión 2 - Descarga y configuración de Drupal 9</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán a descargar e instalar Drupal 9, utilizando Composer y Drush, además de algunos módulos que facilitarán las tareas de desarrollo.</p> <p><strong>     Sesión 3 - Repositorio y control de versiones</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán sobre el uso de un repositorio y la importancia del control de versiones, para las tareas de desarrollo, así como los comandos más utilizados para crear ramas, subir el código, etc. a través de la consola de comandos.<br />  </p> <p><strong>     Sesión 4 - Usuarios, permisos y roles</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán acerca de la creación y configuración de usuarios, roles y permisos, comprobando las diferentes maneras de interactuar mediante la interfaz como administradores y como usuarios con acceso limitado.</p> <p><strong>     Sesión 5 - Contenidos y tipos de contenido</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán a crear y configurar varios tipos de contenido, conocerán las diferentes opciones para sus formularios, presentación y conexión entre varios contenidos.</p> <h3>SEGUNDA SEMANA:</h3> <p><strong>     Sesión 1 - Themes en Drupal</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán sobre los Themes o plantillas en Drupal 9, activación, descarga y configuración.</p> <p><strong>     Sesión 2 - Vistas</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán sobre el uso, creación y configuración de Vistas en Drupal 9, tipos, permisos, modalidades y fitros.</p> <p><strong>     Sesión 3 - Bloques</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán sobre el uso, creación y configuración de los bloques en Drupal 9, tipos, permisos, formatos.</p> <p><strong>     Sesión 4 - Taxonomías, clasficación y relaciones en los contenidos</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán acerca de la claficación de contenidos, utilizando los términos o taxonomías, así como la forma de crear relaciones entre ellos, para sacar mayor provecho a las vistas.</p> <p><strong>     Sesión 5 - Paragraphs</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán a crear y configurar varios tipos de contenido, utilizando el módulo Paragraphs, que desde su aparición en Drupal 8 revolucionó por completo la manera en que se contruyen las estructuras con contenidos y usuarios, ofreciendo mayores ventajas y opciones en cada caso.</p> <h3>TERCERA SEMANA:</h3> <p><strong>     Sesión 1 - Módulos personalizados</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán a crear un módulo personalizado, entendiendo las diferentes ventajas y configuraciones relacionadas con el mismo para poder implementarlos en sus desarrollos.</p> <p><strong>     Sesión 2 - Tema personalizado</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán a crear un Subtheme o tema personalizado, utilizando bootstrap, en el que podrán manipular todos los elementos que se presentan en el proyecto Drupal 9, a través de modificaciones en sus plantillas, archivos CSS o Javascript.</p> <p><strong>     Sesión 3 - Plantillas Twig</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán sobre cómo trabajar con plantillas Twig en Drupal 9, aprenderán a activar el modo desarrollo de Drupal, la forma de configurar el entorno local, y las principales opciones disponibles al trabajar con plantillas Twig, como campos condicionles y declaración de variables.</p> <p><strong>     Sesión 4 - Uso de Urls personalizadas</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán acerca de la creación e implementación de urls automatizadas y la creación de patrones, para tipos de contenidos específicos, así como la generación automática en masa de dichas urls.</p> <p><strong>     Sesión 5 - Formularios</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán a configurar el formulario por defecto de Drupal, así como instalar y configurar otros tipos de formularios utlizando el módulo webform.</p> <h3>CUARTA SEMANA:</h3> <p><strong>     Sesión 1 - Configuración de Servidores</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán a conectarse con un servidor de producción, donde podrán publicar su proyecto de Drupal 9, utilizando el código alojado en el repositorio, para mantener la configuración de su proyecto actualizada a través de comandos de Drush.</p> <p><strong>     Sesión 2 - CMI Drupal (Integración continua)</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán a exportar e importar sus configuraciones entre los diferntes entornos, local y producción, para mantener al día sus proyectos una vez hayan sido publicados.</p> <p><strong>     Sesión 3 - Multi-idioma</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán sobre configurar la web de drupal para que soporte contenidos en varios idiomas y ofrecer esta posibilidad a sus clientes o usuarios en general.</p> <p><strong>     Sesión 4 - Introducción al SEO</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos aprenderán acerca de la instalación y configuración de varios módulos relacionados con el posicionamiento SEO.</p> <p><strong>     Sesión 5 - Mejoras y cierre del curso</strong><br />         Durante el tiempo transcurrido en esta sesión formativa, los alumnos tendrán la oportunidad de exponer dudas relacionadas con nuevas funcionalidades específicas de cada proyecto, para unificar criterios entre todos y prepararse para su nueva etapa como desarrolladores web.</p> </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/composer" hreflang="es">composer</a></div> <div class="field__item"><a href="/categoria/instalacion" hreflang="es">instalacion</a></div> <div class="field__item"><a href="/categoria/drupal-9" hreflang="es">drupal 9</a></div> <div class="field__item"><a href="/categoria/configuracion" hreflang="es">configuración</a></div> <div class="field__item"><a href="/categoria/server" hreflang="es">server</a></div> <div class="field__item"><a href="/categoria/servidor" hreflang="es">servidor</a></div> <div class="field__item"><a href="/categoria/development" hreflang="es">development</a></div> <div class="field__item"><a href="/categoria/desarrollo" hreflang="es">desarrollo</a></div> <div class="field__item"><a href="/categoria/programacion" hreflang="es">programacion</a></div> <div class="field__item"><a href="/categoria/themes" hreflang="es">themes</a></div> </div> </div> Thu, 09 Mar 2023 11:27:06 +0000 webmaster 324 at http://drupaladictos.es Contenidos programáticamente | Creación en Drupal 9 http://drupaladictos.es/curso/programacion-drupal/contenidos-programaticamente-creacion-en-drupal-9 <span class="field field--name-title field--type-string field--label-hidden">Contenidos programáticamente | Creación en Drupal 9</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-871 .play-btn:hover::after { border-left: 15px solid #1fd7d9; transform: scale(20); border-left: 15px solid #fff; } #video-only-871 .play-btn::before { border: 5px solid #1fd7d9; } #video-only-871 .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-871"> <section id="video-only-871" 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-591-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-591-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-591-0-field-media-oembed-video-content"> <div class="videoWrapper"><iframe src="/media/oembed?url=https%3A//youtu.be/GDrVEHkumJI&amp;max_width=0&amp;max_height=0&amp;hash=zw_1FAwYeImS7GGBgDaJL--XWmR2RYe1OqwEdBDPmmA" 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-591-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-1183" 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"><h2><strong>Si no ves el video, puedes refrescar el navegador, presionando (Ctrl+Shift+R | Ctrl+F5 o Shift+F5), o abrirlo directamente desde el Canal de Youtube... <a href="https://youtu.be/GDrVEHkumJI" target="_blank">HAZ CLIC AQUI</a></strong></h2> <p>     A lo largo de los años, Drupal ha ganado la inmerecida fama de que es un CMS muy complejo y difícil de aprender, pero en realidad, todo dependerá de tu capacidad para experimentar con nuevas herramientas y tu actitud de superar cualquier reto que se te presente; verás que no resulta tan complicado, si dedicas el tiempo necesario y tienes la suficiente paciencia contigo.</p> <p>     Si todavía no lo conoces, te animo a que empieces desde hoy mismo con este <a href="/drupal-9-paso-paso-en-espanol">curso gratis de Drupal 9 paso a paso en español</a> y en un par de semanas te llevarás la grata sorpresa de lo mucho que puedes lograr si pones verdadero empeño.</p> <h2>   LO QUE NECESITAS ANTES DE EMPEZAR CON ESTE EJERCICIO:</h2> <ol><li>Tener Drupal funcionando ya sea con un <a href="/curso/instalacion-servidor-local-xampp-para-drupal" target="_blank">servidor local tipo Xampp</a> o con <a href="/actualidad/como-instalar-drupal-9-usando-docker-en-windows-10-home">contenedores de Docker</a>.<br />  </li> <li>Haber instalado al menos estos dos módulos esenciales <a href="/curso/backup-and-migrate" target="_blank">Backup and Migrate</a> y <a href="https://www.drupal.org/project/admin_toolbar" target="_blank">Admin Toolbar</a><br />  </li> <li>(Opcional) Conocimientos básicos sobre <a href="/actualidad/como-crear-un-modulo-en-drupal-9" target="_blank">Cómo crear un módulo personalizado</a></li> </ol><p>     Una vez hayas terminado de configurar todo lo anterior y te sientas con todas las ganas para comenzar, el próximo paso sería hacer tu primera copia de seguridad; de esta forma, te asegurarás de que puedes recuperar la última versión estable de tu desarrollo si hubiera cualquier tipo de fallo durante el proceso.</p> <p>Así que, para crear esta primera copia de nuestra base de datos estable, nos iremos a la ventana del módulo Backup and migrate usando la siguiente ruta en el navegador o mediante los botones del menú superior "/admin/config/development/backup_migrate" y crearemos la primera copia estable.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 84.39%;" data-ratio="84.39" data-b-token="b-c2b3283e233" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Custom Module Drupal | www.drupaladicto.com - Consultor y formador especializado en Drupal y Symfony" title="Custom Module Drupal | www.drupaladicto.com - Consultor y formador 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/file-637510b4600d2.png?itok=WCbKkqHR" 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="570" height="481" typeof="foaf:Image" /></div></div> <p>Tan pronto como veamos el mensaje de confirmación de que se ha realizado la copia correctamente, nos toca continuar con el proceso de creación del tipo de contenido y posteriormente su colocación en un módulo personalizado, para que podamos reutilizarlo en cualquier otro proyecto o que nos sirva de base para contenidos más complejos.</p> <h2>PASO 1 CREACIÓN DEL TIPO DE CONTENIDO:</h2> <p>Empezaremos con el proceso de <a href="/curso/creacion-tipos-de-contenido" target="_blank">crear nuestro tipo de contenido</a>, añadiéndole los campos correspondientes, funcionalidades y estructura. Es importante que tengas muy claro si tu contenido tendrá dependencias de otros contenidos como vocabularios, referencias a otros contenidos o formularios, etc. La idea es que tu tipo de contenido, tal y como lo definas esté disponible para cualquier otra web de Drupal 8 o 9 o que te sirva como punto de partida para desarrollar otros contenidos más complejos partiendo de una base predefinida.</p> <p>En este ejercicio, vamos a crear un tipo de contenido llamado "Servicio", al que añadiremos dos campos ( Imagen servicio y Descripción del servicio ), de esta forma podrás apreciar mejor todos los elementos relacionados según el tipo de campo que prefieras emplear.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 51.54%;" data-ratio="51.54" data-b-token="b-5f425b31a93" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Custom Module Drupal | www.drupaladicto.com - Consultor y formador especializado en Drupal y Symfony" title="Custom Module Drupal | www.drupaladicto.com - Consultor y formador 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/file-6375120d1629d.png?itok=CBNDfYsX" 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="335" typeof="foaf:Image" /></div></div> <h2>PASO 2 CREACIÓN DEL MÓDULO PERSONALIZADO:</h2> <p>     Básicamente, vamos a crear una carpeta con el nombre de nuestro módulo, y la colocaremos dentro de la carpeta "modules/custom", para mantener mejor ordenado el desarrollo de nuestra web. Te recomiendo que utilices el mismo nombre que tendrá tu tipo de contenido y luego añadiremos el archivo "TUMODULO.info.yml", que es necesario para que Drupal lo reconozca como módulo, acompañado de dos carpetas adicionales "config" + "install", donde tendremos que colocar todos los demás archivos relacionados con la definición de nuestro contenido.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 42.81%;" data-ratio="42.81" data-b-token="b-01b694fb2d9" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Custom Module Drupal | www.drupaladicto.com - Consultor y formador especializado en Drupal y Symfony" title="Custom Module Drupal | www.drupaladicto.com - Consultor y formador 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/file-637512415649d.png?itok=sh9ADnVc" 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="292" height="125" typeof="foaf:Image" /></div></div> <h2>PASO 3 EXPORTACIÓN Y CREACIÓN DE ARCHIVOS:</h2> <p>     Aquí es donde viene la novedad y verdadera ventaja, de utilizar este método para la creación de tus contenidos en un módulo personalizado, en lugar de tener que programar todo desde cero, disminuyendo así considerablemente la generación de errores e investigación de posibles fallos de estructura y ejecución, como en versiones anteriores de Drupal.</p> <p>     La idea consiste en utilizar la exportación de configuración, incluida en la interfaz de usuario a partir de Drupal 8, para no tener que memorizar un montón de líneas de código, tabulaciones específicas y otras características obligatorias. Haciendo que tus desarrollos puedan ponerse en marcha en el menor tiempo posible.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 147.39%;" data-ratio="147.39" data-b-token="b-726555b7df2" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Custom Module Drupal | www.drupaladicto.com - Consultor y formador especializado en Drupal y Symfony" title="Custom Module Drupal | www.drupaladicto.com - Consultor y formador 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/file-6375128427ae2.png?itok=5_uVgTKu" 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="441" height="650" typeof="foaf:Image" /></div></div> <p>     Como en cualquier desarrollo, la clave está en los detalles. Debes prestar mucha atención de no saltarte ningún paso del procedimiento, durante la creación y todo saldrá según lo que esperas.</p> <h3>     LO QUE SIEMPRE DEBES VERIFICAR:</h3> <p><strong>     1.- El tipo de contenido: </strong>El primer archivo que debes añadir a tu módulo, siempre dentro de la carpeta "config/<strong>install</strong>" es el que define tu tipo de contenido, por ejemplo, el desplegable te mostrará todos los elementos disponibles, si tu contenido a exportar es un nodo, debes elegir "Tipo de contenido" o "Content Type", pero también podrías exportar cualquier otro elemento, por lo tanto, podrás usar "Tipo de parrafo" o "Paragraphs Type", "Bloque personalizado" o "Custom Block", etc.</p> <p>     El proceso siempre debería ser igual, primero creas el archivo con el nombre sugerido en la parte inferior de la ventana de exportación y lo guardas en la dentro de la carpeta "config/<strong>install</strong>" de tu módulo personalizado.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 68.77%;" data-ratio="68.77" data-b-token="b-86c431652ab" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Custom Module Drupal | www.drupaladicto.com - Consultor y formador especializado en Drupal y Symfony" title="Custom Module Drupal | www.drupaladicto.com - Consultor y formador 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/file-637512bc9a229.jpg?itok=Ee5Gl-ZU" 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="447" typeof="foaf:Image" /></div></div> <p>A continuación, como sugerencia, en la primera línea de cada archivo, pega el nombre sugerido como comentario, o sea, poniéndole una almohadilla delante, de esta forma ayudarás a Drupal a identificar el archivo y a ti de guía para confirmar si haz cambiado el nombre del archivo por error.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 64.81%;" data-ratio="64.81" data-b-token="b-d90d2621b9b" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Custom Module Drupal | www.drupaladicto.com - Consultor y formador especializado en Drupal y Symfony" title="Custom Module Drupal | www.drupaladicto.com - Consultor y formador 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/file-6375130c1e95e.png?itok=kaV-Bjid" 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="287" height="186" typeof="foaf:Image" /></div></div> <p>     Por último, copia todo el código que está justo debajo del UUID en la interfaz y pégalo en cada uno de tus archivos, dejando algo de espacio a partir del comentario que haz pegado al principio.<br />  </p> <p><strong>     2.- Todos los contenidos tienen obligatoriamente tres archivos fundamentales:</strong></p> <ul><li>- <strong>core.entity_form_display.node.servicio.default.yml:</strong> Que define el formulario que se utilizará para crear el contenido.</li> <li>- c<strong>ore.entity_view_display.node.servicio.default.yml:</strong> Que define la forma de presentación del contenido.</li> <li>- <strong>node.type.servicio.yml:</strong> Define el tipo de contenido.</li> </ul><p>El resto de archivos que formarán tu módulo, serán los campos que vienen por defecto o que han sido creados por ti, como taxonomías, patrones de url, campos referenciados a otros contenidos, etc.</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 68.77%;" data-ratio="68.77" data-b-token="b-1b1bb4a1a8d" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Custom Module Drupal | www.drupaladicto.com - Consultor y formador especializado en Drupal y Symfony" title="Custom Module Drupal | www.drupaladicto.com - Consultor y formador 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/file-637513476a19f.jpg?itok=Fchm1OaE" 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="447" typeof="foaf:Image" /></div></div> <p><strong>     3.- Cada campo tiene dos archivos</strong> uno que define sus propiedades específicas, empieza por "field.field", ejemplo "<strong>field.field.node.servicio.field_descripcion_del_servicio.yml</strong>" y otro que define la manera en que serán guardados los datos, empieza por "field.storage", ejemeplo "<strong>field.storage.node.field_descripcion_del_servicio.yml</strong>"</p> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 81.36%;" data-ratio="81.36" data-b-token="b-d7ea9d8e38b" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Custom Module Drupal | www.drupaladicto.com - Consultor y formador especializado en Drupal y Symfony" title="Custom Module Drupal | www.drupaladicto.com - Consultor y formador 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/file-6375137ad5eba.png?itok=wFL1zSFy" 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="590" height="480" typeof="foaf:Image" /></div></div> <p></p><div class="media-wrapper media-wrapper--blazy media-wrapper--image"> <div style="padding-bottom: 83.66%;" data-ratio="83.66" data-b-token="b-98ce5938fff" class="media media--blazy media--image media--ratio media--ratio--fluid is-b-loading"><img alt="Custom Module Drupal | www.drupaladicto.com - Consultor y formador especializado en Drupal y Symfony" title="Custom Module Drupal | www.drupaladicto.com - Consultor y formador 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/file-6375139a39a6f.png?itok=ls_Oc-Ll" 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="569" height="476" typeof="foaf:Image" /></div></div> <p>     Por lo tanto al crear el archivo para cada campo asegúrate de hacerlo con sus correspondencias, antes de pasar a los archivos del siguiente campo, así tendrás más control si quieres modificar los nombres que crea Drupal a los campos por defecto y evitas errores por falta de algún archivo equivalente. <br />  </p> <p><strong>     4.- No olvides añadir dependencias. </strong>Siempre que vayas a crear contenidos siguiendo este método, añade al menos una dependencia en el archivo info.yml de tu módulo, eso facilitará que te acostumbres mejor a la estructura de creación de este archivo.</p> </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">Jue, 09/03/2023 - 10:20</span> Thu, 09 Mar 2023 09:20:31 +0000 webmaster 305 at http://drupaladictos.es