2007 Fsoss Drupal Under The Hood

Preview:

DESCRIPTION

Brief look at Drupal's internal features - given at http://fsoss.senecac.on.ca/2007/

Citation preview

Drupal:Under the Hood

What is Drupal?

1. Content Management System

2. Content Management Framework

3. Community

Content Management System

file uploads

revisions menus

security user profiles

blocks performance modules search engine-friendly urls user manage-

ment administration panels localization error

reporting rss taxonomy blogging comments

forums multi-site installations event

logging community authoring ajax search

free tagging feed aggregation contact

form help system roles and per-missions statistics

tracking polls

1200+ Contributed Modules

Community

Doubles in size each release

source: http://acko.net/blog/drupal-org-explosion-and-trends source: http://buytaert.net/drupal-site-statistics

Statistics

• 840+ code contributors

• 160+ local user groups

• 430+ attendees at Drupalcon Barcelona

• 200,000+ users on drupal.org

• 3 million+ lines of code (core+contrib)

• 52 SoC mentors for 20 students

• 100,000+ downloads/month

Content Management Framework

xml-rpc

file api jquery database abstraction layer form

api file api session management node system url routing theme system string

handling filter system content versioning

installation profiles access control trans-latable output user system caching

date/time handling unicode support mail handling image manipulation installation

system hook system menu system module system user authentication

themable output

What’s under the hood?

Core

• Lightweight framework

• Library of common functions

• Allows Drupal to bootstrap and serve a request

• What you get when you download Drupal

Content Management

User Management

Forms API

Install Profiles

Theming Layer

Localization

Drupal Core

Library of Common Functions

Modules

• How Drupal is extended

• Lean and mean and versatile

• Inversion of control design pattern

• Drupal exposes hooks for modules

Content Management

User Management

Forms API

Install Profiles

Theming Layer

Localization

Drupal Core

Library of Common Functions

Actions/Workflows

EcommerceContent

Creation Kit

ViewsOrganic Groups

Modules

Custom Module

index.php

install.php

INSTALL.txt

sites

update.php

xmlrpc.php

themes

modules

includes

drupal_bootstrap()• DRUPAL_BOOTSTRAP_CONFIGURATION

• DRUPAL_BOOTSTRAP_EARLY_PAGE_CACHE

• DRUPAL_BOOTSTRAP_DATABASE

• DRUPAL_BOOTSTRAP_ACCESS

• DRUPAL_BOOTSTRAP_SESSION

• DRUPAL_BOOTSTRAP_LATE_PAGE_CACHE

• DRUPAL_BOOTSTRAP_PATH

• DRUPAL_BOOTSTRAP_FULL

menu system

Is site offline?

Get menu array

Return MENU_SITE_OFFLINE

Parse $path from $_GET['q']

Is callback defined for

$path?

Trim last '/' from $path

Does callback function exist?

Return MENU_NOT_FOUND

No

No

User allowed to access this

item?

Return MENU_ACCESS_DENIED

No

Marshall parameters from URL and item's callback arguments

Call callback

No

Yes

Hooks

Hooks are PHP functions with Drupal-specific names

How Drupal Finds Hooks

/** * Determine whether a module implements a hook. * * @param $module * The name of the module (without the .module extension). * @param $hook * The name of the hook (e.g. "help" or "menu"). */function module_hook($module, $hook) { return function_exists($module .'_'. $hook);}

Module Hook Function name

pants user pants_user()

pants menu pants_menu()

pants perm pants_perm()

Naming Hooks

Hook Overview

hook_user()

comment_user() locale_user() node_user() mymodule_user()

comment.module locale.module node.module mymodule.module

FormAPI

FormAPI

• Form elements are PHP arrays so you can programmatically manipulate any form

• Chain validator and submitter routines

• Theme overrides - down to the element!

• Built-in security

Form Example$form['user_name'] = array( '#title' => t('Your Name'), '#type' => 'textfield', '#description' => t('Please enter your name.'), );

$form['submit'] = array( '#type' => 'submit', '#value' => t('Submit') );

Security

• Verifies that $_POST values have corresponding $form elements

• Form rendering sanitized for potential XSS

• $form[‘token’] used to prevent CSRF

hook_form_alter

drupal_execute()

Theme System

Theme System

PHPTemplate Files

• page.tpl.php

• node.tpl.php

• block.tpl.php

• comment.tpl.php

• box.tpl.php

theme-name_breadcrumb()

theme-engine_breadcrumb()

theme_breadcrumb()

theme('breadcrumb')

The first function found

gets called.

garland_page()

phptemplate_page()

theme_page()

theme('page')

The first function found

gets called.

Creating New Template Files

function mytheme_breadcrumb($breadcrumb) { if (!empty($breadcrumb)) { return '<span class="breadcrumb">'. implode(' * ', $breadcrumb) .'</span>'; }}

template.php

function mytheme_breadcrumb($breadcrumb) { if (!empty($breadcrumb)) { $variables = array('breadcrumb' => implode(' * ', $breadcrumb)); return _phptemplate_callback('breadcrumb', $variables); }}

new template.php

<span class="breadcrumb"><?php print $breadcrumb ?></span>breadcrumb.tpl.php

ultimate control

http://greenpeace.co.uk/

http://theonion.com/

http://musicbox.sonybmg.com/

http://43folders.com/

http://flex.org/showcase

http://help.yahoo.com/

http://ubuntu.com/

Thanks... Questions?

James Walker http://walkah.net/

Lullabotjames@lullabot.com