Drupal 8.x https://keopx.net/ es Drupal Template Helper para Drupal 8 https://keopx.net/blog/drupal-template-helper-para-drupal-8 <span>Drupal Template Helper para Drupal 8</span> <div class="text-content clearfix field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><strong>Drupal Template Helper</strong> sirve para destacar las plantillas twig sugeridas en cada caso y el preprocess a utilizar.</p> <p>Esta herramienta es muy cómoda y sencilla de utilizar, facilita muchísimo el poder encontrar las plantillas que son necesarias para cada caso y saber ademas que las esta utilizando.</p> <p>Recordad que es necesario limpiar la cache tras añadir una nueva plantilla para que Drupal sea capaz de reconocer dicho fichero.</p> <p>Este post es únicamente un traducción de la documentación oficial: <a href="https://github.com/arshad/drupal-template-helper">https://github.com/arshad/drupal-template-helper</a></p> <h2>Drupal Template Helper</h2> <p>Es una extensión de <em>Chrome DevTools</em> para las plantillas de Drupal 8, Drupal 7 y Backdrop CMS: <a href="https://chrome.google.com/webstore/detail/ppiceaegogijpjodfpiimifhbnaifbnn">https://chrome.google.com/webstore/detail/ppiceaegogijpjodfpiimifhbnaifbnn</a></p> <p><a href="https://cloud.githubusercontent.com/assets/124599/14293486/d561f37e-fb7d-11e5-8ed0-952d520678a4.png" target="_blank"><img alt="drupal-template-helper" src="https://cloud.githubusercontent.com/assets/124599/14293486/d561f37e-fb7d-11e5-8ed0-952d520678a4.png" /></a></p> <h3>Instalación</h3> <h5>PASO 1: InstalAR Y configurAR.</h5> <ol><li>Descargue e instale la extensión <em>Drupal Template Helper</em> para <em>Chrome</em>.</li> <li>Haga clic en el icono de la extensión.</li> <li>Haga clic en <em>Opciones</em> bajo <strong>Drupal Template Helper</strong>.</li> <li>Agregue las URL de los sitios para habilitar la extensión. Ejemplo: <a href="http://drupal.dev">http://drupal.dev</a>, <a href="http://www.drupal.dev">http://www.drupal.dev</a>.</li> <li>Guardar.</li> </ol><h5>PASO 2: HABILITAR LA API EXPERIMENTAL DEL CHROME.</h5> <ol><li>Ve a <em>chrome://flags/#enable-devtools-experiments</em>, busca <strong>Experimental Extension APIs</strong> y <strong>Developer Tools experiments</strong>, hacer click en "<em>Enable</em>" enlaces, y reinicia Chrome.</li> <li>Abrir <em>DevTools</em> y hacer click en <em>Settings</em>.</li> <li>Busca en la pestaña <strong>Experiments</strong> y activa <strong>Allow custom UI themes</strong>. Ver la siguiente captura. No olvides reiniciar nuevamente Chrome.</li> </ol><p><a href="https://cloud.githubusercontent.com/assets/124599/14293054/e6350e72-fb7b-11e5-973a-31794db51e4d.png" target="_blank"><img alt="drupal-template-devtools-theme-ui" src="https://cloud.githubusercontent.com/assets/124599/14293054/e6350e72-fb7b-11e5-973a-31794db51e4d.png" /></a></p> <p>Nota: Si desea ocultar los comentarios de Twig, desactive <strong>Show HTML comments</strong> en <strong>Preferences</strong>.</p> <p><a href="https://cloud.githubusercontent.com/assets/124599/21719927/b5c16cb2-d439-11e6-8cc7-a84192aa822a.png" target="_blank"><img alt="drupal-template-devtools-preferences" src="https://cloud.githubusercontent.com/assets/124599/21719927/b5c16cb2-d439-11e6-8cc7-a84192aa822a.png" /></a></p> <h5>PASO 3: HABILITAR EL TEMA DEBUG</h5> <ul><li>Para Drupal 8, ver el articulo de Phil's article: <a href="https://www.chapterthree.com/blog/drupal-8-theming-setting-theme-debugging">https://www.chapterthree.com/blog/drupal-8-theming-setting-theme-debugging</a></li> <li>Para Drupal 7, ver <a href="https://www.drupal.org/node/223440">https://www.drupal.org/node/223440</a>.</li> </ul><h3>Uso</h3> <p>Inspeccionar un elemento usando <em>DevTools</em> y haciendo click sobre <strong>Templates</strong> en la barra de <em>DevTools</em>.</p> </div> <span><span>keopx</span></span> <span><time datetime="2017-07-03T15:02:10+02:00" title="Lunes, Julio 3, 2017 - 15:02">Lun, 03/07/2017 - 15:02</time> </span> <div class="field field--name-field-tax-cat field--type-entity-reference field--label-above"> <div class="field__label">Categoria</div> <div class="field__items"> <div class="field__item"><a href="/categoria/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/categoria/drupal-7x" hreflang="es">Drupal 7.x</a></div> <div class="field__item"><a href="/categoria/drupal-planeta" hreflang="es">Drupal Planeta</a></div> </div> </div> <div class="field field--name-field-tax-tag field--type-entity-reference field--label-above"> <div class="field__label">Tag</div> <div class="field__items"> <div class="field__item"><a href="/tag/drupal" hreflang="es">Drupal</a></div> <div class="field__item"><a href="/tag/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/tag/drupal-7x" hreflang="es">Drupal 7.x</a></div> <div class="field__item"><a href="/tag/twig" hreflang="es">Twig</a></div> </div> </div> <section data-drupal-selector="comments" class="comments"> <h2 class="comments__title">Comentarios</h2> <div class="add-comment"> <div class="add-comment__form"> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=272&amp;2=field_comments&amp;3=comment" token="d96fs2f8NKd88q03-l2WzEa5JPGEsqEWuRLD9OvvCsM"></drupal-render-placeholder> </div> </div> </section> Mon, 03 Jul 2017 13:02:10 +0000 keopx 272 at https://keopx.net Debugging Drush scripts con Xdebug y PhpStorm https://keopx.net/blog/debugging-drush-scripts-con-xdebug-y-phpstorm <span>Debugging Drush scripts con Xdebug y PhpStorm</span> <div class="text-content clearfix field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Para configurar correctamente un entornos para depurar con <a href="https://xdebug.org/">Xdebug</a> y <a href="https://www.jetbrains.com/phpstorm/">PhpStorm</a> los comandos <a href="https://github.com/drush-ops/drush">Drush</a> es necesario realizar una serie de configuración especifica.</p> <ul><li>Configurar una <strong><em>PHP Web Application</em> </strong>para depurar por la línea de comandos.</li> <li>Todo el código ejecutado debe estar disponible en el proyecto, incluyendo <strong>drush</strong>. <ul><li>Ej. Instalando drush como dependencia de composer (también, recuerde ejecutar drush desde su proyecto).</li> </ul></li> <li>Habilitar depuración <strong>xdebug</strong> para la línea de comandos.</li> </ul><pre> <code class="language-bash">sudo phpenmod xdebug</code></pre><ul><li>Un enlace simbólico de xdebug.ini de mi directorio<em> /etc/php/7.0/cli/conf.d</em> como estaba usando en <em>/etc/php/7.0/apache/conf.d</em> para la depuración web.</li> <li> <ul></ul><p> Ejemplo de configuración:</p></li> </ul><pre> <code class="language-bash">sudo vi /etc/php/7.0/cli/conf.d/20-xdebug.ini</code></pre><p>Y añadimos:</p> <pre> <code class="language-ini">zend_extension=xdebug.so xdebug.remote_connect_back = 1 xdebug.default_enable = 1 xdebug.remote_autostart = 1 xdebug.remote_enable = 1 xdebug.remote_port = 9000 xdebug.remote_handler = dbgp xdebug.max_nesting_level = 500 xdebug.idekey = PHPSTORM xdebug.profiler_enable_trigger = 1</code></pre><p>Utilice el botón "<strong>Listen for PHP Debug connections</strong>" de <strong>PhpStorm</strong>:</p> <ul><li>Establezca el cliente de depuración remota en la línea de comandos utilizando:</li> <li>Editamos ~/.bashrc y añadimos:</li> </ul><pre> <code class="language-bash"># PHPstorm drush debug export XDEBUG_CONFIG="idekey=PHPSTORM" </code></pre><ul><li>Establezca la configuración del servidor. Asegúrese de que el nombre que utiliza coincide con el nombre del servidor que configuró en PhpStorm: <ul><li>PHP_IDE_CONFIG = PHPSTORM</li> </ul></li> <li>Ejecute drush.</li> </ul><p>Si quereis correr <a href="https://xdebug.org/">Xdebug</a> con <a href="https://www.docker.com/">Docker</a> y/o <a href="https://www.vagrantup.com/">Vagrant</a> os recomiendo este post: <a href="http://blokspeed.net/blog/2016/02/debugging-drush-scripts-with-xdebug-and-phpstorm-on-vagrant-in-2016/">http://blokspeed.net/blog/2016/02/debugging-drush-scripts-with-xdebug-and-phpstorm-on-vagrant-in-2016/</a></p> <p>La verdad es que no recordaba como se configuraba el Xdebug para PhpStorm y Drush y gracias a <a href="https://twitter.com/jansev3n">Juanen</a> (<a href="https://www.drupal.org/u/jansete">jansete en Drupal</a>) me he vuelto a ponermelo bien y que menos que contribuirlo :D</p> </div> <span><span>keopx</span></span> <span><time datetime="2017-06-20T19:32:56+02:00" title="Martes, Junio 20, 2017 - 19:32">Mar, 20/06/2017 - 19:32</time> </span> <div class="field field--name-field-tax-cat field--type-entity-reference field--label-above"> <div class="field__label">Categoria</div> <div class="field__items"> <div class="field__item"><a href="/categoria/drupal" hreflang="es">Drupal</a></div> <div class="field__item"><a href="/categoria/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/categoria/drush" hreflang="es">Drush</a></div> <div class="field__item"><a href="/categoria/drupal-planeta" hreflang="es">Drupal Planeta</a></div> </div> </div> <div class="field field--name-field-tax-tag field--type-entity-reference field--label-above"> <div class="field__label">Tag</div> <div class="field__items"> <div class="field__item"><a href="/tag/drush" hreflang="es">Drush</a></div> <div class="field__item"><a href="/tag/drupal" hreflang="es">Drupal</a></div> <div class="field__item"><a href="/tag/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/tag/drupal-7x" hreflang="es">Drupal 7.x</a></div> <div class="field__item"><a href="/tag/xdebug" hreflang="es">Xdebug</a></div> <div class="field__item"><a href="/tag/debug" hreflang="es">debug</a></div> <div class="field__item"><a href="/tag/phpstorm" hreflang="es">PhpStorm</a></div> </div> </div> <section data-drupal-selector="comments" class="comments"> <h2 class="comments__title">Comentarios</h2> <div class="add-comment"> <div class="add-comment__form"> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=270&amp;2=field_comments&amp;3=comment" token="wgGKbiUh3crzk0RxGFdWGRUMK3JE0HDt8lHarEqlY3Q"></drupal-render-placeholder> </div> </div> </section> Tue, 20 Jun 2017 17:32:56 +0000 keopx 270 at https://keopx.net Cómo instalar y configurar Redis en Drupal 8 https://keopx.net/blog/como-instalar-y-configurar-redis-en-drupal-8 <span>Cómo instalar y configurar Redis en Drupal 8</span> <div class="text-content clearfix field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Voy a explicar cómo <strong>instalar y configurar Redis en Drupal 8.</strong> </p> <p>Redis es una base de datos popular basado en key-value.</p> <p>En el caso de <a href="https://www.drupal.org">Drupal</a> se usa como sistema de cache para la parte (backend) de gestión de contenidos, donde el sistema de cachea "estático" de las paginas no es suficiente.</p> <p>Con Redis notaremos rápidamente la fluidez y rapidez con la que se puede gestionar toda la parte que requiere de usuarios autenticados.</p> <ol><li>Instalar <em>Redis</em>:<br /><pre> <code class="language-bash">sudo apt-get install redis-server</code></pre><p>También puedes ver <a href="https://github.com/keopx/docker-redis/blob/master/3.2/Dockerfile">Dockerfile</a></p> </li> <li>Instalar soporte de <em>Redis</em> para PHP:<br /><pre> <code class="language-bash">sudo apt-get install php7.0-redis sudo a2enmod php7.0-redis</code></pre><p>También puedes ver <a href="https://github.com/keopx/docker-apache-php/blob/master/7.0/Dockerfile">Dockerfile</a></p> </li> <li>Instalar el modulo <em>redis</em> de <em>Drupal</em>:<br /><pre> <code class="language-bash">composer require drupal/redis</code></pre><p>o</p> <pre> <code class="language-bash">drush dl redis</code></pre></li> <li> <p>Configurar <strong>redis</strong> para <strong>Drupal</strong>:</p> </li> </ol><p>En el <strong>settings.php</strong> o mejor en el drush añadir lo siguiente:</p> <pre> <code class="language-php">&lt;?php /** * Set redis configuration. */ /** @see: https://docs.platform.sh/frameworks/drupal8/redis.html */ if (extension_loaded('redis')) { // Set Redis as the default backend for any cache bin not otherwise specified. // $settings['cache']['default'] = 'cache.backend.redis'; $settings['redis.connection']['interface'] = 'PhpRedis'; // Can be "Predis". $settings['redis.connection']['host'] = 'redis'; $settings['redis.connection']['port'] = '6379'; // $settings['redis.connection']['password'] = "mypassword"; // If you are using passwords, otherwise, omit // Apply changes to the container configuration to better leverage Redis. // This includes using Redis for the lock and flood control systems, as well // as the cache tag checksum. Alternatively, copy the contents of that file // to your project-specific services.yml file, modify as appropriate, and // remove this line. $settings['container_yamls'][] = 'modules/contrib/redis/example.services.yml'; // Allow the services to work before the Redis module itself is enabled. $settings['container_yamls'][] = 'modules/contrib/redis/redis.services.yml'; // Manually add the classloader path, this is required for the container cache bin definition below // and allows to use it without the redis module being enabled. $class_loader-&gt;addPsr4('Drupal\\redis\\', 'modules/contrib/redis/src'); // Use redis for container cache. // The container cache is used to load the container definition itself, and // thus any configuration stored in the container itself is not available // yet. These lines force the container cache to use Redis rather than the // default SQL cache. $settings['bootstrap_container_definition'] = [ 'parameters' =&gt; [], 'services' =&gt; [ 'redis.factory' =&gt; [ 'class' =&gt; 'Drupal\redis\ClientFactory', ], 'cache.backend.redis' =&gt; [ 'class' =&gt; 'Drupal\redis\Cache\CacheBackendFactory', 'arguments' =&gt; ['@redis.factory', '@cache_tags_provider.container', '@serialization.phpserialize'], ], 'cache.container' =&gt; [ 'class' =&gt; '\Drupal\redis\Cache\PhpRedis', 'factory' =&gt; ['@cache.backend.redis', 'get'], 'arguments' =&gt; ['container'], ], 'cache_tags_provider.container' =&gt; [ 'class' =&gt; 'Drupal\redis\Cache\RedisCacheTagsChecksum', 'arguments' =&gt; ['@redis.factory'], ], 'serialization.phpserialize' =&gt; [ 'class' =&gt; 'Drupal\Component\Serialization\PhpSerialize', ], ], ]; /** Optional prefix for cache entries */ $settings['cache_prefix'] = 'any-text-you-want'; /** @see: https://pantheon.io/docs/redis/ */ // Always set the fast backend for bootstrap, discover and config, otherwise // this gets lost when redis is enabled. $settings['cache']['bins']['bootstrap'] = 'cache.backend.chainedfast'; $settings['cache']['bins']['discovery'] = 'cache.backend.chainedfast'; $settings['cache']['bins']['config'] = 'cache.backend.chainedfast'; /** @see: https://github.com/md-systems/redis */ // Use for all bins otherwise specified. $settings['cache']['default'] = 'cache.backend.redis'; // Use this to only use it for specific cache bins. $settings['cache']['bins']['render'] = 'cache.backend.redis'; // Use for all queues unless otherwise specified for a specific queue. $settings['queue_default'] = 'queue.redis'; // Or if you want to use reliable queue implementation. $settings['queue_default'] = 'queue.redis_reliable'; // Use this to only use Redis for a specific queue (aggregator_feeds in this case). $settings['queue_service_aggregator_feeds'] = 'queue.redis'; // Or if you want to use reliable queue implementation. $settings['queue_service_aggregator_feeds'] = 'queue.redis_reliable'; } </code></pre><p>Ver <a href="https://gist.github.com/keopx/7d5fe4d7a890c792c43bb79cf56718e0">https://gist.github.com/keopx/7d5fe4d7a890c792c43bb79cf56718e0</a></p> <p>Una ves hecho esto ir a la pagina de estado (<em>/admin/reports/status</em>) para comprobar que todo esta bien.</p> <p><img alt="Drupal Redis Setup" data-entity-type="file" data-entity-uuid="54abaecf-03e5-4c6e-8bfe-f1e23743c011" src="/sites/default/files/inline-images/Drupal_redis.png" width="587" height="68" /></p> <p>NOTA: si veis que cualquier parametrización es mejor, por favor comentadlo. Gracias.</p> <p>Referencias:</p> <ul><li><a href="https://gist.github.com/keopx/7d5fe4d7a890c792c43bb79cf56718e0">https://gist.github.com/keopx/7d5fe4d7a890c792c43bb79cf56718e0</a></li> <li><a href="https://docs.platform.sh/frameworks/drupal8/redis.html">https://docs.platform.sh/frameworks/drupal8/redis.html</a></li> <li><a href="https://pantheon.io/docs/redis/">https://pantheon.io/docs/redis/</a></li> <li><a href="https://github.com/md-systems/redis">https://github.com/md-systems/redis</a></li> <li><a href="https://github.com/keopx/docker-lamp">https://github.com/keopx/docker-lamp</a></li> </ul><p> </p> <p> </p> </div> <span><span>keopx</span></span> <span><time datetime="2017-06-18T17:25:35+02:00" title="Domingo, Junio 18, 2017 - 17:25">Dom, 18/06/2017 - 17:25</time> </span> <div class="field field--name-field-tax-cat field--type-entity-reference field--label-above"> <div class="field__label">Categoria</div> <div class="field__items"> <div class="field__item"><a href="/categoria/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/categoria/redis" hreflang="es">Redis</a></div> <div class="field__item"><a href="/categoria/drupal" hreflang="es">Drupal</a></div> <div class="field__item"><a href="/categoria/drupal-planeta" hreflang="es">Drupal Planeta</a></div> </div> </div> <div class="field field--name-field-tax-tag field--type-entity-reference field--label-above"> <div class="field__label">Tag</div> <div class="field__items"> <div class="field__item"><a href="/tag/drupal" hreflang="es">Drupal</a></div> <div class="field__item"><a href="/tag/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/tag/redis" hreflang="es">Redis</a></div> <div class="field__item"><a href="/tag/php" hreflang="es">php</a></div> </div> </div> <section data-drupal-selector="comments" class="comments"> <h2 class="comments__title">Comentarios</h2> <div class="add-comment"> <div class="add-comment__form"> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=269&amp;2=field_comments&amp;3=comment" token="qCV33nxDY_ejWnQ4sUSyDpnaLr7joysNjRbFgsrijWE"></drupal-render-placeholder> </div> </div> </section> Sun, 18 Jun 2017 15:25:35 +0000 keopx 269 at https://keopx.net Drupal 8: El poder de webform (antes yamlform) https://keopx.net/talk/drupal-8-el-poder-de-webform-antes-yamlform <span>Drupal 8: El poder de webform (antes yamlform)</span> <span><span>keopx</span></span> <span><time datetime="2017-05-06T15:25:22+02:00" title="Sábado, Mayo 6, 2017 - 15:25">Sáb, 06/05/2017 - 15:25</time> </span> <div class="text-content clearfix field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Drupal 8: <a href="https://2017.drupalcamp.es/sessions/el-poder-de-webform-antes-yamform-regiguren">El poder de webform (antes yamlform)</a></p> <p>Sesión realizada en la <a href="https://2017.drupalcamp.es">DrupalCamp</a> 2017 en Madrid.</p> <p class="text-align-center"> <iframe allowfullscreen="true" frameborder="0" height="569" mozallowfullscreen="true" src="https://docs.google.com/presentation/d/1ucPeKBqHsU6oZOZtrprBzx-9FWvh-mSjgWZ55Pb1t-I/embed?start=false&amp;loop=false&amp;delayms=3000" webkitallowfullscreen="true" width="960"></iframe></p> <p class="text-align-center"> <iframe allowfullscreen="" frameborder="0" height="360" mozallowfullscreen="" src="https://player.vimeo.com/video/218628416" webkitallowfullscreen="" width="640"></iframe></p> <p class="text-align-center"><a href="https://vimeo.com/218628416">El poder de Webform (antes YamlForm) - Ruben Egiguren (keopx) y David Gil</a></p> </div> <div class="field field--name-field-tax-cat field--type-entity-reference field--label-above"> <div class="field__label">Categoria</div> <div class="field__items"> <div class="field__item"><a href="/categoria/drupal" hreflang="es">Drupal</a></div> <div class="field__item"><a href="/categoria/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/categoria/drupal-planeta" hreflang="es">Drupal Planeta</a></div> <div class="field__item"><a href="/categoria/talk" hreflang="es">Talk</a></div> </div> </div> <div class="field field--name-field-tax-tag field--type-entity-reference field--label-above"> <div class="field__label">Tag</div> <div class="field__items"> <div class="field__item"><a href="/tag/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/tag/drupal" hreflang="es">Drupal</a></div> <div class="field__item"><a href="/tag/drupalcamp" hreflang="es">DrupalCamp</a></div> <div class="field__item"><a href="/tag/webform" hreflang="es">Webform</a></div> </div> </div> Sat, 06 May 2017 13:25:22 +0000 keopx 273 at https://keopx.net Drupal 8: View con contenido relacionado filtrado con autocompletado https://keopx.net/blog/drupal-8-view-con-contenido-relacionado-filtrado-con-autocompletado <span>Drupal 8: View con contenido relacionado filtrado con autocompletado</span> <div class="text-content clearfix field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Vamos a ver como crear una <strong>view con contenido relacionado filtrado con autocompletado</strong> en <strong>Drupal 8.</strong></p> <p>He estado varios días dándole vueltas a este caso, probando diferentes módulos etc.</p> <p>Pregunte en los diferentes canales de <a href="https://www.drupal.org/irc">#IRC de Drupal</a> y nadie supo resolverlo, ni siquiera en el equipo dábamos con la opción correcta. Entre los que intentaron ayudarme, gracias por vuestro tiempo, no logramos dar con la solución. Puede que no me explicase bien, suele pasarme.</p> <p>Después de varios intentos fallido me empeñe en mirar en <strong>Relationships</strong> y probar varias opciones hasta que di con ello. Además de esto también es necesario el modulo <a href="https://www.drupal.org/project/views_autocomplete_filters">Views Autocomplete Filters</a>.</p> <p>Como es bastante complicado de explicarlo, me <strong>he creado un vídeo y un módulo</strong> con el ejemplo real para que pueda usarse como base.</p> <p class="text-align-center"> <iframe allowfullscreen="" frameborder="0" height="480" src="https://www.youtube.com/embed/YT3HeSmZW1c" width="853"></iframe></p> <p>El ejemplo esta disponible en github con el nombre <strong>Demo Views Related Content with Automplete Filter</strong>:</p> <ul><li>Nombre del modulo: <a href="https://github.com/keopx/demo_related_autocomplete">demo_related_autocomplete</a></li> </ul><p>En caso de tener alguna duda siempre podréis contactarme por el IRC o añadir un comentario.</p> <p>Gracias por vuestro tiempo:</p> <ul><li><a href="https://www.drupal.org/u/aitor">Aitor Resano</a></li> <li><a href="https://www.drupal.org/u/fernandomagan">Fernando Magan</a></li> <li><a href="https://www.drupal.org/u/marcoscano">Marcos Cano</a></li> <li><a href="https://www.drupal.org/u/jlbellido">Jose Luis Bellido</a></li> <li> <p><a href="https://www.drupal.org/u/jsbalsera">Jesús Sánchez Balsera</a></p> </li> </ul></div> <span><span>keopx</span></span> <span><time datetime="2016-09-17T17:29:11+02:00" title="Sábado, Septiembre 17, 2016 - 17:29">Sáb, 17/09/2016 - 17:29</time> </span> <div class="field field--name-field-tax-cat field--type-entity-reference field--label-above"> <div class="field__label">Categoria</div> <div class="field__items"> <div class="field__item"><a href="/categoria/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/categoria/drupal" hreflang="es">Drupal</a></div> <div class="field__item"><a href="/categoria/drupal-planeta" hreflang="es">Drupal Planeta</a></div> </div> </div> <div class="field field--name-field-tax-tag field--type-entity-reference field--label-above"> <div class="field__label">Tag</div> <div class="field__items"> <div class="field__item"><a href="/tag/drupal" hreflang="es">Drupal</a></div> <div class="field__item"><a href="/tag/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/tag/views" hreflang="es">Views</a></div> </div> </div> <section data-drupal-selector="comments" class="comments"> <h2 class="comments__title">Comentarios<span class="comments__count">2</span></h2> <div class="add-comment"> <div class="add-comment__form"> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=267&amp;2=field_comments&amp;3=comment" token="kEA1cFZdzalf_JIyBC-WFYxvNktoKNcYwm95EV6vqKo"></drupal-render-placeholder> </div> </div> <article data-comment-user-id="0" id="comment-1820" class="comment js-comment comment--level-1 by-anonymous" role="article" data-drupal-selector="comment"> <span class="hidden" data-comment-timestamp="1477127810"></span> <div class="comment__picture-wrapper"> <div class="comment__picture"> <div> </div> </div> </div> <div class="comment__text-wrapper"> <footer class="comment__meta"> <p class="comment__author"><a rel="nofollow" href="http://example.com">Anonymous (no verificado)</a></p> <p class="comment__time">hace 7 años 4 meses</p> </footer> <div class="comment__content"> <h3><a href="/comment/1820#comment-1820" class="permalink" rel="bookmark" hreflang="es">Muy buen aporte. Sobre todo…</a></h3> <div class="text-content field field--name-comment-body field--type-text-long field--label-hidden field__item comment__text-content"><p>Muy buen aporte. Sobre todo la forma en la que se aplican los exposed filters usando arguments. Eso fue nuevo para mi!</p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=1820&amp;1=default&amp;2=es&amp;3=" token="CjYchAeWTDYYRW411lOgC_s_qn5Hx74xJWAUt3r5ghI"></drupal-render-placeholder> </div> </div> </article> <article data-comment-user-id="0" id="comment-3035" class="comment js-comment comment--level-1 by-anonymous" role="article" data-drupal-selector="comment"> <span class="hidden" data-comment-timestamp="1493460627"></span> <div class="comment__picture-wrapper"> <div class="comment__picture"> <div> </div> </div> </div> <div class="comment__text-wrapper"> <footer class="comment__meta"> <p class="comment__author"><a rel="nofollow" href="http://example.com">Anonymous (no verificado)</a></p> <p class="comment__time">hace 6 años 9 meses</p> </footer> <div class="comment__content"> <h3><a href="/comment/3035#comment-3035" class="permalink" rel="bookmark" hreflang="es">Genial!</a></h3> <div class="text-content field field--name-comment-body field--type-text-long field--label-hidden field__item comment__text-content"><p>Gracias por post!<br /> Me ha resuelto mi problema :-)</p> </div> <drupal-render-placeholder callback="comment.lazy_builders:renderLinks" arguments="0=3035&amp;1=default&amp;2=es&amp;3=" token="9LUv6iaNhDfKgF3fCKxEDLnnuFedfIbfiiXn7irm0MM"></drupal-render-placeholder> </div> </div> </article> </section> Sat, 17 Sep 2016 15:29:11 +0000 keopx 267 at https://keopx.net Coder Sniffer for Drupal Coding Standards https://keopx.net/blog/coder-sniffer-drupal-coding-standards <span>Coder Sniffer for Drupal Coding Standards</span> <div class="text-content clearfix field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Install Coder with composer:</p> <pre> <code class="language-bash">composer global require drupal/coder</code></pre><p><strong>Custom setup using for Drupal Coding Standards.</strong></p> <p>Add symbolic path to support <em>Drupal</em> and <em>DrupalPractice</em> Standard:</p> <pre> <code class="language-bash">$ ln -s ~/.composer/vendor/drupal/coder/coder_sniffer/Drupal ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/Drupal $ ln -s ~/.composer/vendor/drupal/coder/coder_sniffer/DrupalPractice ~/.composer/vendor/squizlabs/php_codesniffer/CodeSniffer/Standards/DrupalPractice</code></pre><p>If you're using <em>bash</em>, edit <em>$HOME/.bashrc</em> (or <em>$HOME/.bash_profile</em>).</p> <pre> <code class="language-bash">alias drupalcs="~/.composer/vendor/bin/phpcs --colors --standard=~/.composer/vendor/drupal/coder/coder_sniffer/Drupal --extensions=php,module,inc,install,test,profile,theme,js,css,info,txt,md"</code></pre><p>Or if you added symbolic links:</p> <pre> <code class="language-bash">alias drupalcs="~/.composer/vendor/bin/phpcs --colors --standard=Drupal --extensions=php,module,inc,install,test,profile,theme,js,css,info,txt,md"</code></pre><pre> <code class="language-bash">source .bashrc</code></pre><p>Execution example:</p> <pre> <code class="language-bash">$ drupalcs modules/custom/custom_crm FILE: ...ww/docroot/modules/custom/custom_crm/src/CrmConfigUri.php ---------------------------------------------------------------------- FOUND 3 ERRORS AFFECTING 3 LINES ---------------------------------------------------------------------- 3 | ERROR | [x] There must be one blank line after the namespace | | declaration 6 | ERROR | [x] Missing class doc comment 28 | ERROR | [x] Expected 1 newline at end of file; 0 found ---------------------------------------------------------------------- PHPCBF CAN FIX THE 3 MARKED SNIFF VIOLATIONS AUTOMATICALLY ---------------------------------------------------------------------- Time: 157ms; Memory: 7.75Mb </code></pre><p>References:</p> <ul><li><a href="https://www.drupal.org/project/coder">Coder</a></li> <li><a href="https://www.drupal.org/node/1419988">Installing Coder Sniffer</a></li> <li><a href="https://www.drupal.org/node/1587138">Command Line Usage</a></li> </ul></div> <span><span>keopx</span></span> <span><time datetime="2016-07-16T11:38:42+02:00" title="Sábado, Julio 16, 2016 - 11:38">Sáb, 16/07/2016 - 11:38</time> </span> <div class="field field--name-field-tax-cat field--type-entity-reference field--label-above"> <div class="field__label">Categoria</div> <div class="field__items"> <div class="field__item"><a href="/categoria/drupal" hreflang="es">Drupal</a></div> <div class="field__item"><a href="/categoria/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/categoria/drupal-7x" hreflang="es">Drupal 7.x</a></div> </div> </div> <div class="field field--name-field-tax-tag field--type-entity-reference field--label-above"> <div class="field__label">Tag</div> <div class="field__items"> <div class="field__item"><a href="/tag/drupal-7x" hreflang="es">Drupal 7.x</a></div> <div class="field__item"><a href="/tag/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/tag/quality" hreflang="es">Quality</a></div> </div> </div> <section data-drupal-selector="comments" class="comments"> <h2 class="comments__title">Comentarios</h2> <div class="add-comment"> <div class="add-comment__form"> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=266&amp;2=field_comments&amp;3=comment" token="gqLjaRVS46gQeekKVb4H5xj9BaiDawhrBhoEKGIhT7s"></drupal-render-placeholder> </div> </div> </section> Sat, 16 Jul 2016 09:38:42 +0000 keopx 266 at https://keopx.net Drupal 8 WorkShop - Drupal Trainig Day https://keopx.net/talk/drupal-8-workshop-drupal-trainig-day <span>Drupal 8 WorkShop - Drupal Trainig Day</span> <span><span>keopx</span></span> <span><time datetime="2015-09-11T09:10:42+02:00" title="Viernes, Septiembre 11, 2015 - 09:10">Vie, 11/09/2015 - 09:10</time> </span> <div class="text-content clearfix field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><a href="https://es.slideshare.net/keopx/drupal-8-work-shop">Drupal 8 WorkShop - Drupal Trainig Day</a></p> <p>Workshop introductorio a Drupal 8 utilizada para los Drupal Training Day. En esta sesion se explica su historia,su estado actual y potencial para el uso diario en grandes plataformas.</p> <p>Quisiera dar las gracias a <strong>Ruben Teijeiro</strong> @rteijeiro por facilitarnos el material de dicha charla.</p> <p class="text-align-center"> <iframe allowfullscreen="" frameborder="0" height="485" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/key/JEklNZb5ciPjdS" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" width="595"></iframe></p> <div class="text-align-center" style="margin-bottom:5px"><strong><a href="//www.slideshare.net/keopx/drupal-8-work-shop" target="_blank" title="Drupal 8 WorkShop">Drupal 8 WorkShop</a> </strong> de <strong><a href="https://www.slideshare.net/keopx" target="_blank">Keopx </a></strong></div> </div> <div class="field field--name-field-tax-cat field--type-entity-reference field--label-above"> <div class="field__label">Categoria</div> <div class="field__items"> <div class="field__item"><a href="/categoria/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/categoria/drupal-planeta" hreflang="es">Drupal Planeta</a></div> <div class="field__item"><a href="/categoria/drupal" hreflang="es">Drupal</a></div> </div> </div> <div class="field field--name-field-tax-tag field--type-entity-reference field--label-above"> <div class="field__label">Tag</div> <div class="field__items"> <div class="field__item"><a href="/tag/drupal" hreflang="es">Drupal</a></div> <div class="field__item"><a href="/tag/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/tag/drupal-training-day" hreflang="es">Drupal TraininG Day</a></div> </div> </div> Fri, 11 Sep 2015 07:10:42 +0000 keopx 280 at https://keopx.net Drupal 8 WorkShop - eGhost https://keopx.net/talk/drupal-8-workshop-eghost <span>Drupal 8 WorkShop - eGhost</span> <span><span>keopx</span></span> <span><time datetime="2015-07-12T09:01:16+02:00" title="Domingo, Julio 12, 2015 - 09:01">Dom, 12/07/2015 - 09:01</time> </span> <div class="text-content clearfix field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><a href="https://www.slideshare.net/keopx/drupal-8-workshop-eghost-2015">Drupal 8 WorkShop - eGhost</a></p> <p>Workshop introductorio a Drupal 8, explicando su historia y su actual potencial para el uso diario en grandes plataformas.</p> <p>Quisiera dar las gracias a <strong>Ruben Teijeiro</strong> @rteijeiro por facilitarnos el material de dicha charla.</p> <p class="text-align-center"> <iframe allowfullscreen="" frameborder="0" height="485" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/key/KHcdXUwu7l68oC" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" width="595"></iframe></p> <div class="text-align-center" style="margin-bottom:5px"><strong><a href="//www.slideshare.net/keopx/drupal-8-workshop-eghost-2015" target="_blank" title="Drupal 8 WorkShop - e-Ghost 2015 ">Drupal 8 WorkShop - e-Ghost 2015 </a> </strong> de <strong><a href="//www.slideshare.net/keopx" target="_blank">Keopx </a></strong></div> </div> <div class="field field--name-field-tax-cat field--type-entity-reference field--label-above"> <div class="field__label">Categoria</div> <div class="field__items"> <div class="field__item"><a href="/categoria/drupal" hreflang="es">Drupal</a></div> <div class="field__item"><a href="/categoria/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/categoria/drupal-planeta" hreflang="es">Drupal Planeta</a></div> </div> </div> <div class="field field--name-field-tax-tag field--type-entity-reference field--label-above"> <div class="field__label">Tag</div> <div class="field__items"> <div class="field__item"><a href="/tag/drupal" hreflang="es">Drupal</a></div> <div class="field__item"><a href="/tag/drupal-8x" hreflang="es">Drupal 8.x</a></div> </div> </div> Sun, 12 Jul 2015 07:01:16 +0000 keopx 279 at https://keopx.net DrupalDay Bilbao 2014: Publica tu proyecto en drupal.org https://keopx.net/talk/drupalday-bilbao-2014-publica-tu-proyecto-en-drupalorg <span>DrupalDay Bilbao 2014: Publica tu proyecto en drupal.org</span> <span><span>keopx</span></span> <span><time datetime="2014-11-08T19:46:12+01:00" title="Sábado, Noviembre 8, 2014 - 19:46">Sáb, 08/11/2014 - 19:46</time> </span> <div class="text-content clearfix field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Sesión de contribución a <a href="https://www.drupal.org">drupal.org</a> con nuevos módulos en el <a href="https://2014.drupalday.es/">DrupalDay Bilbao 2014</a>.</p> <p>Esta sesión la realice junto a <a href="https://www.drupal.org/u/alvar0hurtad0">Alvaro Hurtado</a> en la que compartimos la experiencia que tuve cuando le <em>mentorice</em> para la publicación de su primer modulo.</p> <ul><li>Esto tiene que existir ! Módulos relacionados! Issues abandonadas! Un módulo para drupal5 que se parece pero no es! …</li> <li>¿Alguien sabe cómo…? no me suenaNOOOOOO! !!!!!!!</li> <li>Debería existir y estar contribuido BUSCA A ALGUIEN QUE TE LO PUBLIQUE PASA EL PROCESO DE REVISIÓN.</li> </ul><p> </p> <p class="text-align-center"> <iframe allowfullscreen="" frameborder="0" height="485" marginheight="0" marginwidth="0" scrolling="no" src="//www.slideshare.net/slideshow/embed_code/key/BWVDuqAkJjdGsO" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" width="595"></iframe></p> <div class="text-align-center" style="margin-bottom:5px"><strong><a href="//www.slideshare.net/keopx/drupalday-bilbao-2014-publica-tu-proyecto-en-drupalorg" target="_blank" title="DrupalDay Bilbao 2014: Publica tu proyecto en drupal.org">DrupalDay Bilbao 2014: Publica tu proyecto en drupal.org</a> </strong> de <strong><a href="https://www.slideshare.net/keopx" target="_blank">Keopx </a></strong></div> <div> </div> <div>Sesión: <a href="https://2014.drupalday.es/sesion/publica-tu-proyecto-en-drupalorg.html">https://2014.drupalday.es/sesion/publica-tu-proyecto-en-drupalorg.html</a></div> </div> <div class="field field--name-field-tax-cat field--type-entity-reference field--label-above"> <div class="field__label">Categoria</div> <div class="field__items"> <div class="field__item"><a href="/categoria/drupal" hreflang="es">Drupal</a></div> <div class="field__item"><a href="/categoria/drupal-7x" hreflang="es">Drupal 7.x</a></div> <div class="field__item"><a href="/categoria/drupal-8x" hreflang="es">Drupal 8.x</a></div> </div> </div> <div class="field field--name-field-tax-tag field--type-entity-reference field--label-above"> <div class="field__label">Tag</div> <div class="field__items"> <div class="field__item"><a href="/tag/drupal-7x" hreflang="es">Drupal 7.x</a></div> <div class="field__item"><a href="/tag/drupal" hreflang="es">Drupal</a></div> <div class="field__item"><a href="/tag/drupal-8x" hreflang="es">Drupal 8.x</a></div> <div class="field__item"><a href="/tag/drupaday" hreflang="es">DrupaDay</a></div> </div> </div> Sat, 08 Nov 2014 18:46:12 +0000 keopx 290 at https://keopx.net