I'm trying to write out a list of key Drupal competencies, mainly so I can confirm what I know, don't know and don't know I don't know. (Thanks D. Rumsfeld for that quote!)
I think some of these are really broad, for instance there's quite a difference between making a functional theme and creating a theme with good SEO, load times and so on, but I'm hoping you could assume that a half decent web developer would look after that anyway.
Just interested to see what people here feel is also important. I've edited the suggestions so far into this list.
Languages
Drupal Skills
- Research and install modules to meet project requirements
- Configure the basic modules and core settings to get a site running
- Drush command line tool
- Create a custom Theme from scratch which validates with good HTML/CSS.
- Able to customise forms, core, themes without altering core files but by using template.php or custom modules.
- Can make forms from scratch using the API - with validation and posting back to the DB/email
- Can create custom modules from scratch utilising core hooks and module hooks.
- Be involved with the community, understand the naming conventions, CVS system and ideally have submitted some code or revisions.
Modules
It's not easy to make a must know module list, as not only is the modules you use very dependent on the site, but also how you use them. However the following are widely used:
Views
- Know how to make basic views and blocks.
- Know how to make more complex views with relationships and terms.
- Know how to use hook_views_query_alter, to make complex queries.
- Know how to use hook_views_default_views, to create specific views.
CCK
- Know how to setup content - what field types to use.
- Know how to create your own field_formatters - the foundation for theming CCK fields.
Hooks
The most important hooks to learn, to create a basic module are probably:
- hook_form_alter() - change forms without changing code.
- hook_menu()
- hook_theme()
- hook_nodeapi() - almost anything regarding nodes
- hook_schema() - create tables
- hook_install() / hook_uninstall() - create tables and clean up.
- hook_perm() - when you need special access control.
- hook_init() - things to want always to happen.
- hook_user() - if you need to tap into user actions or modify the user object.
I good understanding of client-server architecture, how servers and browsers works. And knowledge of php and mysql, templates engines. And of course, you should also read Drupal documentations.
Able to create a custom Theme from scratch which validates with good HTML/CSS and also pays attention to usability and accessibility. (Whilst still looking kick-ass).
You usually don't want to create themes from scratch but from a starter theme like Zen instead.
For Drupal you will need:
- PHP, it's a PHP framework, so to really understand and use it, you need to understand PHP.
- SQL, the list of SQL serves that Drupal can use is growing, but you will need to understand * SQL, relational database and how to setup some basic architecture.
- Javascript (and jQuery). Drupal uses the jQuery js library, so it will be a lot easier if you not only, know how yo use javascript, but also understand how to use jQuery and some of it concepts.
- The hook system and how you can alter Drupal core and modules implementing hooks.
- The naming convention for hooks, theme functions etc.
Modules
It's not easy to make a must know module list, as not only is the modules you use very dependent on the site, but also how you use them. The two top modules in Drupal is.
- Views
- Know how to make basic views and blocks.
- Know how to make more complex views with relationships and terms.
- Know how to use
hook_views_query_alter
, to make complex queries.
- Know how to use
hook_views_default_views
, to create specific views.
- CCK
- Know how to setup content - what field types to use.
- Know how to create your own
field_formatters
- the foundation for theming CCK fields.
Another module that I find very powerfull once mastered is Panels. It allows you to do a lot of complex and difficult things with very little and simple code. There is a lot of hooks you need to learn, and not much documentation. But once you understand Panels, you find that you time has been well spent.
Hooks
The most important hooks to learn, to create a basic module is probably:
- hook_form_alter() - change forms without changing code.
- hook_menu()
- hook_theme()
- hook_nodeapi() - almost anything regarding nodes
- hook_schema() - create tables
- hook_install() / hook_uninstall() - create tables and clean up.
- hook_perm() - when you need special access control.
- hook_init() - things to want always to happen.
- hook_user() - if you need to tap into user actions or modify the user object.
You don't need to use all of these hooks all of the time, but they are some of the most used ones.