159 videos, 14h 41m

How to use render arrays and tabs

Show videos in one column
Show videos in split view
Mark multiple complete (member-only)
Add multiple to a playlist (member-only)
Change speed.5x1x1.5x2x3x


  1. 22:26Welcome to Module Building
    1. 6:24Why to build a module instead of modifying source code, and how this video series works
    2. 2:58Setting up the module folder
    3. 3:36About the .info file
    4. 6:35Coding the .module file
    5. 2:53Our module recreated in 2 minutes and next steps
  2. 35:43How to Build Module Scaffolding
    1. 3:35Setting up the .module file structure
    2. 4:06The .info file in detail
    3. 11:52The .module file in detail
    4. 7:47Adding a module settings page in an include file
    5. 5:52Adding documentation with the README file
    6. 2:31Review and next steps for the "How to Build Module Scaffolding" chapter
  3. 70:01How Hooks Work and How to Use Them
    1. 5:58What hooks are and a demo of our final module
    2. 9:57How hooks are invoked with module_invoke_all()
    3. 3:31How hooks are invoked with module_invoke()
    4. 5:21How hooks are invoked through custom functions
    5. 0:41Summary of hook implementations
    6. 4:57Using hook_init() to execute code on every page
    7. 2:04How to watch data change in the database
    8. 2:36How to implement hook_permission()
    9. 7:43Adding a settings page with hook_menu()
    10. 4:25Implementing scheduled events with hook_cron()
    11. 3:30Adding a block starting with hook_block_info()
    12. 5:19Adding block configuration with hook_block_configure()
    13. 10:40Displaying a block with hook_block_view() and checking permissions with user_access()
    14. 3:19Seeing our final module in action and next steps
  4. 26:29Overview of Coding Standards
    1. 6:25Why coding standards are useful and important
    2. 2:50Using the Coder module to find problems
    3. 2:47Working with white space
    4. 2:16Using operators
    5. 1:25Defining functions and class constructors
    6. 1:30Working with arrays
    7. 2:08Quotes and string concatenation
    8. 2:26Writing good comments
    9. 2:28Including code files, php tags and semi-colons
    10. 2:14A few miscellaneous items
  5. 51:14Development Tips and Tricks
    1. 3:04About the Tips module
    2. 11:18Using url() and l() to generate URLs and links
    3. 5:51Using the t() function to make text translatable
    4. 8:41Using variable_set(), variable_get() and variable_del()
    5. 13:05IDE features and comparison
    6. 6:29How to find out if your module exists already
    7. 2:46Review and next steps for the "Development Tips and Tricks" chapter
  6. 81:22How to Build and Manipulate Forms with the Form API
    1. 6:16The benefits of using the Form API
    2. 7:25Creating a simple form
    3. 3:33Creating an embedded form
    4. 5:31Using validation functions
    5. 2:33Creating submission functions
    6. 6:37Exploring more form elements and attributes
    7. 5:09Adding usability with the #states attribute
    8. 7:54Modifying forms with hook_form_alter()
    9. 7:33Adding autocomplete to a text input
    10. 12:44Using the #ajax attribute for dynamic form building
    11. 8:51Creating confirmation forms
    12. 7:16Creating a module settings form
  7. 64:31How to Add and Manipulate Pages With the Menu System
    1. 4:42How the menu system works
    2. 5:47A simple menu callback
    3. 9:41How to use render arrays and tabs
    4. 2:09How to use sub-tabs
    5. 2:01How to add a page without adding a menu item
    6. 5:29How to pass arguments through the path
    7. 5:02How to use placehoders to pass arguments in the middle of a path
    8. 8:13How to load objects through placeholders
    9. 4:09How to create dynamic titles with a title callback
    10. 7:53How to modify page output with hook_page_alter()
    11. 4:03How to modify menu items with hook_menu_alter()
    12. 5:22How to use include files to improve performance and next steps
  8. 52:39How to Add to and Manipulate the Theme Layer
    1. 4:12How the theme layer helps designers and coders work together
    2. 4:39How to invoke a theme function
    3. 1:36A more complex example of theme_item_list()
    4. 5:14How to theme tables and the essence of theming
    5. 6:44How to implement a theme function and how the theme registry works
    6. 6:47How to create template files
    7. 7:41How to use preprocessing functions
    8. 5:41How to add CSS files in theme functions and template files
    9. 5:50How to override theme functions with hook_theme_alter()
    10. 4:15How to override template files and next steps
  9. 77:47How to Work With the Database
    1. 3:31What is the Database API
    2. 2:31Preview of the final module
    3. 6:39Review of existing module
    4. 3:19How to use table schemas and a description of the Schema module
    5. 3:54Building a database table in an external application
    6. 6:55Setting up the install file and generating a schema with the schema module
    7. 6:48The wrong way to write queries, and restructuring the module
    8. 5:36How to write an INSERT query with the Database API
    9. 3:17The 4 big benefits of using the Database API
    10. 3:42How to write a static SELECT query with the Database API
    11. 2:28How to write a DELETE query with the Database API
    12. 9:12How to write a dynamic SELECT query and easily paginate a result set
    13. 3:20A dynamic SQL query in action
    14. 5:48Using hook_update_N() to add a new table
    15. 8:58Adding utility queries and functions for INSERT, SELECT and DELETE
    16. 1:49Review and next steps for the "How to Work With the Database" chapter
  10. 54:32How to Work With Users
    1. 2:44What this video covers and a preview of the final module
    2. 5:00How to modify the user settings form
    3. 11:18How to save data to an authenticated user
    4. 6:23How to modify the user page
    5. 6:21How to work with user permissions (complete)
    6. 3:33How to respond to a user login or logout
    7. 4:10How to add user bulk operations
    8. 9:14How to store anonymous user data in a cookie
    9. 4:04How to store user data in a session variable
    10. 1:45Review and next steps of the "How to Work With Users" chapter
  11. 83:26How to Work With Nodes
    1. 2:03Introduction to the Node API
    2. 10:09How to load and view a single node and create fake content
    3. 2:47How to load and view multiple nodes at once
    4. 3:13How to manipulate node data with node_save()
    5. 13:03How to add custom data to a node with hook_node_insert() and hook_node_update()
    6. 8:35How to display custom node data in forms and in the node display
    7. 5:00How to add a custom view mode
    8. 4:19How to add bulk operations
    9. 6:02How to control node-based access using hook_node_access()
    10. 7:37How to control node-based access using grants
    11. 9:27How to add a new node type with a module
    12. 3:43How to remove custom content types when a module is uninstalled
    13. 5:57How to add a custom field formatter
    14. 1:31Review and next steps for the "How to Work With Nodes" chapter
  12. 123:46How to Work With JavaScript and jQuery
    1. 5:59Two major use cases for jQuery and JavaScript and what this video covers
    2. 6:51How to include a JavaScript file on every page and intro to the jQuery object
    3. 7:08How to load JavaScript after a page is done loading
    4. 3:22How to use the dollar sign as an alias for the jQuery object
    5. 9:18How to use jQuery selectors
    6. 9:03How to manipulate content in the DOM (Document Object Model) with jQuery
    7. 6:10How to use jQuery events to add interactivity
    8. 6:14How to use effects and work with CSS in jQuery
    9. 11:22How to use Drupal behaviors to add JavaScript functionality to new content
    10. 10:58How to use drupal_add_js() to include and set the weight of JavaScript files
    11. 6:15How to use drupal_add_js() to add inline JavaScript, use the footer, and store settings
    12. 5:09How to include and define a Drupal JavaScript library
    13. 3:25How to use hook_library_alter() to see what JavaScript libraries are available
    14. 14:54How to use the Drupal Ajax library to load dynamic HTML
    15. 2:38How to dynamically load JavaScript and CSS with Ajax
    16. 2:26How to display status messages when using Ajax
    17. 3:06How to add CSS styles, classes, and JavaScript alerts through Ajax commands
    18. 7:14An overview of JavaScript utilities included in core Drupal
    19. 2:14Review and next steps of the "How to Work With JavaScript and jQuery" chapter
  13. 39:07How to Work With Files and the File API
    1. 2:43What this video covers and a demo of our node-free image gallery module
    2. 2:24What the difference is between a URI and a URL
    3. 3:22What stream wrappers are and how they work
    4. 1:36How the private file system works
    5. 5:15How file and folder permissions work, and best practices
    6. 2:41How to set up PHP to properly handle file uploading
    7. 5:45How to create a simple form with an unmanaged file input
    8. 5:02How to use a form validation function to validate a file
    9. 3:36How to use hook_file_validate() to validate an uploaded file
    10. 6:43How to use core file validation functions and define your own validator
  14. 98:06How to Work With Files and the File API, Part 2
    1. 7:56How to process an unmanaged file and recursively create a directory
    2. 7:32How to use file_unmanaged_copy() to move a file to a permanent location
    3. 7:37How to loop through a file directory and create a URL from a URI
    4. 6:49How to delete an unmanaged file
    5. 4:52How to recursively delete all unmanaged files in a directory
    6. 10:07How to use the private file system with unmanaged files
    7. 7:30How private files are delivered and how to troubleshoot private file issues
    8. 10:34How to add a managed file input to a form
    9. 5:57How to validate a managed file, prevent it from being deleted and add a usage marker
    10. 5:58How to use the EntityFieldQuery class to match certain criteria and display the results
    11. 6:42How to delete managed files
    12. 6:08How to work with private managed files
    13. 4:19How to configure and use X-Sendfile to improve private file performance
    14. 6:05A quick look at the code behind stream wrappers


Add to playlist

Add to , or

Add to new playlist:

Add to playlist
This is a member-only feature
But, it's easy to become a member

Add to cart:

Add to playlist

Add to , or

Add to new playlist:

Add to playlist
Contact us

Below are the supported keyboard shortcuts for our video player.

Start / stop video
Go to next video
Go to previous video
Increase or decrease player speed by 20%
Skip ahead or go back by 15 seconds
Jump to a percentage (2 is 20%, for example)
Toggle full screen
Videos Pricing More Search
BuildAModule Logo Icon BuildAModule Logo Icon
Become a member!
1 month
6 months
10% off
12 months
20% off
All memberships come with the following:
24 / 7 access to the entire 1800+ video library
An innovative video player with a rolling transcript
Extensive Drupal and cross-platform training
A thorough and thoughtful training style
Progress tracking
Take notes on specific video sections
Intuitive multi-user management
How many users?
Go solo with a single user, or give multiple team members access through one account and get discounts by bundling multiple users into a single membership.