SlideShare a Scribd company logo
DRUPAL  BEST  PRACTICES
We are going to cover... Drupal Best practices for Development Environment Module Development Theme Development Other stuff
Installation Always use the latest CVS code Not necessarily the HEAD version
Geting Drupal from CVS $ cvs -d:pserver:anonymous:anonymous@cvs.drupal.org:/cvs/drupal checkout -r DRUPAL-5 -d  mysite  drupal http://drupal.org/node/93966
Getting contibuted modules $ cd mysite $ cvs checkout -d modules/views -r DRUPAL-5 contributions/modules/views $ cvs checkout -d modules/cck -r DRUPAL-5 contributions/modules/cck http://drupal.org/node/93966
Now updates are a snap $ cvs update -dP This gets any updates to the core and the modules for the installed version
Updating to new Drupal version Be sure that contibuted modules have been  ported to the new version $ cvs update -r DRUPAL-5-2 -dP
Revision Control you project Subversion users $ cd mysite  $ svn import /path/to/svn/repository Bazaar users $ cd mysite  $ bzr init YOU CANNOT USE CVS HERE
Best Practices so far Get the latest version from CVS Check for updates before going further Get the needed contributed modules from CVS Have your own revision control system in place You do not own Drupal CVS repository Update(CVS) periodically to get latest fixes Don't even try using CVS
Module Development UNDERSTANT  ALL PREQUISITES VERY  THOUROUGHLY
Make sure you understand Drupal's database schema Just to give you a glimpse
 
