Best Practices For Drupal Developers By Mir Nazim @ Drupal Camp India 2008

Embed Size (px)

Citation preview

HELLO, I AM...

Mir Nazim

Chief Architect @ iKraft Sofrware Pvt Ltd

Working on PHP/Drupal & Python/Django

since past few years

email me - [email protected]

More at www.ikraftsoft.com

BEST PRACTICESFORDRUPAL DEVELOPERS

DrupalCamp India August 8/9/10, 2008Dhirubhai Ambani Institute of Information & Communication TechnologyGandhinagar, IN

We shall be covering

-Best practices for- development environment- module development- theme development- some other stuff

Get the source

Start out with the CVS checkout

ALWAYS

CVS chekout instruction are available on http://drupal.org/handbooks

Why use CVS version

Single most important reason

EASY UPDATES

$ cvs update -dP

TO NEW DRUPAL VERSION

$ cvs update -r DRUPAL-6-3 -dP

Be sure that contibuted modules have been ported to the

new version

revision control your project

-Even if:- it is a small project- only you are working on it

- Take a pick - svn, bzr, git, darcs ...- VSS(if you are crazy enough)

- BUT NOT CVS('coz drupal uses it)

the benifits are way too many!

The Editor Wars

- Komodo Edit/IDE my favourite- Scribes on GNOME my other favourite

- PHPEclipse or Eclipse PDT- Qunta Plus on KDE

- TextMate on Mac OS X

- What? Windows? Are You Kidding? ;)

MODULE DEVELOPMENT

UNDERSTAND ALL THE PREREQUISITES

THROUGHLY

Drupal DB Schema

is themost important fundamental

- Most importantly, understand:-how content/comments are stored- how taxonomy is stored- how users/ACL is stored

you can't escape the hook

Drupal has hooks for everything

You can use hooks for:- CRUD operations- modifying anything(almost) at runtime- path/routes definitions- cron tasks, forms, schema definitions- and much much more...

and do I need to say

- That you should know:-PHP- Bsic RDBMS concepts & SQL- Good Programming Style

- Software Design Skills- learn that from Drupal ;)

so you want to code a new module

Let's ask a few questions

Question #1

Is there are a contributed module that has the functionality I need?

If Yes, use it. PERIOD.

Question #2

Is there any contributed module that does something similar to I need?

If yes, use it, switch off the other functions, if possible

Question #3

Can I adapt any contributed module to do what I need?

If yes, adapt it.

code your modules when you need to

DON'T FORCE A DONKEY TO RUN A DERBY

NEITHER FORCE A STALLION TO PULL A CART

If you need a new content type

CCK

will save you lot of time

with CCK, use

VIEWS

a simplified Crystal Reports for Drupal.

when writing modules, you will be...

- Creating Forms

- Receiving input

- Doing SQL stuff

- Outputing strings- containing text, html and other content

Learn and understand Form API

Form API has lot of benifits

- Define forms in PHP syntax

- Drupal will generate correct HTML

- Makes form aterable at runtime

- Makes programatic submission possible

filter out that evil input with

check_plain($string)

makes sure $string is plain text and filters out those clever scripts and malicious html

It's a full family

filter_xss()

check_markup()

check_url

valid_url()

valid_email()

Drupal has a very powerfull input filter system.

LEARN IT USE IT

No Excuses

Learn to construct good SQL. PERIOD.

Time to go back to basic RDBMS books

BAD SQL in drupal

$result = db_query(SELECT *

FROM {node}

WHERE

uid = $uid);

and good SQL

$result = db_query(SELECT *

FROM {node}

WHERE

uid = %d, $uid);

printf style converstion specifications

%d = integer

$f = float

'%s' = stingnote the quotes

%b = binary data

%% = percent sign

avoid queries in loops asdasd

sometimes can cost just too much!

Tip: See if you can use map() function

beware of QUERY HELL

In some.module

and then

Reloading user again

modules and html

REMEMBER

Don't output HTML directly from modules

BUT DON'T MAKE IT A RELIGION

Take a look at

blog_user_page()

Gerenrates HTML directly

LEARN FROM IT

one more tip

NEVERNEVERNEVER

use print statemets from inside function

AJAX callbacks are exceptionsbut don't forget to exit() after print

THEMES

- Learn and be strong at

- HTML/CSS- Javascript/jQuery- Basic graphic design- use GIMP, Inkscape- understand difference between svn and png

always use PHPTemplate

- Default theme engine since v4.7

- Simple to learn and easy to use

- Made for Drupal, by Drupal[people]

- Uses our own PHP for templating- No new language to learn(die smarty die)

use some base theme

- well tested- basic stuff is ready- some even have a framework(zen)

- you can usezen, framework, base, clean, igniter, etc etc,

do you have a separate designer?

- Ask him to

- take a look at Drupal generated HTML

- learn the id/classes generated by Drupal

- learn basics of PHP and Drupal

FireBug can help here. http://getfirebug.com

avoid complex logic in tpl.php

- Templates are for html not for logic- Remeber:- no SQL in templates- no complex logic in templates- on basic branching and looping

more than 2 levels of nesting is ALARM ALARM SITUATION

Other useful stuff

- Follow coding standards

- coder module can help- its has other tons of features

- use devel module- to profile queries- inspect redirects- generate test data/users/taxonomy- debug themes(drupal 6)- and more

drush drupal swiss army knife

- drush = drupal shell- unix scripting interface to drupal- API to build command line tools

- a package manager, SQL Tools and ToolBox- Build your own tools and utilities

there is a lot left to cover

Let that be some other time

Thank You - any questions?

?

Muokkaa otsikon tekstimuotoa napsauttamalla

Muokkaa jsennyksen tekstimuotoa napsauttamalla

Toinen jsennystaso

Kolmas jsennystaso

Neljs jsennystaso

Viides jsennystaso

Kuudes jsennystaso

Seitsems jsennystaso

Kahdeksas jsennystaso

Yhdekss jsennystaso