Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
“Ñapa Certified”
Cómo crear un drupal inmantenible
¿ÑAPA?
¿Resultado?
Disclaimer
Freelance
Desarrollo Drupal - Barcelona
IRC (server freenode)
#drupal-es: marcoscano
Marcos Cano Miranda
¿ÑAPA?
¿Por qué?
• Menor esfuerzo
• “Si funciona no lo toques”
• No hay tiempo
• Me lo pide el cliente
La decisión de hoy SIEMPRE
tiene una consecuencia futura.
¿Por qué pensar en el mañana?
• “Always code as if the guy who ends up maintaining
your code will be a violent psychopath ...
1. Coding Standards
2. Documentación y Oganización del código
3. Uso de las APIs
4. Hacks / Patchs
5. PHP en base de datos...
CODING STANDARDS
1 - Coding Standards
Quiz
1 - Coding Standards
Quiz
1 - Coding Standards
CODING STANDARDS - Recursos
• Documentación:
https://www.drupal.org/coding-standards
https://drupalize.me/videos/understan...
CODING STANDARDS - Recursos
1 - Coding Standards
CODING STANDARDS - Recursos
52
1 - Coding Standards
Documentación del código
• “Self-documenting code” es un concepto que tiene valor
http://c2.com/cgi/wiki?SelfDocumentingCo...
Documentación
Archivos .info, descripciones en UI (Content
Types, Views, Rules, Features, etc)
2 – Documentación y Organiz...
Organización del código (módulo)
¡No todo va en el .module !
2 – Documentación y Organización
2 – Documentación y Organización
Organización del código
• Evita funciones que no sean hooks
2 – Documentación y Organización
• Evita funciones que no sean hooks
• Distribuye el código en archivos con
significado
– mymodule.pages.inc / mymodule.adm...
• Rosetta stone:
– https://api.drupal.org/api/drupal
• Module system (Drupal hooks)
• Database abstraction layer
• Menu sy...
3 - Uso de las APIs
Comparte y vencerás
• http://drupal.org/documentation
• http://drupal.org/planet
• http://drupalsun.com
• http://drupal.st...
Hacks (modificaciones)
• GIT: sí o sí
– Repositorios gratuitos: GitHub / Bitbucket
– Recursos en drupal.org
• https://www....
Hacks (modificaciones)
• GIT: sí o sí
– Crash course:
• clone/init, status, add, commit, pull, push, (branch + checkout)
–...
Hacks (modificaciones)
• Herramientas detección de hacks:
– http://drupal.org/project/hacked
– http://drupal.org/project/d...
Parches: Documentación y Control de Versiones
4 - Hacks / Parches
PHP en Base de Datos
• módulos “php” y “views_php” =>
– http://drupal.stackexchange.com/a/2512/33701
• Proyectos heredados...
PHP en Base de Datos - Alternativas
• Crear bloque por código:
– http://fourword.fourkitchens.com/article/building-custom-...
PHP en Base de Datos - Alternativas
• Crear views handler por código:
– https://api.drupal.org/api/views/views.api.php/gro...
No hay barra libre en los TPLs
• La lógica va fuera del TPL
– HTML: OK
– PHP: if, print, render, isset, empty,
(hide), ......
Saca la lógica del TPL con preprocess
7 - Ñapas en theming
Usa pre-procesadores CSS
• SASS + COMPASS
– http://sass-lang.com
– http://compass-style.org
• LESS
– http://lesscss.org
Fr...
Minimiza el número de módulos
8 - Ñapas en sitebuilding
8 - Ñapas en sitebuilding
No exageres con los roles
8 - Ñapas en sitebuilding
8 - Ñapas en sitebuilding
No exageres con los bloques
Alternativas: context / beans / panels / mini-panels
8 - Ñapas en sitebuilding
8 - Ñapas en sitebuilding
• Piensa hoy para un mejor mañana
• Alguien ya lo ha pensado por ti (APIs)
• Si no sabes, ¡pregunta! => #drupal-es
¡No te ...
Bonus tracks
¡El theme se hace en un subtheme!
• No modificamos el Bartik
• No modificamos un theme contrib
• No modificamos un theme c...
Ejemplo subtheme
Hooks de Views
• hook_views_pre_view
• hook_views_pre_build
• hook_views_post_build
• hook_views_pre_execute
• hook_views_...
Hooks de Views
• Mucho de lo que haríamos en esos hooks
podríamos hacer creando Handlers y Plugins
customizados para nuest...
• Estáticas: db_query()
• Dinámicas: db_select(), db_insert(),
db_update(), db_delete(), db_merge()
• EntifyFieldQuery()
R...
• ‘und’ -> LANGUAGE_NONE
• field_get_items()
• entity_metadata_wrapper()
• FieldHelper->getValue()
Cómo acceder a los Fiel...
Devolver HTML
• Objetivo:
crear una <ul>
6 - Generar HTML a mano
Devolver HTML
• 2 opciones
– ‘#theme’ => ‘item_list’
– archivo .tpl.php
• theme() y los template
files (tpl.php) son tus
a...
Diversiones en JS
Organización del código (carpetas)
Napa certifieddownload
Napa certifieddownload
Napa certifieddownload
Napa certifieddownload
Napa certifieddownload
Napa certifieddownload
Napa certifieddownload
Napa certifieddownload
Upcoming SlideShare
Loading in …5
×

