2007 Fsoss Drupal Under The Hood

44
Drupal: Under the Hood

description

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

Transcript of 2007 Fsoss Drupal Under The Hood

Page 1: 2007 Fsoss Drupal Under The Hood

Drupal:Under the Hood

Page 2: 2007 Fsoss Drupal Under The Hood

What is Drupal?

1. Content Management System

2. Content Management Framework

3. Community

Page 3: 2007 Fsoss Drupal Under The Hood

Content Management System

Page 4: 2007 Fsoss Drupal Under The Hood

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

Page 5: 2007 Fsoss Drupal Under The Hood

1200+ Contributed Modules

Page 6: 2007 Fsoss Drupal Under The Hood

Community

Page 7: 2007 Fsoss Drupal Under The Hood

Doubles in size each release

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

Page 8: 2007 Fsoss Drupal Under The Hood

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

Page 9: 2007 Fsoss Drupal Under The Hood

Content Management Framework

Page 10: 2007 Fsoss Drupal Under The Hood

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

Page 11: 2007 Fsoss Drupal Under The Hood

What’s under the hood?

Page 12: 2007 Fsoss Drupal 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

Page 13: 2007 Fsoss Drupal Under The Hood

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

Page 14: 2007 Fsoss Drupal Under The Hood

index.php

install.php

INSTALL.txt

sites

update.php

xmlrpc.php

themes

modules

includes

Page 15: 2007 Fsoss Drupal Under The Hood

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

Page 16: 2007 Fsoss Drupal Under The Hood

menu system

Page 17: 2007 Fsoss Drupal Under The Hood

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

Page 18: 2007 Fsoss Drupal Under The Hood

Hooks

Page 19: 2007 Fsoss Drupal Under The Hood

Hooks are PHP functions with Drupal-specific names

Page 20: 2007 Fsoss Drupal Under The Hood

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);}

Page 21: 2007 Fsoss Drupal Under The Hood

Module Hook Function name

pants user pants_user()

pants menu pants_menu()

pants perm pants_perm()

Naming Hooks

Page 22: 2007 Fsoss Drupal Under The Hood

Hook Overview

hook_user()

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

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

Page 23: 2007 Fsoss Drupal Under The Hood

FormAPI

Page 24: 2007 Fsoss Drupal Under The Hood

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

Page 25: 2007 Fsoss Drupal Under The Hood

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') );

Page 26: 2007 Fsoss Drupal Under The Hood

Security

• Verifies that $_POST values have corresponding $form elements

• Form rendering sanitized for potential XSS

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

Page 27: 2007 Fsoss Drupal Under The Hood

hook_form_alter

Page 28: 2007 Fsoss Drupal Under The Hood

drupal_execute()

Page 29: 2007 Fsoss Drupal Under The Hood

Theme System

Page 30: 2007 Fsoss Drupal Under The Hood

Theme System

Page 31: 2007 Fsoss Drupal Under The Hood

PHPTemplate Files

• page.tpl.php

• node.tpl.php

• block.tpl.php

• comment.tpl.php

• box.tpl.php

Page 32: 2007 Fsoss Drupal Under The Hood

theme-name_breadcrumb()

theme-engine_breadcrumb()

theme_breadcrumb()

theme('breadcrumb')

The first function found

gets called.

Page 33: 2007 Fsoss Drupal Under The Hood

garland_page()

phptemplate_page()

theme_page()

theme('page')

The first function found

gets called.

Page 34: 2007 Fsoss Drupal Under The Hood

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

Page 35: 2007 Fsoss Drupal Under The Hood

ultimate control

Page 36: 2007 Fsoss Drupal Under The Hood

http://greenpeace.co.uk/

Page 37: 2007 Fsoss Drupal Under The Hood

http://theonion.com/

Page 38: 2007 Fsoss Drupal Under The Hood

http://musicbox.sonybmg.com/

Page 39: 2007 Fsoss Drupal Under The Hood

http://43folders.com/

Page 41: 2007 Fsoss Drupal Under The Hood

http://flex.org/showcase

Page 42: 2007 Fsoss Drupal Under The Hood

http://help.yahoo.com/

Page 43: 2007 Fsoss Drupal Under The Hood

http://ubuntu.com/

Page 44: 2007 Fsoss Drupal Under The Hood

Thanks... Questions?

James Walker http://walkah.net/

[email protected]