Dev https://www.carloscarrascal.com/ es Related By Terms para Drupal 7 https://www.carloscarrascal.com/blog/related-terms-para-drupal-7 <article data-history-node-id="1" class="node node--type-blog-post node--view-mode-rss group-one-column ds-2col-stacked-fluid clearfix"> <div class="group-header"> <div class="field field--name-node-title field--type-ds field--label-hidden field--item"><h1> Related By Terms para Drupal 7 </h1> </div> <div class="field field--name-node-post-date field--type-ds field--label-hidden field--item">Domingo, Septiembre 3, 2017 - 17:15</div> </div> <div class="group-left"> <div class="field field--name-field-tags field--type-entity-reference field--label-hidden field--items"> <div class="field--item"><a href="/tags/drupal" hreflang="es">Drupal</a></div> <div class="field--item"><a href="/tags/dev" hreflang="es">Dev</a></div> <div class="field--item"><a href="/tags/d7" hreflang="es">D7</a></div> <div class="field--item"><a href="/tags/relatedbyterms" hreflang="es">RelatedByTerms</a></div> </div> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><p>Me ha costado pero por fin he publicado mi primer módulo en Drupal.org. Se llama <a href="https://www.drupal.org/project/relatedbyterms">Related by Terms</a> y básicamente crea un bloque para mostrar contenido relacionado con el nodo que estamos viendo.</p> <p>Para calcular las relaciones con otros nodos estoy utilizando los términos de taxonomías, de forma que se cuentan las coincidencias en términos del nodo actual, y aparecerán primero en la lista los nodos con mas coincidencias.</p> <p>La query que estoy usando es así:</p> <pre> /** * Create and prepare the database query. * * The query uses a tag called relatedbyterms_count * that will allow other modules to alter it. */ function relatedbyterms_get_query($nid) { global $language; $limit = relatedbyterms_get_elements_displayed(); $subquery = db_select('taxonomy_index', 't1'); $subquery-&gt;condition('nid', $nid); $subquery-&gt;addField('t1', 'tid'); $query = db_select('taxonomy_index', 't'); $query-&gt;join('node', 'n', 'n.nid = t.nid'); $query-&gt;addTag('relatedbyterms_count'); $query-&gt;addTag('node_access'); $query-&gt;condition('t.tid', $subquery, 'IN'); $query-&gt;condition('t.nid', $nid, '&lt;&gt;'); $query-&gt;condition('n.language', $language-&gt;language); $query-&gt;addField('t', 'nid'); $query-&gt;addExpression('count(\'t.nid\')', 'count'); $query-&gt;orderBy('count, nid', 'DESC'); $query-&gt;groupBy('t.nid'); if ($limit &gt; 0) { $query-&gt;range(0, $limit); } return $query; } </pre> <p>Como podeis ver se usa la tabla <em>taxonomy_index</em>, donde se mantiene un listado de todos los términos de taxonomía asociados a nodos. Mediante un <em>count()</em> y un <em>groupBy</em> puedo agrupar y contar las coincidencias en términos con otros nodos.</p> <p>Acabo de publicar la primera versión estable del módulo y ahora estoy trabajando para poder incluirlo en la <a href="https://www.drupal.org/node/2905714#comment-12245312">revisión de seguridad de Drupal</a>.</p> <p>Estoy abierto a sugerencias o comentarios...</p> </div> </div> <div class="group-footer"> <section> <h2>Añadir nuevo comentario</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=1&amp;2=comment&amp;3=comment" token="TPDftITiSkK7fDcIvkjj1cDUjEih2r6BVIhw_dm-H4I"></drupal-render-placeholder> </section> </div> </article> Sun, 03 Sep 2017 15:15:23 +0000 root 1 at https://www.carloscarrascal.com Desarrollo Drupal con Sublime Editor 3 https://www.carloscarrascal.com/blog/desarrollo-drupal-con-sublime-editor-3 <article data-history-node-id="23" class="node node--type-blog-post node--view-mode-rss group-one-column ds-2col-stacked-fluid clearfix"> <div class="group-header"> <div class="field field--name-node-title field--type-ds field--label-hidden field--item"><h1> Desarrollo Drupal con Sublime Editor 3 </h1> </div> <div class="field field--name-node-post-date field--type-ds field--label-hidden field--item">Sábado, Septiembre 2, 2017 - 15:20</div> </div> <div class="group-left"> <div class="field field--name-field-tags field--type-entity-reference field--label-hidden field--items"> <div class="field--item"><a href="/tags/drupal" hreflang="es">Drupal</a></div> <div class="field--item"><a href="/tags/linux" hreflang="es">Linux</a></div> <div class="field--item"><a href="/tags/dev" hreflang="es">Dev</a></div> <div class="field--item"><a href="/tags/php" hreflang="es">PHP</a></div> </div> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><p><a href="https://www.sublimetext.com/">Sublime Text</a> lleva siendo mi editor preferido para trabajar desde hace un montón de años. Es muy ligero, me gustan los atajos de teclado, muy configurable y tiene un sistema de <em>plugins</em> que le da mucha potencia.</p> <p>La versión 3 lleva en beta por lo menos desde 2013, y todo el tiempo que llevo usándola no he tenido problemas.</p> <p>Quería escribir un articulo con mi configuración personal que utilizo para trabajar en proyectos Drupal, y que aporta funcionalidad y facilita la vida. Como resumen:</p> <ul> <li>Revisión de código al momento: Marcado de estándares de Drupal, errores de sintaxis, etc.</li> <li>Marcado de modificaciones en Git: Cada cambio que hacemos en un fichero lo vemos resaltado, muy útil para saber de un vistazo las modificaciones que hemos hecho al archivo.</li> </ul> <p>Lo primero de todo es instalar el editor. Estamos de suerte porque tenemos paquetes binarios empaquetados para unas cuantas distribuciones Linux. Este es el enlace de descargas:</p> <p><a href="https://www.sublimetext.com/docs/3/linux_repositories.html" target="_blank">https://www.sublimetext.com/docs/3/linux_repositories.html</a></p> <p> </p> <h2>Package Control</h2> <p>La primera extensión que vamos a instalar es básica para sacarle buen partido a este editor: <a href="https://packagecontrol.io/docs/usage">Package Control</a>. Este <em>plugin</em> nos va a ayudar a instalar fácilmente otros plugins, básicamente. Para instalar paquete Package Control, vayamos a su pagina:</p> <p><a href="https://packagecontrol.io/installation" target="_blank">https://packagecontrol.io/installation</a></p> <p>Una vez instalado podremos utilizar <kbd>CTRL + SHIFT + p</kbd> para abrir una consola donde podremos ejecutar comandos.</p> <p> </p> <h2>Instalar Sublime linter</h2> <p><a href="https://github.com/SublimeLinter/SublimeLinter3">Sublime Linter</a> es un <em>plugin</em> genérico que sirve de base para otros '<em>linters</em>' mas específicos (PHP, Java, SASS, etc.) que necesitamos instalar primero. Estos <em>plugins</em> nos ayudarán a mantener nuestro código limpio y seguir los estándares del lenguaje en el que estamos programando, de forma que nos van avisando si cometemos errores de formato o sintaxis, a media que escribimos el código. Lint significa pelusa en ingles, y eso es justo lo que hacen estos <em>plugins</em>, quitar pelusa.</p> <p>Instalarlo es sencillo una vez tenemos el <em>package manager</em> instalado:</p> <ol> <li>Abrimos comandos con <kbd>CTRL+SHIFT+p</kbd></li> <li>Teclear <em>install</em> y ENTER</li> <li>buscamos el paquete SublimeLinter</li> <li>ENTER otra vez</li> </ol> <p>Y ya lo tenemos. Seguimos adelante.</p> <p> </p> <h2>Instalar PHP_CodeSniffer (phpcs)</h2> <p><a href="https://github.com/squizlabs/PHP_CodeSniffer">PHP_CodeSniffer</a> es la herramienta que nos va a ayudar a identificar cualquier violación de los estándares de PHP. Es un ejecutable que debemos instalar en nuestro sistema, por lo que necesitamos tenerlo en nuestra variable <em>PATH</em>. La ultima versión a fecha de escribir este articulo es la 3.0.2, pero para hacerlo funcionar con el modulo <em>Coder</em> de Drupal necesitamos quedarnos con la 2.7.0. Cuidado con esto que puede cambiar en el futuro, así que revisa las versiones antes de instalar.</p> <p>La forma mas sencilla de instalarlo es usando <em>pear</em>:</p> <pre> sudo pear install PHP_CodeSniffer-2.7.0</pre> <p>Con esto tendremos dos ejecutables:</p> <ul> <li><em>phpcs</em>: el "code sniffer" para inspeccionar el código y reportar errores.</li> <li><em>phpcbf</em>: el "Code Beautifier and Fixer", que se utiliza para realizar correcciones automáticas en el código.</li> </ul> <p> </p> <h2>Añadir los estándares de Drupal a phpcs. Módulo Coder</h2> <p>Ahora que ya tenemos instalado <em>phpcs</em>, necesitamos incluirle las definiciones de los estándares de código de Drupal. Para esto instalaremos el módulo <a href="https://www.drupal.org/project/coder">Coder</a> de Drupal. Vayamos a la carpeta donde lo queramos dejar instalado, que puede ser cualquier sitio, no hace falta que sea dentro de un proyecto o sitio Drupal. Eso si, antes necesitaremos tener instalado <a href="http://docs.drush.org/en/8.x/install-alternative/">Drush</a>. Por ejemplo:</p> <pre> cd /path/para/coder drush dl coder</pre> <p>Con esto deberíamos haber instalado la versión 8.x que es la última. Ahora ya podemos decir a phpcs donde están estos estándares de Drupal:</p> <pre> sudo phpcs --config-<strong>set</strong> installed_paths /path/para/coder/coder/coder_sniffer</pre> <p>Y ahora ya podemos ejecutar phpcs para revisar cualquier archivo de código Drupal, así:</p> <pre> phpcs --standard=Drupal ruta/al/archivo/a/revisar</pre> <div> </div> <h2>Volvemos a Sublime: SublimeLinter-phpcs</h2> <p>Ahora que ya tenemos <em>phpcs</em> funcionando nos volvemos a Sublime para instalar el <em>plugin</em> que vamos usar mientras picamos código, <a href="https://github.com/SublimeLinter/SublimeLinter-phpcs">SublimeLinter-phpcs</a>. Para instalarlo:</p> <ol> <li>Abrimos comandos con <kbd>CTRL+SHIFT+p</kbd></li> <li>Teclear <em>install</em> y ENTER</li> <li>buscamos el paquete <em>SublimeLinter-phpcs</em></li> <li>ENTER otra vez</li> </ol> <p>Una vez instalado el paquete, seguimos las instrucciones de configuración que nos detallan. Al final, si vamos a <em>Preferences / Package settings / Sublime linter / User</em>, debemos tener una sección en la configuración parecida a esto:</p> <pre> "linters": { "phpcs": { "@disable": false, "args": [], "excludes": [], "standard": "Drupal" } },</pre> <p>Cuando funcione, Sublime nos ira mostrando los errores que tengamos en el código de esta manera:</p> <p><img alt="SublimeLinter-phpcs" class="img-responsive shadow" src="/sites/default/files/SublimeLinter-phpcs.png" /></p> <h2>Cambios en Git: GitGutter</h2> <p>Por ultimo, otro pequeño <em>plugin</em> que nos mostrará los cambios que hayamos hecho al archivo en local, desde el último <em>commit</em> de Git. Es muy útil porque de un vistazo nos deja ver las lineas que hemos añadido, modificado o borrado del fichero. Si lo combinamos con cualquiera de los otros <em>plugins</em> de Git para Sublime, nos puede ayudar bastante para tener claro que estamos tocando.</p> <p>Instalarlo es sencillo, como los anteriores:</p> <ol> <li>Abrimos comandos con <kbd>CTRL+SHIFT+p</kbd></li> <li>Teclear <em>install</em> y ENTER</li> <li>buscamos el paquete <em>gitgutter</em></li> <li>ENTER otra vez</li> </ol> <p>Una vez este funcionando, podremos ir viendo las modificaciones que vayamos haciendo en el fichero en la parte de la izquierda, con diferentes símbolos para líneas nuevas o modificadas, como se puede ver en la siguiente imagen.</p> <p><img alt="Sublime-gitgutter" class="img-responsive shadow" src="/sites/default/files/Sublime-gitgutter.png" /></p> <h2>Preferencias generales de Sublime</h2> <p>Para terminar os dejo aquí las preferencias básicas de Sublime que utilizo con proyectos Drupal</p> <pre> { "bold_folder_labels": true, "caret_style": "wide", "default_line_ending": "unix", "draw_white_space": "all", "ensure_newline_at_eof_on_save": true, "fade_fold_buttons": false, "fallback_encoding": "UTF-8", "find_selected_text": true, "font_options": [ "subpixel_antialias" ], "highlight_line": true, "line_padding_bottom": 1, "open_files_in_new_window": false, "rulers": [ 80 ], "shift_tab_unindent": true, "soda_classic_tabs": true, "tab_size": 2, "theme": "Flatland Dark.sublime-theme", "translate_tabs_to_spaces": true, "trim_automatic_white_space": true, "trim_trailing_white_space_on_save": true, "use_tab_stops": true, "word_separators": "./\\()\"'-:,.;&lt;&gt;~!@#%^&amp;*|+=[]{}`~?", }</pre> <p> </p> <h2>Referencias</h2> <ol> <li><a href="https://packagecontrol.io/docs/usage">https://packagecontrol.io/docs/usage</a></li> <li><a href="https://www.drupal.org/node/1419988">https://www.drupal.org/node/1419988</a></li> <li><a href="https://www.drupal.org/node/2809335">https://www.drupal.org/node/2809335</a></li> <li><a href="http://benmatselby.github.io/sublime-phpcs/#configuration">http://benmatselby.github.io/sublime-phpcs/#configuration</a></li> </ol> </div> </div> <div class="group-footer"> <section> <h2>Añadir nuevo comentario</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=23&amp;2=comment&amp;3=comment" token="IETTaxWHQ0YGdBadM3gb641wwtK9BNCdilTbGzAk9oA"></drupal-render-placeholder> </section> </div> </article> Sat, 02 Sep 2017 13:20:09 +0000 root 23 at https://www.carloscarrascal.com