Understand hooks Drupal has hooks for every thing CRUD operations Modiying into user data at runtime Modifying almost everything at runtime Path definitions (rails is a bit late here) And much much more
And obiviously You should know PHP SQL Good programming style
Ask questions Is the functionality already available in any contributed module? Is there a contributed module that  does something similar that I need? Can I adapt some existing module to  do what I need to do? `
Code you own modules when needed DO NOT FORCE  A DONKEY  RUN A DERBY NEITHER FORCE  A STALLION  TO PULL A CART
If it is a Node Module Try to use Content Construction Kit if possible...
With CCK Use VIEWS Views module provides creating custom views of the node related data and other data as well.
While writing module You will be Creating Forms  Recieving input Doing SQL stuff Oupting Stings containing Text, HTML  and other content
Use the Form API Form API has benifits Define forms in php syntax Drupal will generate the HTML for you Dupal takes care proper html Makes form alterable at the runtime by other modules Makes programatic submission possible
Convention over Configuration Use Form API conventions <?php function module_form(){ //form definitions } ?>
Validate <?php function module_form_validate ($form_id, $form_values) { // do the validation // set the errors } function module_form_submit ($form_id, $form_values) { // perform submit } ?>
Input validation Make sure you check all text only fields with check_plain() It checks for malicious contents in like clever scripts, specially HTML etc.
Othe use full functions filter_xss() check_markup() check_url valid_url() valid_email()
Drupal has a very powerfull input filter syetem LEARN IT USE IT No Excuses
SQL  CONSTRUCT  GOOD  QUERIES
BAD SQL... $result = db_query(”SELECT * FROM {node} WHERE  uid = $uid”);
Good SQL $result = db_query(”SELECT * FROM {node} WHERE  uid = %d”, $uid);
printf  style convervsion specs %d = integer $f = float '%s' = sting %b = binary data %% = percent sign
Avoid queries in loop <?php while (some condition)  { $res = db_query(”SELECT * FROM {table} WHERE  something = something”); } ?>
Bewre of QUERY HELL In some-page.tpl.php $someone = user_load(array('uid' => $uid)); call_some_function($uid = $user->uid); function call_some_function($uid){ $someone = user_load(array('uid'=>$uid)); } Reloading user again
Modules and HTML MODULE  !=   HTML Never output html directly from module functions BUT DON'T MAKE IT A RELIGION
Example of Module +  HTML  blog_user_page()  Generates HTML directly Learn from it
One tip Never   Never Never use print statement from inside functions
Themes You  MUST  be strong in HTML CSS JavaScript jQuery
Theme engines Available theme engines PHPTemplate Zengine  psedo theme theme engine pased on PHPTemplate Smarty PHPTAL Xtemplate  DEPRECATED Pure PHP themes
PHPTemplate The default theme engine since  v4.7 Simple to learn and use Built for Drupal Uses PHP for templating  No new language to learn DIE SMARTY DIE Powerfull, but sometimes dangerous
TPL  Magic page.tpl.php node.tpl.php comment.tpl.php block.tpl.php box.tpl.php etc etc
Learn the variables available to tpl page.tpl.php node.tpl.php $head $styles $scripts $head_title $is_front $footer ... ... $node $links $posted $$page ... ... ...
Override anything themeable  theme_pager() phptemplate_pager()
Rule of Thumb is theme('pager'); theme-name_pager(); theme-engine_pager(); theme_pager();
Blocks/Regions are good Blocks are places where chunks of UI GO Called  ” regions”  in developer language Called  ” blocks”  user language
 
defining regions function mytheme_regions() { return array( 'left' => t('left sidebar'), 'right' => t('right sidebar'), 'content_top' => t('content top'), 'content_bottom' => t('content bottom'), 'header' => t('header'), 'footer' => t('footer') ); }
What we did not cover  Upgrade and Maintenance  Localization and Internationalization Deployment practices
But you know where to go www.drupal.org   http://groups.drupal.org http://lists.drupal.org and off course www.Google.com
Thank You for your time ? Mir Nazim Xensoft Labs www.xensoftlabs.com [email_address]

More Related Content

What's hot (20)

PDF
jQuery Loves Developers - Oredev 2009
Remy Sharp
 
PPT
jQuery
Mostafa Bayomi
 
PDF
jQuery Essentials
Marc Grabanski
 
PPT
A Short Introduction To jQuery
Sudar Muthu
 
PDF
Prototype & jQuery
Remy Sharp
 
PPTX
jQuery Presentation
Rod Johnson
 
PPTX
Jquery-overview
Isfand yar Khan
 
PPTX
jQuery
Dileep Mishra
 
PPTX
jQuery Fundamentals
Gil Fink
 
PPTX
jQuery
Vishwa Mohan
 
PDF
D3.js and SVG
Karol Depka Pradzinski
 
PDF
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Thomas Fuchs
 
PDF
jQuery for beginners
Siva Arunachalam
 
PDF
jQuery Features to Avoid
dmethvin
 
PDF
Learning jQuery made exciting in an interactive session by one of our team me...
Thinqloud
 
PPTX
JavaScript and jQuery Basics
Kaloyan Kosev
 
PPTX
Unobtrusive javascript with jQuery
Angel Ruiz
 
PPTX
jQuery
Jay Poojara
 
PPTX
Jquery Complete Presentation along with Javascript Basics
EPAM Systems
 
jQuery Loves Developers - Oredev 2009
Remy Sharp
 
jQuery Essentials
Marc Grabanski
 
A Short Introduction To jQuery
Sudar Muthu
 
Prototype & jQuery
Remy Sharp
 
jQuery Presentation
Rod Johnson
 
Jquery-overview
Isfand yar Khan
 
jQuery Fundamentals
Gil Fink
 
jQuery
Vishwa Mohan
 
D3.js and SVG
Karol Depka Pradzinski
 
Zepto.js, a jQuery-compatible mobile JavaScript framework in 2K
Thomas Fuchs
 
jQuery for beginners
Siva Arunachalam
 
jQuery Features to Avoid
dmethvin
 
Learning jQuery made exciting in an interactive session by one of our team me...
Thinqloud
 
JavaScript and jQuery Basics
Kaloyan Kosev
 
Unobtrusive javascript with jQuery
Angel Ruiz
 
jQuery
Jay Poojara
 
Jquery Complete Presentation along with Javascript Basics
EPAM Systems
 

Viewers also liked (20)

KEY
Hello Drupal
hellodrupal
 
PPTX
Coding conventions
systemcrashed
 
PDF
Advanced Git
Sergiu-Ioan Ungur
 
PDF
FLTK Summer Course - Part VI - Sixth Impact - Exercises
Michel Alves
 
PDF
"Git Hooked!" Using Git hooks to improve your software development process
Polished Geek LLC
 
PPT
Introduction to Git Commands and Concepts
Carl Brown
 
PDF
FLTK Summer Course - Part II - Second Impact
Michel Alves
 
PDF
FLTK Summer Course - Part I - First Impact - Exercises
Michel Alves
 
PDF
TMS - Schedule of Presentations and Reports
Michel Alves
 
PDF
FLTK Summer Course - Part VII - Seventh Impact
Michel Alves
 
PPTX
Manipulating file in Python
shoukatali500
 
ODP
Servicios web con Python
Manuel Pérez
 
PPT
Creating Custom Drupal Modules
tanoshimi
 
PDF
Using Git on the Command Line
Brian Richards
 
PDF
Blisstering drupal module development ppt v1.2
Anil Sagar
 
PDF
FLTK Summer Course - Part VIII - Eighth Impact
Michel Alves
 
PDF
FLTK Summer Course - Part II - Second Impact - Exercises
Michel Alves
 
PDF
Code Refactoring - Live Coding Demo (JavaDay 2014)
Peter Kofler
 
PDF
FLTK Summer Course - Part III - Third Impact
Michel Alves
 
PDF
EuroPython 2013 - FAST, DOCUMENTED AND RELIABLE JSON BASED WEBSERVICES WITH P...
Alessandro Molina
 
Hello Drupal
hellodrupal
 
Coding conventions
systemcrashed
 
Advanced Git
Sergiu-Ioan Ungur
 
FLTK Summer Course - Part VI - Sixth Impact - Exercises
Michel Alves
 
"Git Hooked!" Using Git hooks to improve your software development process
Polished Geek LLC
 
Introduction to Git Commands and Concepts
Carl Brown
 
FLTK Summer Course - Part II - Second Impact
Michel Alves
 
FLTK Summer Course - Part I - First Impact - Exercises
Michel Alves
 
TMS - Schedule of Presentations and Reports
Michel Alves
 
FLTK Summer Course - Part VII - Seventh Impact
Michel Alves
 
Manipulating file in Python
shoukatali500
 
Servicios web con Python
Manuel Pérez
 
Creating Custom Drupal Modules
tanoshimi
 
Using Git on the Command Line
Brian Richards
 
Blisstering drupal module development ppt v1.2
Anil Sagar
 
FLTK Summer Course - Part VIII - Eighth Impact
Michel Alves
 
FLTK Summer Course - Part II - Second Impact - Exercises
Michel Alves
 
Code Refactoring - Live Coding Demo (JavaDay 2014)
Peter Kofler
 
FLTK Summer Course - Part III - Third Impact
Michel Alves
 
EuroPython 2013 - FAST, DOCUMENTED AND RELIABLE JSON BASED WEBSERVICES WITH P...
Alessandro Molina
 
Ad

Similar to Drupal Best Practices (20)

ODP
Best Practices For Drupal Developers By Mir Nazim @ Drupal Camp India 2008
Mir Nazim
 
ZIP
Drupal Development (Part 2)
Jeff Eaton
 
PPTX
Becoming A Drupal Master Builder
Philip Norton
 
PPTX
Drupal Camp Porto - Developing with Drupal: First Steps
Luís Carneiro
 
PPTX
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
DrupalCamp Kyiv
 
PDF
Drupal training-by-ruchiwebsolutions
php2ranjan
 
PDF
Staging Drupal 8 31 09 1 3
Drupalcon Paris
 
PPT
Drupal Module Development
Sumeet Pareek
 
PDF
Learning PHP for Drupal Theming, DC Chicago 2009
Emma Jane Hogbin Westby
 
DOCX
Drupal module development training delhi
unitedwebsoft
 
PPT
Vancouver League of Drupallers - Remembering the User (August 2008)
baronmunchowsen
 
PDF
Staying Sane with Drupal (A Develper's Survival Guide)
Oscar Merida
 
PPT
Advanced Module development
drupalindia
 
PDF
Drupal 8: A story of growing up and getting off the island
Angela Byron
 
PPT
Drupal - Introduction to Drupal Creating Modules
Vibrant Technologies & Computers
 
ZIP
Drupal Development
Jeff Eaton
 
PPT
Contributing to Drupal
Chris Skene
 
PPTX
10 Steps Not To Forget After Installing Drupal
Cory Gilliam
 
PPTX
Top 20 mistakes you will make on your 1st Drupal project
Iztok Smolic
 
PDF
Discover Drupal preview
dropsolid
 
Best Practices For Drupal Developers By Mir Nazim @ Drupal Camp India 2008
Mir Nazim
 
Drupal Development (Part 2)
Jeff Eaton
 
Becoming A Drupal Master Builder
Philip Norton
 
Drupal Camp Porto - Developing with Drupal: First Steps
Luís Carneiro
 
ONE MORE TIME ABOUT CODE STANDARDS AND BEST PRACTICES
DrupalCamp Kyiv
 
Drupal training-by-ruchiwebsolutions
php2ranjan
 
Staging Drupal 8 31 09 1 3
Drupalcon Paris
 
Drupal Module Development
Sumeet Pareek
 
Learning PHP for Drupal Theming, DC Chicago 2009
Emma Jane Hogbin Westby
 
Drupal module development training delhi
unitedwebsoft
 
Vancouver League of Drupallers - Remembering the User (August 2008)
baronmunchowsen
 
Staying Sane with Drupal (A Develper's Survival Guide)
Oscar Merida
 
Advanced Module development
drupalindia
 
Drupal 8: A story of growing up and getting off the island
Angela Byron
 
Drupal - Introduction to Drupal Creating Modules
Vibrant Technologies & Computers
 
Drupal Development
Jeff Eaton
 
Contributing to Drupal
Chris Skene
 
10 Steps Not To Forget After Installing Drupal
Cory Gilliam
 
Top 20 mistakes you will make on your 1st Drupal project
Iztok Smolic
 
Discover Drupal preview
dropsolid
 
Ad

More from manugoel2003 (9)

PPT
Css Specificity
manugoel2003
 
PPT
Subversion (SVN)
manugoel2003
 
PPT
Zend Framework
manugoel2003
 
PPT
Drupal CMS
manugoel2003
 
PPT
Securing Your Web Server
manugoel2003
 
PPS
PHP Security
manugoel2003
 
PPT
OOP in JavaScript
manugoel2003
 
PPT
CiviCRM
manugoel2003
 
PPT
PHP Documentor
manugoel2003
 
Css Specificity
manugoel2003
 
Subversion (SVN)
manugoel2003
 
Zend Framework
manugoel2003
 
Drupal CMS
manugoel2003
 
Securing Your Web Server
manugoel2003
 
PHP Security
manugoel2003
 
OOP in JavaScript
manugoel2003
 
CiviCRM
manugoel2003
 
PHP Documentor
manugoel2003
 

Recently uploaded (20)

PDF
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
PPTX
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
PDF
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
PDF
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
PDF
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
PPTX
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
PDF
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
PDF
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
PDF
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
PPTX
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
PDF
UPDF - AI PDF Editor & Converter Key Features
DealFuel
 
PPTX
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
PPTX
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
DOCX
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
PDF
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
PPTX
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
PDF
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
PDF
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 
LOOPS in C Programming Language - Technology
RishabhDwivedi43
 
Q2 FY26 Tableau User Group Leader Quarterly Call
lward7
 
“Squinting Vision Pipelines: Detecting and Correcting Errors in Vision Models...
Edge AI and Vision Alliance
 
The Rise of AI and IoT in Mobile App Tech.pdf
IMG Global Infotech
 
CIFDAQ Market Wrap for the week of 4th July 2025
CIFDAQ
 
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
Go Concurrency Real-World Patterns, Pitfalls, and Playground Battles.pdf
Emily Achieng
 
“Computer Vision at Sea: Automated Fish Tracking for Sustainable Fishing,” a ...
Edge AI and Vision Alliance
 
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
New ThousandEyes Product Innovations: Cisco Live June 2025
ThousandEyes
 
UPDF - AI PDF Editor & Converter Key Features
DealFuel
 
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
MuleSoft MCP Support (Model Context Protocol) and Use Case Demo
shyamraj55
 
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
Transforming Utility Networks: Large-scale Data Migrations with FME
Safe Software
 
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
AI Agents in the Cloud: The Rise of Agentic Cloud Architecture
Lilly Gracia
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
NASA A Researcher’s Guide to International Space Station : Physical Sciences ...
Dr. PANKAJ DHUSSA
 
Future-Proof or Fall Behind? 10 Tech Trends You Can’t Afford to Ignore in 2025
DIGITALCONFEX
 

Drupal Best Practices

  • 1. DRUPAL BEST PRACTICES
  • 2. We are going to cover... Drupal Best practices for Development Environment Module Development Theme Development Other stuff
  • 3. Installation Always use the latest CVS code Not necessarily the HEAD version
  • 4. Geting Drupal from CVS $ cvs -d:pserver:anonymous:[email protected]:/cvs/drupal checkout -r DRUPAL-5 -d mysite drupal http://drupal.org/node/93966
  • 5. Getting contibuted modules $ cd mysite $ cvs checkout -d modules/views -r DRUPAL-5 contributions/modules/views $ cvs checkout -d modules/cck -r DRUPAL-5 contributions/modules/cck http://drupal.org/node/93966
  • 6. Now updates are a snap $ cvs update -dP This gets any updates to the core and the modules for the installed version
  • 7. Updating to new Drupal version Be sure that contibuted modules have been ported to the new version $ cvs update -r DRUPAL-5-2 -dP
  • 8. Revision Control you project Subversion users $ cd mysite $ svn import /path/to/svn/repository Bazaar users $ cd mysite $ bzr init YOU CANNOT USE CVS HERE
  • 9. Best Practices so far Get the latest version from CVS Check for updates before going further Get the needed contributed modules from CVS Have your own revision control system in place You do not own Drupal CVS repository Update(CVS) periodically to get latest fixes Don't even try using CVS
  • 10. Module Development UNDERSTANT ALL PREQUISITES VERY THOUROUGHLY
  • 11. Make sure you understand Drupal's database schema Just to give you a glimpse
  • 12.  
  • 13. Understand hooks Drupal has hooks for every thing CRUD operations Modiying into user data at runtime Modifying almost everything at runtime Path definitions (rails is a bit late here) And much much more
  • 14. And obiviously You should know PHP SQL Good programming style
  • 15. Ask questions Is the functionality already available in any contributed module? Is there a contributed module that does something similar that I need? Can I adapt some existing module to do what I need to do? `
  • 16. Code you own modules when needed DO NOT FORCE A DONKEY RUN A DERBY NEITHER FORCE A STALLION TO PULL A CART
  • 17. If it is a Node Module Try to use Content Construction Kit if possible...
  • 18. With CCK Use VIEWS Views module provides creating custom views of the node related data and other data as well.
  • 19. While writing module You will be Creating Forms Recieving input Doing SQL stuff Oupting Stings containing Text, HTML and other content
  • 20. Use the Form API Form API has benifits Define forms in php syntax Drupal will generate the HTML for you Dupal takes care proper html Makes form alterable at the runtime by other modules Makes programatic submission possible
  • 21. Convention over Configuration Use Form API conventions <?php function module_form(){ //form definitions } ?>
  • 22. Validate <?php function module_form_validate ($form_id, $form_values) { // do the validation // set the errors } function module_form_submit ($form_id, $form_values) { // perform submit } ?>
  • 23. Input validation Make sure you check all text only fields with check_plain() It checks for malicious contents in like clever scripts, specially HTML etc.
  • 24. Othe use full functions filter_xss() check_markup() check_url valid_url() valid_email()
  • 25. Drupal has a very powerfull input filter syetem LEARN IT USE IT No Excuses
  • 26. SQL CONSTRUCT GOOD QUERIES
  • 27. BAD SQL... $result = db_query(”SELECT * FROM {node} WHERE uid = $uid”);
  • 28. Good SQL $result = db_query(”SELECT * FROM {node} WHERE uid = %d”, $uid);
  • 29. printf style convervsion specs %d = integer $f = float '%s' = sting %b = binary data %% = percent sign
  • 30. Avoid queries in loop <?php while (some condition) { $res = db_query(”SELECT * FROM {table} WHERE something = something”); } ?>
  • 31. Bewre of QUERY HELL In some-page.tpl.php $someone = user_load(array('uid' => $uid)); call_some_function($uid = $user->uid); function call_some_function($uid){ $someone = user_load(array('uid'=>$uid)); } Reloading user again
  • 32. Modules and HTML MODULE != HTML Never output html directly from module functions BUT DON'T MAKE IT A RELIGION
  • 33. Example of Module + HTML blog_user_page() Generates HTML directly Learn from it
  • 34. One tip Never Never Never use print statement from inside functions
  • 35. Themes You MUST be strong in HTML CSS JavaScript jQuery
  • 36. Theme engines Available theme engines PHPTemplate Zengine psedo theme theme engine pased on PHPTemplate Smarty PHPTAL Xtemplate DEPRECATED Pure PHP themes
  • 37. PHPTemplate The default theme engine since v4.7 Simple to learn and use Built for Drupal Uses PHP for templating No new language to learn DIE SMARTY DIE Powerfull, but sometimes dangerous
  • 38. TPL Magic page.tpl.php node.tpl.php comment.tpl.php block.tpl.php box.tpl.php etc etc
  • 39. Learn the variables available to tpl page.tpl.php node.tpl.php $head $styles $scripts $head_title $is_front $footer ... ... $node $links $posted $$page ... ... ...
  • 40. Override anything themeable theme_pager() phptemplate_pager()
  • 41. Rule of Thumb is theme('pager'); theme-name_pager(); theme-engine_pager(); theme_pager();
  • 42. Blocks/Regions are good Blocks are places where chunks of UI GO Called ” regions” in developer language Called ” blocks” user language
  • 43.  
  • 44. defining regions function mytheme_regions() { return array( 'left' => t('left sidebar'), 'right' => t('right sidebar'), 'content_top' => t('content top'), 'content_bottom' => t('content bottom'), 'header' => t('header'), 'footer' => t('footer') ); }
  • 45. What we did not cover Upgrade and Maintenance Localization and Internationalization Deployment practices
  • 46. But you know where to go www.drupal.org http://groups.drupal.org http://lists.drupal.org and off course www.Google.com
  • 47. Thank You for your time ? Mir Nazim Xensoft Labs www.xensoftlabs.com [email_address]