SlideShare a Scribd company logo
An Introduction to
Drupal Architecture
JohnVanDyk
DrupalCamp Des Moines, Iowa
September 17, 2011
1
Apache IIS
OS
Nginx
PHP 5.2.5
Stack with OS, webserver and PHP. Most people use mod_php
but deployments with engineers at the helm sometimes use
FastCGI. PHP 5.2.4 with the 5.2.5 security backport is fine too
(Ubuntu 8.0.4).
2
Apache IIS
OS
Nginx
hash
date SimpleXMLjson
dom SPLpcre
filter xmlsession
gd pdo
pdo_mysql
PHP
Some PHP extensions are required.
3
Apache IIS
OS
Nginx
PHP 5.2.5
MySQL
5.0.15
MariaDB
5.1.44
Database.
4
Apache IIS
OS
Nginx
PHP 5.2.5
MySQL
5.0.15
MariaDB
5.1.44
Drupal 7
Drupal sits atop the stack.
5
Apache IIS
OS
Nginx
PHP 5.2.5
MySQL
5.0.15
MariaDB
5.1.44
Drupal 7
Varnish
Varnish can be added to the front end for fast RAM-based
response to anonymous users.
6
Apache
Load
Balancer
PHP 5.2.5
MySQL
Drupal 7
OS
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP
Drupal 7
OS
Webheads can be scaled out.
7
Apache
Load
Balancer
PHP 5.2.5
MySQL
Master
Drupal 7
OS
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP 5.2.5
Drupal 7
OS
Apache
PHP
Drupal 7
OS
MySQL
Slaves
OS
MySQL
Slaves
OS
MySQL
Slaves
OS
MySQL
Slaves
OS
Databases can be scaled out. Show master-slave but master-
master is also a possibility. See http://www.jochus.be/site/
2011-01-13/drupal/drupal-master-master-replication-architecture
for an example.
8
Source: Nate Haug, Lullabot Scaling the Grammys. DrupalCamp Denver 2010.
214 million hits in six hours at peak. Database load: 5%. Apache
load: 1%.
9
You will not hack core.
You should only modify the locations shown in green. Modifying
the other files will inevitably lead to grief.
10
Development Site
Local settings, including database connection info, are in sites/all/
dev.local.
11
Live Site
On the live site settings are in a site-specific directory.
12
http://www.doodlepress.co.uk/item/1460
Drupal 7 Architecture
Drupal architecture. Each include file has a different color and
their interrelationships are shown. Uh...just kidding.
13
Browser request: GET /node/1
Bootstrap (includes/bootstrap.inc)
- brings session, database, variables online
Menu System (router)
- maps URL to a function
- checks access control
- may bring functions into scope
- calls function to build page data structure
- calls function to theme page (look and feel)
- page returned to client
It is important for a developer to understand the sequence of
events that occur when a request is processed by Drupal.
14
/index.php?q=node/1
/node/1
mod_rewrite in .htaccess
$_GET['q'] will contain 'node/1'
A typical request starts with mod_rewrite.
15
index.php
menu system
Which function should this path be mapped to?
$items['node/%node'] = array(
'page callback' => 'node_page_view',
'page arguments' => array(1),
'access callback' => 'node_access',
'access arguments' => array('view', 1),
);
index.php invokes the menu system, which handles much more
than menus. The menu item that maps to node/1 can be found in
node.module.
16
index.php
menu system
Does this user have permission to access this path?
$items['node/%node'] = array(
'page callback' => 'node_page_view',
'page arguments' => array(1),
'access callback' => 'node_access',
'access arguments' => array('view', 1),
);
node.module tells the menu system to invoke a function
(node_access()) to determine whether the current user has
permission.
17
index.php
menu system node.module
/**
* Menu callback; view a single node.
*/
function node_page_view($node) {
...
}
The page callback for the path node/1 is 'node_page_view'. That's
the name of the function that is called if the user has permission
to view the page.
18
index.php
menu system node.module
hook_node_load()
book.module
comment.module
forum.module
user.module
book_node_load()
comment_node_load()
forum_node_load()
user_node_load()
Other modules have a say in the loading of the node object. Many
of these hooks (better thought of as "events") happen during the
building of a page.
19
index.php
menu system
A large array with the node's data structure is returned to the
menu system.
20
index.php
menu system node.module
hook_node_view_alter()
drupalcorn.module
drupalcorn_node_view_alter()
Other modules may alter the final data structure. We've seen
three common patterns that pervade Drupal: (1) hooks allow other
modules to respond to events; (2) Drupal uses large structured
arrays, and (3) other modules may alter these arrays once built.
21
index.php
menu system
delivery callback
drupal_render_page()
theme()
page.tpl.php
node.tpl.php
block.tpl.php
The menu system passes the structure array to a delivery
callback which turns the array into HTML by rendering it; that is,
passing it through Drupal's template engine. Template files
(.tpl.php, pronounced "tipple-fipp") in the current theme are used
to create the HTML.
22
index.php
The HTML is then returned to the browser.
23
Common Library Database API
Fields API
Entity API
N
o
d
e
s
U
s
e
r
s
T
a
x
o
n
o
m
y
C
o
m
m
e
n
t
s
Form
API
Menu
API
Block
API
Locali
zation
Views
Template Preprocessing
Theme
Modules add
functionality here
Block diagram if you need a mental model. This doesnʼt have
nearly enough dimensions to describe what actually happens. If
you asked 5 developers to make Drupal block diagrams, you'd get
5 different diagrams. Hopefully this one helps someone.
24
"Entities"
Node: a piece of content
User: a user account
Taxonomy: categories for tagging/classification
Comment: content with a parent
25
An Entity has Bundles
Node
Title
Body
Title
Body
Page
An entity can be thought of as a base object, and bundles are
subclasses. For example, a node is an entity while the bundle of
fields that make up a page are a type of node.
26
An Entity has Bundles
Title
Body
Page
Title
Body
Article
Tags
Image
These are types of nodes. Each has a bundle of fields.
27
A Bundle has Fields
Title
Body
Article
Tags
Image
text_long
text_with_summary
taxonomy_term_reference
image
And each field has a type.
28
Not SQL Fields
Title
Body
Article
Tags
Image
text_with_summary
taxonomy_term_reference
These are more than SQL fields. text_with_summary
autogenerates a summary. taxonomy_term_reference splits
multiple tags into separate records. These are Drupal fields.
29
In the Real World
"Entity" = node | user | comment | taxonomy
"Bundle" = "Content Type"
You assemble content types from fields using the UI.
Part of the conversation with your client!
Nobody says "let's create a new Node Bundle and call it Bug
Report".
30
Before Building a Site
• What content types and fields?
• How will the data get in? (Forms)
• How will the data get out? (Views)
• Who may create/view/delete data? (Permissions)
• What additional functionality? (Modules)
• How can we make it pretty? (Theming)
Questions to map client needs to Drupal concepts.
31
http://api.drupal.org
Your home for API-related searches.
32
http://drupal.org/project/examples
Simple implementations of APIs. You can base your own work on
these examples.
33
Bonus!
Two tools I use all the time.
34
Defeating the
White Screen of Death
error_log = /var/log/php/error.log
Define PHP error log in php.ini:
I close with two essential tools. First, don't be frightened by the
WSOD.
35
tail -f /var/log/php/error.log
[07-Sep-2011 16:25:02] PHP Fatal error:
Call to undefined function int() in
bgstat.module on line 41
Watch the error log to find out what’s going on:
PHP will always tell you what went wrong in its log. If you've
defined a PHP error log in php.ini, you can watch it in real time
with tail -f.
36
Where is the code?
egrep -rn searchstring .
Quickly search the codebase for a function:
Second, don't be overwhelmed with the codebase. egrep and
pipes can help you find where functions live and where things
happen. Example: where are mail-related variables set?
37
egrep -rn mail . | grep variable_set
./includes/install.core.inc:1802:
variable_set('site_mail', $form_state['values']
['site_mail']);
./includes/install.core.inc:1813:
variable_set('update_notify_emails', array($form_state
['values']['account']['mail']));
./modules/openid/openid.test:323:
variable_set('user_email_verification',TRUE);
...
There we go. The codebase is like a rich porridge, waiting for you
to sift through and find the tasty lumps.
38
Thanks!
Hopefully these help create a big picture
of how Drupal works.This only scratches the surface.
Now get your debugger
working and explore Drupal core on your own!
39