Napa certifieddownload

97 views

Published on

DrupalCampSpain 2015 talk

Published in: Internet
  • Be the first to comment

  • Be the first to like this

Napa certifieddownload

  1. 1. “Ñapa Certified” Cómo crear un drupal inmantenible
  2. 2. ¿ÑAPA?
  3. 3. ¿Resultado?
  4. 4. Disclaimer
  5. 5. Freelance Desarrollo Drupal - Barcelona IRC (server freenode) #drupal-es: marcoscano Marcos Cano Miranda
  6. 6. ¿ÑAPA?
  7. 7. ¿Por qué? • Menor esfuerzo • “Si funciona no lo toques” • No hay tiempo • Me lo pide el cliente
  8. 8. La decisión de hoy SIEMPRE tiene una consecuencia futura.
  9. 9. ¿Por qué pensar en el mañana? • “Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live” - John Woods • Bugs ocultos • Performance • Seguridad • Aprendizaje • ¡Ahorrar tiempo a uno mismo! • ¡Karma wins!
  10. 10. 1. Coding Standards 2. Documentación y Oganización del código 3. Uso de las APIs 4. Hacks / Patchs 5. PHP en base de datos 6. Renderizado HTML 7. Malas prácticas en theming 8. Malas prácticas en site-building EJEMPLOS
  11. 11. CODING STANDARDS 1 - Coding Standards
  12. 12. Quiz 1 - Coding Standards
  13. 13. Quiz 1 - Coding Standards
  14. 14. CODING STANDARDS - Recursos • Documentación: https://www.drupal.org/coding-standards https://drupalize.me/videos/understanding-drupal-coding-standards?p=2012 • Herramientas: http://www.drupal.org/project/coder https://www.drupal.org/node/1419988 (code sniffer) • Code review permite hacer revisiones: • Por UI • Por drush • En el IDE 1 - Coding Standards
  15. 15. CODING STANDARDS - Recursos 1 - Coding Standards
  16. 16. CODING STANDARDS - Recursos 52 1 - Coding Standards
  17. 17. Documentación del código • “Self-documenting code” es un concepto que tiene valor http://c2.com/cgi/wiki?SelfDocumentingCode • $u <> $user • $foo = 9 * $bar // Foo is 9 times bar. • “Code for the junior” • “Better explicit than implicit” • Tu “yo” futuro te lo agradecerá • Documentar no solo código! 2 – Documentación y Organización
  18. 18. Documentación Archivos .info, descripciones en UI (Content Types, Views, Rules, Features, etc) 2 – Documentación y Organización
  19. 19. Organización del código (módulo) ¡No todo va en el .module ! 2 – Documentación y Organización
  20. 20. 2 – Documentación y Organización
  21. 21. Organización del código • Evita funciones que no sean hooks 2 – Documentación y Organización
  22. 22. • Evita funciones que no sean hooks • Distribuye el código en archivos con significado – mymodule.pages.inc / mymodule.admin.inc – mymodule.rules.inc – hook_hook_info() o usa http://www.drupal.org/project/helper Organización del código 2 – Documentación y Organización
  23. 23. • Rosetta stone: – https://api.drupal.org/api/drupal • Module system (Drupal hooks) • Database abstraction layer • Menu system • Form generation • File upload system • Field API • Search system • Node access system • Theme system • Constants • Global variables ¡Usa la(s) API(s)! 3 - Uso de las APIs
  24. 24. 3 - Uso de las APIs
  25. 25. Comparte y vencerás • http://drupal.org/documentation • http://drupal.org/planet • http://drupalsun.com • http://drupal.stackexchange.com • https://groups.drupal.org/spain (y /spanish) • IRC: #drupal, #drupal-support, #drupal-es ¿Dónde está la rueda? 3 - Uso de las APIs
  26. 26. Hacks (modificaciones) • GIT: sí o sí – Repositorios gratuitos: GitHub / Bitbucket – Recursos en drupal.org • https://www.drupal.org/documentation/git • https://www.drupal.org/node/1054594 • https://www.drupal.org/node/803746 – Vídeos • http://asociaciondrupal.es/es/content/git-y-drupal • http://asociaciondrupal.es/es/content/virtual-bof-git • http://asociaciondrupal.es/es/content/git-flow-workshop-13 4 - Hacks / Parches
  27. 27. Hacks (modificaciones) • GIT: sí o sí – Crash course: • clone/init, status, add, commit, pull, push, (branch + checkout) – GUI: • http://mac.github.com/ • http://windows.github.com/ • https://wiki.gnome.org/Apps/giggle/ • https://wiki.gnome.org/Apps/Gitg/ • http://code.google.com/p/gitextensions/ • http://rowanj.github.io/gitx/ • http://git-cola.github.com/ • http://www.giteyeapp.com/ 4 - Hacks / Parches
  28. 28. Hacks (modificaciones) • Herramientas detección de hacks: – http://drupal.org/project/hacked – http://drupal.org/project/diff • Parches son normales – http://drupal.org/node/707484 (crear) – http://drupal.org/patch/apply (aplicar) – Pero hay que documentarlos! 4 - Hacks / Parches
  29. 29. Parches: Documentación y Control de Versiones 4 - Hacks / Parches
  30. 30. PHP en Base de Datos • módulos “php” y “views_php” => – http://drupal.stackexchange.com/a/2512/33701 • Proyectos heredados, puede ayudar: – https://gist.github.com/jonhattan/5384246f05cbb114dd65 5 - PHP en Base de Datos
  31. 31. PHP en Base de Datos - Alternativas • Crear bloque por código: – http://fourword.fourkitchens.com/article/building-custom-blocks-drupal-7 – http://kahthong.com/2013/06/create-your-own-custom-drupal-block-programmatically • Crear field formatter por código: – https://api.drupal.org/api/drupal/modules!field!field.api.php/group/field_formatter/7 – http://www.metaltoad.com/blog/drupal-7-tutorial-creating-custom-formatters – http://www.whenwhowhere.com/tech-blog/create-custom-field-formatter-drupal-7 – (video) http://asociaciondrupal.es/es/content/modes-and-formatters – (video) http://asociaciondrupal.es/es/content/field-types-api-field-widgets-y-formatters 5 - PHP en Base de Datos
  32. 32. PHP en Base de Datos - Alternativas • Crear views handler por código: – https://api.drupal.org/api/views/views.api.php/group/views_handlers/7 – https://api.drupal.org/api/views/handlers%21views_handler_field.inc/group/views_field_handler s/7 – https://gist.github.com/juampy72/5816530 – http://www.tanc.me/blog/2011/how-create-custom-views-handler – https://ohthehugemanatee.org/blog/2013/12/26/44497-people-are-wrong-how-to-never-use- views-php/ – (video) http://asociaciondrupal.es/es/content/otra-de-views-plugins-handlers-settings – (video) http://asociaciondrupal.es/es/content/pluginshandlers-con-views 5 - PHP en Base de Datos
  33. 33. No hay barra libre en los TPLs • La lógica va fuera del TPL – HTML: OK – PHP: if, print, render, isset, empty, (hide), ... – Un número exagerado podría indicar un problema de arquitectura • Investigar Display Suite, Panels, Context, etc. 7 - Ñapas en theming
  34. 34. Saca la lógica del TPL con preprocess 7 - Ñapas en theming
  35. 35. Usa pre-procesadores CSS • SASS + COMPASS – http://sass-lang.com – http://compass-style.org • LESS – http://lesscss.org FrankenStyles.css 7 - Ñapas en theming
  36. 36. Minimiza el número de módulos 8 - Ñapas en sitebuilding
  37. 37. 8 - Ñapas en sitebuilding
  38. 38. No exageres con los roles 8 - Ñapas en sitebuilding
  39. 39. 8 - Ñapas en sitebuilding
  40. 40. No exageres con los bloques Alternativas: context / beans / panels / mini-panels 8 - Ñapas en sitebuilding
  41. 41. 8 - Ñapas en sitebuilding
  42. 42. • Piensa hoy para un mejor mañana • Alguien ya lo ha pensado por ti (APIs) • Si no sabes, ¡pregunta! => #drupal-es ¡No te vayas con las manos vacías!
  43. 43. Bonus tracks
  44. 44. ¡El theme se hace en un subtheme! • No modificamos el Bartik • No modificamos un theme contrib • No modificamos un theme comercial
  45. 45. Ejemplo subtheme
  46. 46. Hooks de Views • hook_views_pre_view • hook_views_pre_build • hook_views_post_build • hook_views_pre_execute • hook_views_post_execute • hook_views_pre_render • hook_views_post_render • hook_views_query_alter
  47. 47. Hooks de Views • Mucho de lo que haríamos en esos hooks podríamos hacer creando Handlers y Plugins customizados para nuestra necesidad. • Recurso interesante: (video) https://drupalize.me/series/coding-views-drupal-7
  48. 48. • Estáticas: db_query() • Dinámicas: db_select(), db_insert(), db_update(), db_delete(), db_merge() • EntifyFieldQuery() Recursos: – https://www.drupal.org/node/1343708 – https://api.drupal.org/api/drupal/includes%21entity.inc/class/EntityFieldQuery/7 – http://www.phase2technology.com/blog/entityfieldquery-let-drupal-do-the-heavy-lifting-pt-1/ – http://www.phase2technology.com/blog/entityfieldquery-let-drupal-do-the-heavy-lifting-pt-2/ – (video) http://asociaciondrupal.es/es/content/database-api-tu-nueva-amiga Consultas a la Base de Datos
  49. 49. • ‘und’ -> LANGUAGE_NONE • field_get_items() • entity_metadata_wrapper() • FieldHelper->getValue() Cómo acceder a los Fields
  50. 50. Devolver HTML • Objetivo: crear una <ul> 6 - Generar HTML a mano
  51. 51. Devolver HTML • 2 opciones – ‘#theme’ => ‘item_list’ – archivo .tpl.php • theme() y los template files (tpl.php) son tus amigos 6 - Generar HTML a mano
  52. 52. Diversiones en JS
  53. 53. Organización del código (carpetas)

×