Drupal Module Development – An Introduction – Sven Aas



Drupal Module Development – An Introduction – Sven Aas

0 0


dmd

Drupal Module Development: An Introduction

On Github svenaas / dmd

Drupal Module Development

An Introduction

http://svenaas.github.io/dmd/

Created by Sven Aas / @svenaasPresented at the Web Conference at Penn State, June 9, 2014

#psudmd

Sven Aas

Lead Web Applications Developer

Mount Holyoke College

@svenaas

My background: undergrad, grad, professional Lots of languages, even a little PHP, but not much (even now) (PHP, in my opinion, makes it too easy for inexperienced programmers to get results without proceeding wisely.)

My Drupal Experience

  • Started exploring Drupal in 2010
  • 2011: DrupalCon Chicago and Training
  • 2012: DrupalCon Denver and Site Launch
  • 2014: DrupalCon Austin
When I started at Mount Holyoke in 2006 they were using another CMS. Eventually the time came to reassess the CMS situation. We evaluated quite a few tools before deciding that Drupal seemed like the best fit for us. (This was an interesting process and topic — feel free to come talk to me about it later.) Then: conferences YESTERDAY I was still in Texas. I've hardly had time to change my clothes.

My Core Message

You can do this

Always be learning—it's why I'm in this field. Higher Ed. HighEdWeb. Student Mentoring. You can do this. It's really not that hard.

Drupal 7

Not Drupal 6 — Drupal 7's been out for three and a half years. Not Drupal 8 — It won't be out for at least a year

Architecture ([Over]simplified)

On every HTTP request ...

  • index.php is requested
  • bootstrap.inc is loaded along with other core code
  • all [enabled] module and theme code is loaded
  • index.php passes request to a handler

Hooks

  • Callback API
  • Exposed by Drupal Core and some modules
  • Event-based
  • All modules can implement hook handlers
  • All modules' hook implementations get called

Menus

  • Routing — associate a URL with a method
  • Permissions – whether a URL can be accessed
  • Menus

Templates

Render Arrays

  • Content data and metadata
  • Context
  • Messy: inconsistent and overcomplicated

Anatomy of a Module

  • my_module.info
  • my_module.module
  • my_module.install

my_module.info

name = My Module
description = Make everything beautiful
package = My Package
core = 7.x

; This is a comment
dependencies[] = entity
stylesheets[all][] = css/my_module.css
files[] = my_module_extra_bits.inc
Note the file format

my_module.install

<?php

/**
 * @file
 * Contains install and update functions for My Module.
 */

/**
 * Implements hook_install().
 */
function my_module_install() {      
  // Do installation stuff
}
This is a PHP file. There's an opening tag but no closing tag.

my_module.install functions

  • my_module_install()
  • my_module_schema()
  • my_module_update_7001()
  • my_module_uninstall()
All method names begin with the machine name of the module

my_module.module

<?php
/**
 * @file
 * Make everything beautiful 
 */

/**
 * Page callback for administrative settings
 */
function my_module_admin() {
  // Do menu stuff
}

my_module.module functions

  • my_module_admin()
  • my_module_menu()
  • my_module_permission()
  • Other hook implementations
  • Internal functions

Tools

watchdog / log

  • watchdog()
  • Shows up in administrative UI at Reports / Recent log messages (admin/reports/dblog)

Devel module

dpm prints a variable recursively in the message area of the page Not every page has a message area (but there are many alternative functions described at Debugging Drupal and elsewhere: dpr, dvm, etc)

Inspector

  • DOM Inspection
  • Network requests
  • JavaScript console
Usage and tools will vary with browser You may have to turn this tool on, install extensions, etc Learn how it works with your development browser(s) of choice

Doing Something Useful

Modifying a Form

Demo

Drupal APIs

Responsibilities

Security

Translatability

Compatibility

  • Independence
  • Dependencies
Play well with others. State your needs clearly and correctly, both in .install and in documentation.

Performance

Extensibility

Contrib

Drupal.org

  • Projects
    • Modules
    • Themes
  • Users

Types of projects

Code standards

Project Applications

Drupal 8

Larry Garfield's presentation What to Expect from Drupal 8 (for developers) is an excellent summary of the changes coming down the pike.

Empowerment

Many Drupal customizations can be implemented in custom modules much more easily than you think.

  • You can do this
  • Your students can do this

Resources

Thank you

Questions?

Stay in Touch