More Related Content

What's hot (16)

PDF
2 introduction-php-mvc-cakephp-m2-installation-slides
MasterCode.vn
 
PDF
Java Enterprise Edition
Francesco Nolano
 
KEY
CakePHP 2.0 - It'll rock your world
Graham Weldon
 
PDF
Development Setup of B-Translator
Dashamir Hoxha
 
PDF
Flask Basics
Eueung Mulyana
 
PDF
BP204 It's Not Infernal: Dante's Nine Circles of XPages Heaven
Michael McGarel
 
PPTX
Spring Boot
Jiayun Zhou
 
PPT
Intoduction to Play Framework
Knoldus Inc.
 
KEY
LvivPy - Flask in details
Max Klymyshyn
 
PDF
Flask RESTful Flask HTTPAuth
Eueung Mulyana
 
PPT
Django, What is it, Why is it cool?
Tom Brander
 
PDF
3 introduction-php-mvc-cakephp-m3-getting-started-slides
MasterCode.vn
 
PDF
Digital Fabrication Studio v.0.2: Information
Massimo Menichinelli
 
PDF
4 introduction-php-mvc-cakephp-m4-controllers-slides
MasterCode.vn
 
PDF
Drupal 8 - Core and API Changes
Shabir Ahmad
 
PDF
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Edureka!
 
