Upload
james-walker
View
108
Download
2
Tags:
Embed Size (px)
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
Thanks... Questions?
James Walker http://walkah.net/