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