2 introduction-php-mvc-cakephp-m2-installation-slides
MasterCode.vn
 
Java Enterprise Edition
Francesco Nolano
 
CakePHP 2.0 - It'll rock your world
Graham Weldon
 
Development Setup of B-Translator
Dashamir Hoxha
 
Flask Basics
Eueung Mulyana
 
BP204 It's Not Infernal: Dante's Nine Circles of XPages Heaven
Michael McGarel
 
Spring Boot
Jiayun Zhou
 
Intoduction to Play Framework
Knoldus Inc.
 
LvivPy - Flask in details
Max Klymyshyn
 
Flask RESTful Flask HTTPAuth
Eueung Mulyana
 
Django, What is it, Why is it cool?
Tom Brander
 
3 introduction-php-mvc-cakephp-m3-getting-started-slides
MasterCode.vn
 
Digital Fabrication Studio v.0.2: Information
Massimo Menichinelli
 
4 introduction-php-mvc-cakephp-m4-controllers-slides
MasterCode.vn
 
Drupal 8 - Core and API Changes
Shabir Ahmad
 
Python Flask Tutorial For Beginners | Flask Web Development Tutorial | Python...
Edureka!
 

Similar to Intro to drupal_7_architecture (20)

PDF
Modernize Your Drupal Development
Chris Tankersley
 
PDF
Blisstering drupal module development ppt v1.2
Anil Sagar
 
ZIP
Drupal Development
Jeff Eaton
 
PPTX
72d5drupal
Mahesh Sherkar
 
PDF
Introduction to Drupal Basics
Juha Niemi
 
PDF
Drupal Recipe
hernanibf
 
ODP
Drupal in 5mins + Previewing Drupal 8.x
Wong Hoi Sing Edison
 
PDF
Drupal Is Not Your Web Site
Phase2
 
PPTX
Drupal Overview For Techies
Robert Carr
 
PDF
2007 Fsoss Drupal Under The Hood
James Walker
 
PPTX
Drupal Camp Porto - Developing with Drupal: First Steps
Luís Carneiro
 
PDF
Introduction To Drupal
Lauren Roth
 
PPT
SynapseIndia drupal presentation on drupal
Synapseindiappsdevelopment
 
PPT
Drupal 6 in a nutshell
Satish C Ayappan
 
PPTX
Rapid site production with Drupal
Rob Sawyer
 
PDF
Drupal is not your Website
Phase2
 
PPT
Drupal: an Overview
Matt Weaver
 
PDF
Introduction to Drupal - Installation, Anatomy, Terminologies
Gerald Villorente
 
PDF
Introduction to drupal
Pedro Cambra
 
PDF
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Mack Hardy
 
Modernize Your Drupal Development
Chris Tankersley
 
Blisstering drupal module development ppt v1.2
Anil Sagar
 
Drupal Development
Jeff Eaton
 
72d5drupal
Mahesh Sherkar
 
Introduction to Drupal Basics
Juha Niemi
 
Drupal Recipe
hernanibf
 
Drupal in 5mins + Previewing Drupal 8.x
Wong Hoi Sing Edison
 
Drupal Is Not Your Web Site
Phase2
 
Drupal Overview For Techies
Robert Carr
 
2007 Fsoss Drupal Under The Hood
James Walker
 
Drupal Camp Porto - Developing with Drupal: First Steps
Luís Carneiro
 
Introduction To Drupal
Lauren Roth
 
SynapseIndia drupal presentation on drupal
Synapseindiappsdevelopment
 
Drupal 6 in a nutshell
Satish C Ayappan
 
Rapid site production with Drupal
Rob Sawyer
 
Drupal is not your Website
Phase2
 
Drupal: an Overview
Matt Weaver
 
Introduction to Drupal - Installation, Anatomy, Terminologies
Gerald Villorente
 
Introduction to drupal
Pedro Cambra
 
Strategies and Tips for Building Enterprise Drupal Applications - PNWDS 2013
Mack Hardy
 
Ad

Recently uploaded (20)

PDF
Mobile CMMS Solutions Empowering the Frontline Workforce
CryotosCMMSSoftware
 
PDF
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
PPTX
Migrating Millions of Users with Debezium, Apache Kafka, and an Acyclic Synch...
MD Sayem Ahmed
 
PDF
Letasoft Sound Booster 1.12.0.538 Crack Download+ Product Key [Latest]
HyperPc soft
 
PPTX
Writing Better Code - Helping Developers make Decisions.pptx
Lorraine Steyn
 
PPTX
The Role of a PHP Development Company in Modern Web Development
SEO Company for School in Delhi NCR
 
PDF
Efficient, Automated Claims Processing Software for Insurers
Insurance Tech Services
 
PPT
MergeSortfbsjbjsfk sdfik k
RafishaikIT02044
 
PDF
GridView,Recycler view, API, SQLITE& NetworkRequest.pdf
Nabin Dhakal
 
PDF
Capcut Pro Crack For PC Latest Version {Fully Unlocked} 2025
hashhshs786
 
PDF
Executive Business Intelligence Dashboards
vandeslie24
 
PDF
Powering GIS with FME and VertiGIS - Peak of Data & AI 2025
Safe Software
 
PDF
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
PDF
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
PPTX
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
PPTX
MailsDaddy Outlook OST to PST converter.pptx
abhishekdutt366
 
PPTX
Fundamentals_of_Microservices_Architecture.pptx
MuhammadUzair504018
 
PPTX
How Odoo Became a Game-Changer for an IT Company in Manufacturing ERP
SatishKumar2651
 
PPTX
How Apagen Empowered an EPC Company with Engineering ERP Software
SatishKumar2651
 
PPTX
Comprehensive Guide: Shoviv Exchange to Office 365 Migration Tool 2025
Shoviv Software
 
Mobile CMMS Solutions Empowering the Frontline Workforce
CryotosCMMSSoftware
 
Alarm in Android-Scheduling Timed Tasks Using AlarmManager in Android.pdf
Nabin Dhakal
 
Migrating Millions of Users with Debezium, Apache Kafka, and an Acyclic Synch...
MD Sayem Ahmed
 
Letasoft Sound Booster 1.12.0.538 Crack Download+ Product Key [Latest]
HyperPc soft
 
Writing Better Code - Helping Developers make Decisions.pptx
Lorraine Steyn
 
The Role of a PHP Development Company in Modern Web Development
SEO Company for School in Delhi NCR
 
Efficient, Automated Claims Processing Software for Insurers
Insurance Tech Services
 
MergeSortfbsjbjsfk sdfik k
RafishaikIT02044
 
GridView,Recycler view, API, SQLITE& NetworkRequest.pdf
Nabin Dhakal
 
Capcut Pro Crack For PC Latest Version {Fully Unlocked} 2025
hashhshs786
 
Executive Business Intelligence Dashboards
vandeslie24
 
Powering GIS with FME and VertiGIS - Peak of Data & AI 2025
Safe Software
 
Alexander Marshalov - How to use AI Assistants with your Monitoring system Q2...
VictoriaMetrics
 
HiHelloHR – Simplify HR Operations for Modern Workplaces
HiHelloHR
 
Hardware(Central Processing Unit ) CU and ALU
RizwanaKalsoom2
 
MailsDaddy Outlook OST to PST converter.pptx
abhishekdutt366
 
Fundamentals_of_Microservices_Architecture.pptx
MuhammadUzair504018
 
How Odoo Became a Game-Changer for an IT Company in Manufacturing ERP
SatishKumar2651
 
How Apagen Empowered an EPC Company with Engineering ERP Software
SatishKumar2651
 
Comprehensive Guide: Shoviv Exchange to Office 365 Migration Tool 2025
Shoviv Software
 
Ad

Intro to drupal_7_architecture