Video Library
21m 46sIntroduction
21m1. Welcome to BuildAModule
3:121. A quick message from Chris Shattuck, the creator of BuildAModule3:372. Getting started with BuildAModule3:353. How to quickly create a remote Drupal site with Pantheon1:594. Brief overview of the Apache, MySQL, PHP (AMP) stack
2:205. How to install Drupal locally on Mac with Acquia Dev Desktop2:426. How to install Drupal locally on Windows with Acquia Dev Desktop2:557. How to import a default Drupal site into Acquia Dev Desktop1:268. How to use the resource pack
10h 36mBuild Your First Drupal 7 Web Site
36m1. Introduction to Our Project and Reviewing Mockups
1:491. Updates to the "Build Your First Drupal 7 Web Site" collection3:152. Introduction2:233. Review of the resources sent by the client3:114. Review of the home page mockup4:265. Review of the calendar, contact us and guide page mockups0:456. Recap of files in our client resource pack
4:447. How to map a mockup to existing Drupal elements3:038. How to use the administration menu and breadcrumbs to get around4:329. Overview of the Appearance page, how theme settings work and how to upload a new logo2:0210. How to hide the site name in the header4:0211. How to work around the disappearing logo bug1:5012. Chapter review and challenges for the "Introduction to Our Project and Reviewing Mockups" chapter
35m2. How to Create and Edit Content
2:1613. What this chapter covers and how to change the site name6:3114. How to add a new page and overview of settings on the "add content" form2:1915. What "node" means and how the notifications area works3:1416. How to edit a piece of content3:0917. How to set the default home page4:1618. How to add content as a menu item and how weight works
1:4419. How URL aliases work1:4720. Finishing adding the About Us page1:1521. How to change the position of a menu item with weight5:0622. Review of the Contact Us form mockup and how the Module listing page works1:1423. How to find a core module that you need and enable it2:0924. Chapter review and challenges for the "How to Create and Edit Content" chapter
38m3. How to Work With Menus, Modules and Webform
3:5725. How to work with the menu listing page1:2426. How to work with the menu "list links" page4:0727. How to enable, edit and move a menu item1:4028. How menu sorting impacts menu item weight4:5329. How to find help and configure the Contact module2:4130. How to disable and uninstall a module
4:3231. How to use the Update Manager module to install a module2:5332. How to set up the initial webform container6:0133. How to add an input to a webform, overview of component types and input options4:0134. Adding an email input and how machine names and tokens work1:5435. Chapter review and challenges for the "How to Work With Menus, Modules and Webform" chapter
41m4. How to Work With Content Types and Fields
4:0436. Finishing up the contact us webform3:2937. How to create a single item checkbox (sign up for newsletter) with Webform2:2438. Testing our contact form as logged in and logged out users (anonymous and authenticated)6:2839. How to view webform submissions and set up e-mail templates2:0240. How content types work3:4641. How to disable "published by" information and a review of the content type edit form
4:0542. How to add a new content type5:3843. How fields work and how to use the field edit form to change a field title3:5644. How to add a new field to a content type3:2345. Adding the rest of the fields we need for the Tour content type2:0446. Chapter review and challenges for the "How to Work With Content Types and Fields" chapter
37m5. How to Work With Pathauto and Introduction to Views
3:0647. Previewing our "add tour" form and introduction to the Pathauto module3:4948. How to install module dependencies4:2749. How to change automated URL alias settings for a content type with Pathauto1:1450. How to find a piece of content that doesn't have a menu item4:2851. How to update URL aliases after a pattern change with Pathauto2:0052. How to work with shortcuts in the shortcut bar
5:2853. What the Views module is for and how to install it1:3254. A deeper explanation of the Views module and the view listing page3:5655. Filling out the "add view" wizard5:5956. Overview of the "add view" settings page and how a view "display" works1:5557. Chapter review and challenges for the "How to Work With Pathauto and Introduction to Views" chapter
32m6. How to Add Fields to a View and Work With the Date Module
3:0558. How to add a new field to a view3:3159. How to set the label, wrap HTML and set default text for a field in a view2:5760. How to rewrite the output of a field to include other fields1:3961. How to edit a view from the view display2:2262. Adding our remaining view fields in quick succession
3:2263. How to adjust the sort order of content in a view4:5364. How to deal with module installation errors and install the Date module4:5865. How to add and configure a date field4:0566. How to work with the pop up calendar and extend the year range1:5367. Chapter review and challenges for the "How to Add Fields to a View and Work With the Date Module" chapter
36m7. How to Fix Broken Views and Work With Taxonomy
1:1768. How to delete a field from a content type4:3069. How to deal with broken views handlers and restore unsaved view changes3:5270. How to modify date formats both globally and in a view2:4271. How to sort view fields and fix broken sort handlers5:0072. How to change view menu settings and add a header4:4173. How to add a date-based filter to a view
1:5374. How to delete a piece of content and modify multiple pieces of content at the same time3:1775. Reviewing our guide data and adding another content type1:0276. A brief explanation of taxonomy2:1177. How to add a taxonomy vocabulary with terms3:4478. How to add a taxonomy term reference field to a content type2:0679. Chapter review and challenges for the "How to Fix Broken Views and Work With Taxonomy" chapter
35m8. How to use Term and Node Reference Fields
4:5380. Updating the guide automatic alias pattern and adding the guide data5:4181. How to share a field between two content types and why you would want to3:3982. Updating our calendar view to use a new field1:3183. Overview of the multiple ways to link a Views field to other related content2:3884. Overview of development (dev) versions of modules and installing the References module3:2785. Adding a node reference field and updating our content
3:0686. Updating our calendar view to use the new node reference field4:0887. How to add an autocomplete (free tagging) field to a content type2:1688. How to use an autocomplete field2:0289. Quickly removing a field and updating our view to use a different field2:0890. Chapter review and challenges for "How to Use Term and Node Reference Fields" chapter
31m9. How to Work With Blocks and Permissions
2:0091. A comparison of our current site to the mockups4:3092. What blocks and regions are, and how to use the blocks administration page2:0193. How to hide the user login and "Powered by Drupal" blocks3:4094. How to add a "log in" menu item to the user menu2:0495. How to enable a menu block and hide a block title1:2896. How to hide the secondary menu (user menu)
5:2097. What permissions are and how to modify them4:4098. How to configure search and how cron runs work2:2299. How to add a new user1:58100. How roles work and how to add a new role1:43101. Chapter review and challenges for "How to Work With Blocks and Permissions" chapter
31m10. Overview of Permissions and Text Formats
1:24102. Review of how roles and permissions work1:15103. What each permission does, from the Block to Menu modules5:44104. What each Node or content-related permission does2:52105. What each permission does, from the Path to System modules3:37106. What each permission does, from the Taxonomy to Views modules2:56107. What each Webform permission does, and a review of our Guide role
1:49108. Different methods for testing the site as another user3:36109. How to use the Masquerade module to act like another user2:28110. Adding a piece of content as a Guide4:00111. How text formats work1:34112. Chapter review and challenges for "Overview of Permissions and Text Formats" chapter
34m11. Configuring Text Formats and Setting Up a Wysiwyg
3:58113. Review of the text format settings page and how filters work1:34114. How to re-order text format filters and why order matters2:54115. How to configure text format filters2:11116. How to add a new text format3:58117. How to configure permissions for text formats2:05118. What Wysiwygs are and how to install the Wysiwyg module1:03119. The problems with Wysiwygs and possible alternatives
2:39120. How libraries work2:38121. How to install the TinyMCE library for the Wysiwyg module3:05122. How the Wysiwyg "Basic settings" and "Buttons and Plugins" options work3:20123. How the Wysiwyg "Editor appearance" and "Cleanup and output" options work3:13124. How the Wysiwyg "CSS" settings work and our Wysiwyg in action1:57125. Chapter review and challenges for "Configuring Text Formats and Setting Up a Wysiwyg" chapter
33m12. Working With Custom Blocks and Image Styles
3:43126. How to add a custom block2:41127. The difference between "URL" and "path" and how to use a "Show on specific pages" input2:08128. How to modify the visibility settings for a block0:50129. Seeing our new block in action4:33130. How to deal with shared field conflicts (unlimited vs. limited values)6:15131. How to add and configure an image field
1:48132. Previewing the display of our image field1:38133. How to hide a field label on a node display page3:26134. What image styles are and a review of existing image styles3:16135. How image style effects work and how to add a new image style1:45136. How to link up an image style with an image field1:50137. Chapter review and challenges for "Working With Custom Blocks and Image Styles" chapter
34m13. How to Work With CSS
3:24138. A recap of what we have covered so far, and what is to come1:35139. How to change the order of fields on the node display page1:10140. How to install Firebug in the Firefox browser2:37141. How to use Firebug to inspect any element3:38142. How to manipulate CSS with firebug4:00143. How to find a good selector and apply styles to a specific element
3:29144. How to rapidly experiment with CSS in Firebug3:30145. How to install the CSS Injector module and find most module configuration pages4:16146. How to add a custom CSS stylesheet to certain pages based on path with CSS Injector1:53147. How to use Firebug to learn more about what an element is2:36148. How to hide breadcrumbs (or any other element) using CSS1:52149. Chapter review and challenges for "How to Work With CSS" chapter
34m14. Troubleshooting Module Installation and Configuration
3:24150. Updating other guide nodes and using alt and title attributes for an image field2:07151. Review of what we need to complete our template2:10152. How to install the Media module3:22153. How to find a module dependency when it is not its own module project2:46154. Where to find information about a newly installed module1:41155. How managed and unmanaged files work, and the benefits of using the Media module
3:32156. How to upload an image with the Media module and use it as a background4:54157. What to do when CSS changes aren't being applied3:17158. What to do when you get a fatal error and how to clear all caches3:57159. How to search for an error in Google and tips for reading a long issue1:42160. The difference between module development versions and official releases2:04161. Chapter review and challenges for the "Troubleshooting Module Installation and Configuration" chapter
33m15. Updating Modules and Manipulating CSS
2:27162. How to check for module updates from your site3:36163. How to update a module with the Update Manager1:31164. How and why to clear Drupal's caches4:10165. How to update a module manually3:43166. How to fix our issue by reading the module help page1:36167. Summary of the steps we took to fix module errors
3:10168. How to insure image URLs work on a remote server3:30169. How to remove the background color of main menu tabs5:41170. What to do about disappearing CSS properties in Firebug2:12171. How to change the font size of the main menu items2:19172. Chapter review and challenges for the "Updating Modules and Manipulating CSS" chapter
32m16. More CSS Updates and Troubleshooting Text Formats
6:12173. How to adjust CSS in the footer using Firebug for testing3:03174. Adding and troubleshooting our footer CSS changes with CSS Injector1:47175. Finishing up our footer margin changes4:45176. How to add a repeating background image to the footer3:30177. Adding a new user with a new role
2:23178. Giving our new user permission to add, edit and delete pages2:17179. How to fix "This field has been disabled because you do not have sufficient permissions to edit it"2:58180. How content and text formats are related, and how to deal with placeholder text3:37181. How to integrate the Media module with a WYSIWYG2:14182. Chapter review and challenges for the "More CSS Updates and Troubleshooting Text Formats" chapter
31m17. How to Evaluate Modules and Install IMCE
4:32183. How to turn the Media browser Wysiwyg plugin on2:47184. How to troubleshoot permissions issues with a module2:33185. How to find solutions on Drupal.org by using Google and reading comments first4:28186. How to assess the health of a module by reviewing the module project page3:21187. How to learn more about what a module does by reading the module project page2:21188. Viewing a demo of IMCE and installing the IMCE module
1:58189. Overview of the IMCE main configuration page4:31190. How an IMCE profile configuration works1:27191. Comparing two IMCE configurations1:38192. How to set up a new IMCE configuration profile1:52193. Chapter review and challenges for the "How to Evaluate Modules and Install IMCE" chapter
44m18. How to configure IMCE and Wrap Up Our Project
4:59194. How to associate IMCE profiles with user roles and upload an image5:04195. How to embed an image in a Wysiwyg with IMCE4:10196. Why styles sometimes display properly in a Wysiwyg but not when viewing the content1:56197. Overview of two solutions to the Wysiwyg style inconsistency issue2:57198. Overview of how to set up a Wysiwyg to use a drop-down selector for CSS classes3:05199. How to configure the styles available in the Wysiwyg0:57200. How to add a class to an element in a Wysiwyg with the "font style" plugin1:18201. How to add easy-to-read aliases for class names in a Wysiwyg
3:20202. How to troubleshoot line break or paragraph problems in the Wysiwyg1:36203. Comparing our home page to the mockup4:10204. How to set a custom 404 "page not found" error page and navigate up paths1:38205. Adding a missing piece of content4:10206. Why it's a good idea to review all the settings when creating a piece of content1:44207. Chapter review and challenges for the "How to Configure IMCE and Wrap Up Our Project" chapter3:37208. Congratulations
6h 18mAdvanced Site Building in Drupal 7
23m1. Welcome to Advanced Site Building
1:521. Welcome to "Advanced Site Building"3:342. About our project and how project roles work4:113. What a "site builder" is and the powerful tools they work with1:224. What wireframes are and where to find them in our resource pack
2:485. Identifying the components in our blog home page wireframe2:476. Reviewing our blog post and review page wireframes0:527. About our step-by-step approach6:128. How to set up our Drupal installation with Acquia Dev Desktop
30m2. How to Set Up Administration Tools to Speed Up Productivity
1:399. About the administration modules we'll be using3:2810. How to install a module the traditional way and configure the Administration Menu module6:0811. How to install a module using Drush, and how we approach installing modules in this series1:1412. How to use the Coffee module1:1713. How the Navigate module works2:5414. How the Backup and Migrate module works and creating our first backup (Backup 1)1:3215. How to restore a Backup and Migrate backup
2:0316. How Backup and Migrate works with cron and cache tables3:5617. How the Module Filter module works2:3118. How the Module Instructions module works0:3919. About the Admin module and why we're waiting to install it1:5420. How to set up some basic visual branding0:5721. A quick summary of our work and backing up (Backup 2)
36m3. How to Configure Content Type Settings and Splitting Fields Between Types
1:5622. How to determine when to split up content into two content types3:4323. How to set sane default publishing settings for a content type1:3624. Why you would want to share existing fields between content types4:3525. How to set up an image field and why to use individual folders for media fields3:0526. How to choose a good, basic URL scheme and adding our first product1:2627. About the special role of the first created user (user 1)1:3928. Setting up our "review" content type
2:3929. How to install module depencies and installing the Entity Reference module2:1930. The difference between a field and a field instance, and setting up an entity reference field1:4431. About the Fivestar and Voting API modules4:0432. How to add a fivestar field and configure voting tags4:3733. Adding our additional fivestar fields and why site building can sometimes feel tedious2:4334. How to put field labels inline and hide the text below a fivestar rating
41m4. How to Use Display Suite for Grouping Fields and Positioning Content
1:0735. Creating a backup and why things are going to start getting interesting (Backup 3)3:2336. An overview of the two methods to group fields in a display: view modes and the views module2:2637. The 4 more common methods of positioning content on a page0:5838. Quick recap of the 4 methods of positioning content3:1639. How to choose the correct view mode for a particular context2:3340. Overview of the Display Suite modules and which ones we should enable2:0741. How to enable editing view modes and adding a custom view mode with Display Suite2:0642. How to enable a custom view mode and test it out2:0943. How to hide the 'submitted by' information and node title by setting a Display Suite layout
1:4344. How to add a field with custom content to a view mode with Display Suite1:4845. How to choose an image style for a particular context2:2846. When to create a new image style and how to name it0:3847. Creating a backup and nice work (Backup 4)3:3648. How to display content in a sidebar within the content region using Display Suite1:4349. How the 'region to block' feature works and what we mean by 'region'6:1050. How to display fields in blocks that can be enabled in theme regions using Display Suite1:5651. Removing the block title, label and shrinking our image style1:2652. Making another backup (Backup 5)
14m5. How to Use the Context Module for Positioning Content
2:0353. The limitations of the default blocks listing page and what the Context module does1:2554. Overview of the modules that come in the Context package and installing Context4:0055. How the Context module works and how to create a context
1:0456. Why it might make sense to use Context for positioning all blocks5:3457. How to use Context instead of the default blocks configuration page0:3658. Creating a backup before diving into Panels (Backup 6)
42m6. How to Use Panels for Positioning Content
1:1159. Why we're looking at so many ways of doing the same thing2:5460. About your responsibilities as a site builder, and thinking in terms of boxes1:1761. Why Panels is so powerful and potentially intimidating2:4062. How to install Panels and what the Page Manager module does4:2263. How variants work in Panels3:4664. How to use the Panels builder layout to understand regions, rows, columns and canvas1:5165. How to add a panel pane that contains a full node2:1366. How to add a pane for a node field and what we still need to complete our Panels layout0:5567. How to modify a context with the Context module
1:5268. How we will approach aligning the title with the content sidebar in Panels2:2869. How to install the Meta tags and Token modules4:2970. Attempting to display the title of our panel by using the node title pane (and failing)1:5771. Why using the page title Panel pane doesn't work for our panel page title2:0772. How to add custom content to a panel pane3:0373. How to inspect an HTML element to find out why it looks different than we want it to0:4274. A pre-exploritory backup (Backup 7)4:2875. Comparing Panels and Display Suite side-by-side
48m7. How to Import Content With Feeds
1:3176. About what's coming up next (Feeds and Views)1:3277. About what the Feeds and Migrate modules accomplish2:5678. About the Feeds modules, alpha releases and why the UI (user interface) is in a separate module2:4779. What to do when there isn't a recommended module release, and about development releases3:1380. How to structure a CSV (comma-separated values) file for Feeds and a bit about our import4:4781. How to import nodes with the Feeds module (basic settings and importer)6:0182. How to import nodes with the Feeds module (parser and processor settings)2:0283. How to import nodes with the Feeds module (mapping title, body and image)2:3284. How to import nodes with Feeds and undo our import
2:2685. Setting up our node images in our files directory and what we need to rewrite an image path2:0386. How to install the Feeds Tamper module5:0187. How to use Feeds Tamper to rewrite the path of an image so it imports properly2:4788. Setting up our product review Feeds importer3:3689. Setting up our mappings for the product review Feeds importer2:2490. Updating our product review nodes manually2:0191. How to bulk publish nodes and strategy for importing content for site building0:3992. Backing up our project (Backup 8)
48m8. Advanced Views
3:1093. Why to display a single piece of content with Views, installing Views, and why we're building the same view 3 times5:2994. How to group views displays, and how to decide what entity to base a view on1:4695. How to fill in the views wizard to create a block1:5196. How contextual filters work in the Views module2:2797. How to add a views contextual filter for the node currently being viewed1:2398. How to preview a view with a contextual filter3:4899. How to display a full node in a views block1:09100. Why to disable a block even when it's not visible, and displaying a block only for certain node types1:37101. How to display a block for certain node types using Context2:30102. Comparison between using Context and the default blocks configuration workflow
2:39103. The difference between our two views and filling out the views wizard1:43104. How relationships work in Views and how to add a referencing entity relationship2:49105. How to create a contextual filter with a relationship in Views2:27106. How to use fields or rendered entities when using a relationship in Views0:53107. Enabling our product-based block with Context1:49108. How to hide a block title using the Context module and why it's a bad idea1:38109. How to hide a Views block title0:56110. About how we're going to rebuild these views using fields instead of a view mode5:44111. How rebuilding our review-based view using fields adds complexity2:16112. How to rebuild our product-based view to use fields
30m9. Where Display Modules Overlap and URL Strategy
0:32113. Backing up our work (Backup 9)2:25114. Where Panels, Views, Display Suite and Context overlap in functionality5:22115. Overview of options for displaying blocks in sidebars (Panels, Views, Display Suite, Context)3:23116. How to use Mini-Panels to create one block that includes all our global blocks2:00117. How to position a Mini-Panel block using the Context module2:24118. How and why to hide PHP errors with the "Logging and errors" settings1:30119. How to disable a view and removing blocks using Context
1:35120. Why ordering blocks across multiple contexts is tricky, and what we're about to do2:33121. How we will approach creating an exception for a site-wide context2:38122. How to set good default URL alias patterns and installing the Pathauto module1:31123. Why it's important to establish a URL alias strategy before launching a site1:33124. How to bulk update the URL aliases of existing nodes and how the Global Redirect module works2:09125. How to use multiple conditions in a context and exclude certain paths1:02126. Adding our mini-panel block back in through the "review page" context
28m10. How to Work With User Fields and Import Users
0:25127. Backing up our work (Backup 10)2:07128. About the views-based blocks we're about to build2:35129. How to add a textual bio field to a user3:38130. How to install the Link module and configure a link field2:30131. The problem with using Feeds with user images, and adding a user avatar3:15132. Setting up our user image field
4:05133. How to use an image field as the user avatar with the User Picture Field module0:56134. Hiding our default user avatar and why we did this switch again3:14135. Reviewing our settings for our user feeds importer3:17136. Setting up our mappings and tamperings for our user feeds importer2:34137. Importing our users and moving our user images over
34m11. Formatting a Blog Entry Page
0:38138. Backing up our work (Backup 11)3:15139. When to use the core blog module, and when to create your own from scratch1:50140. Reviewing our blog content structure in a CSV file3:11141. Creating our basic blog entry content type6:03142. Adding a 'tags' field and image field to our blog entry content type1:19143. Moving our blog images over to prepare for the feeds importer2:09144. Verifying and adjusting our blog entry feeds importer settings
2:47145. Setting up our blog entry feeds importer mappings2:30146. How to import multiple entries into a single field using the "explode" feeds tamper plugin1:46147. Why to use multiple roles with fewer permissions, and why our import fails1:41148. How to add a "blog contributor" role and assign roles to multiple users at once1:37149. Importing and verifying our blog entry content3:35150. Cleaning up the display of our blog entry display2:01151. How we will approach building our "About the author" block
12h 48mPHP Programming Basics
25m1. Series Introduction and Your First PHP Script
3:021. Welcome to PHP Programming Basics5:142. What programming is and tips for following along1:593. Overview of the AMP stack (Apache, MySQL, and PHP)2:204. How to install Acquia Dev Desktop on a Mac
2:425. How to install Acquia Dev Desktop on Windows2:556. How to import a default Drupal site on Dev Desktop4:067. Setting up our example folder and creating our first web page3:418. Creating our first PHP script and the structure of a simple PHP statement
45m2. Working With Strings and Variables in PHP
1:469. What an IDE is and the benefits of using one2:1210. How to work with white space and comments4:4111. How to work with strings2:4412. How to use a variable7:0413. How to work with string, number and boolean variables5:5614. How to identify and fix common syntax errors2:4915. How a PHP function is structured and how to use strstr()
3:0316. How to use the string functions nl2br(), trim() and strlen()1:3817. Practical uses for strstr(), nl2br(), trim() and strlen()3:3918. How to use additional string functions like str_replace() and strip_tags()3:0319. How to use the date() function to display a readable date6:0120. How to read a PHP.net function page1:2121. String function challenges
31m3. How to Work With Arrays in PHP
5:3922. How to work with simple arrays and use var_dump()4:1223. How to work with associative arrays8:0924. How to work with multi-dimensional arrays
7:4425. How to use array functions like asort(), array_pop() and array_rand()4:5226. How to work with array-like objects1:1927. Array function challenges
40m4. Logic, Control Structures and Looping
1:3028. What logic is and how we're approaching learning it3:3229. How to use an "if" control structure4:3530. How to use an "if ... elseif" control structure6:0831. Incorporating what we know about arrays and control structures in a random generator script5:5132. Adding additional elements of randomness to our random generator script
3:3633. How to use a "foreach" loop6:4334. How to use a foreach loop to generate an HTML table from an array4:3735. How to use a "while" loop1:0036. How to use a "for" loop and how it compares to "while"2:3637. How to modify PHP settings with the php.ini file and stop runaway scripts
1h5. Creating Custom Functions and Working With External Data
1:1338. Why separating data from logic is important6:1239. How to use include() and include_once()1:5540. Moving our data into a user-friendly text file3:5441. How to use an output buffer to store data from an external file as a string5:3442. How to create a parser that converts a comma-separated string (CSV) into an array3:0943. How and why to create a simple custom function1:3544. How to create a function that accepts parameters4:0545. How to create a function that has optional parameters and build a virtual dice roller1:4646. A deeper explanation of the purpose of custom functions4:1447. How to work with references in a function (i.e. variables with an ampersand)
1:3948. A quick summary of what we've covered so far, and what's to come3:2249. How to wrap existing code in a function5:3850. How to generalize our random text generator code to make it more powerful3:2451. Using our random text generator script to create a virtual Twister spinner4:1252. Wrapping our people parser in a function, reviewing the code and identifying improvements7:3853. Reviewing our generalized parsing function, part 15:5754. Reviewing our generalized parsing function, part 26:3255. Exploring our generalized table rendering function2:5056. Re-using our table rendering function and evaluating our changes
22m6. Troubleshooting errors and using operators
2:3257. Accidentally assigning a variable instead of comparing it2:5458. Troubleshooting a missing closing bracket1:3459. Troubleshooting a missing opening bracket2:1160. Troubleshooting a missing parenthesis1:2061. Troubleshooting the "Wrong parameter count" error
3:3262. How to use assignment and string operators2:4063. How to use comparison operators1:4764. How to use arithmetic and incrementing operators2:0365. How to use logical operators2:0166. How to use array operators
1h7. Working With Forms in PHP
4:0767. The lifecycle of a form and chapter overview6:0668. How to process a simple form with PHP1:4069. A quick overview of the next three form examples4:1070. How to use a hidden input to distinguish multiple forms on one page and how $_REQUEST works2:0071. The HTML structure of a simple contact form2:0672. How to pre-fill form inputs, and seeing our rendered forms4:0073. How to use a switch statement and the $_POST variable6:1074. How to process a contact form and send a plain text mail with PHP3:4275. How to keep data in an input after a form is submitted, and a quick revie9:1776. How to run our examples in a remote development environment with Pantheon8:0477. How to run our examples in a remote development environment with WebEnabled
5:1978. How to use a ternary operator and our search form in action3:1179. Stepping through our search form code the first time the form is generated8:5080. Stepping through our search form code after a search is submitted3:3381. Demoing our random text generator with a form for user-set tokens3:3982. Stepping through our random text generator form code the first time it's generated6:4483. Stepping through our random text generator form code after it's been submitted5:1084. How to use file comparison tools to see differences between files1:4885. Demoing our random text form with loop-generated infinite inputs5:5686. Stepping through our infinite randomness code the first time it's loaded2:0987. Stepping through our infinite randomness code after submitting the "number of inputs" form3:3288. Stepping through our infinite randomness code after submitting the "random generation" form
1h8. Working With Sessions in PHP
4:1189. How use to sessions and the $_SESSION variable to store user information1:1890. Demoing our log in form3:0091. How to create a log in form4:3492. How to handle log in errors when submitting an invalid username and password3:0593. How to log a user in after submitting a valid username and password2:1294. How to log out a user and pass variables through the URL3:5995. A demo of our text adventure game13:1296. Stepping through our code the first time the game is loaded, and how global variables work9:3797. Entering a command in our text adventure game, and using the eval() function
6:1298. Stepping through our game code as we move south and north8:5599. Stepping through our game code as we pick up and item, use it, then reset our game4:38100. How an index.php page works, and a quick demo of our refactored game2:20101. The pros and cons of using .inc files, and a review of our new file structure3:02102. The benefits of creating a function library and reviewing our index and function files6:12103. Reviewing the updates we made to avoid using global variables6:01104. Continuing our review, the benefits of generalizing code and caching data4:22105. Wrapping up our review of changes in our refactored text adventure3:29106. Creating a render function for our game as a final touch
1h9. Working With the (MySQL) Database
4:22107. The benefits of using a database (MySQL)4:42108. What databases and tables are, plus a quick tour of PHPMyAdmin5:06109. What SQL is and how to write a simple SELECT query2:45110. How to filter SQL query results with LIKE and wildcards4:47111. How to create your first database and table4:04112. How to change column types using PHPMyAdmin and adding our final entry5:40113. How to use AND and LIKE with two wildcards in a query6:03114. How to connect to a MySQL database with PHP3:11115. How to run a MySQL database query in PHP
2:44116. How to use ORDER BY to sort query results and a couple other query examples2:23117. How to move our database connect script to a commonly included file3:36118. How to add new fields to a table and a warning about modifying existing tables2:46119. Populating our new people table columns and demoing our login form2:36120. Comparing our array-based login form to our database-based version1:17121. How to turn off magic quotes for a more realistic server enviornment4:38122. What an SQL injection attack is and how to create one2:51123. How to protect against an SQL injection attack1:37124. The two types of attack, and brief explanation of defense strategy
1h10. Working with CRUD functionality and our database
2:27125. What CRUD is (Create, Read, Update, Delete) and how to backup a database in PHPMyAdmin4:23126. How to import from PHPMyAdmin and protect against Cross Site Request Forgeries (CSRF)3:21127. How to display a list of database data in an HTML table using PHP2:34128. How to create a "delete" HTML link that deletes a database record2:36129. How an INSERT statement is structured, and a demo of our insert form3:05130. Reviewing the diffrences after added the insert form to our script4:59131. How to generate an INSERT statement using a loop, and a review of our workflow2:55132. Why to validate forms, and a demo of validating numbers, usernames and empty inputs3:32133. Comparing the validation changes made in our CRUD script5:46134. How to use looping in validation and validate empty and numeric inputs
3:44135. How to validate alphanumeric inputs and unique usernames2:14136. Demo of our update form script1:17137. How to structure an UPDATE statement and the importance of not forgetting WHERE5:54138. Reviewing changes where we added the ability to update a record4:19139. How to use the same form to both create and update records6:02140. Walking through our add and edit form code as it is processed2:13141. Ways that our CRUD script could be refactored and improved6:09142. Comparing our refactored changes to our previous CRUD script1:32143. A quick review of our CRUD form improvements
2h11. How to Build Your Own Content Management System and Understand Drupal Better
2:41144. Additional ways that we could use databases and our next big example3:13145. Reviewing the visual structure of our static site1:07146. Reviewing the folder and file structure of our static site5:35147. Comparing the HTML structure of our home and about pages3:23148. How to create a header template file3:53149. Creating our footer and applying our templates to the home page2:07150. Applying our header and footer to our other pages1:52151. Reviewing our product page and identifying repetition that can be turned into a function4:03152. How to render our products with a function to reduce HTML repetition3:01153. When to use unique identifiers (IDs) and what a universally unique ID is (UUID)5:00154. How to use a central product array for both of our product listings1:54155. Applying our product rendering function to the product page1:27156. The benefits of routing every page request through a single file with mod_rewrite2:24157. How a .htaccess file works and how to set one up5:41158. How to route all URLs through a single file (the Front Controller pattern)3:29159. How to use the URL query string to trigger an include1:32160. How to use the heredoc syntax to avoid escaping multiple quotes2:06161. Why to use a full page template file instead of a header and footer2:50162. A quick summary of our changes and a review of our other include files
1:27163. Why it's useful to have configurable settings for the end user and to reuse on other sites6:04164. Walking through changes after adding configurable settings2:14165. Why it's better to use a function for settings instead of direct variables3:24166. What still needs to happen to allow end users to manipulate data on our site3:19167. Creating the database and users table for our next steps1:38168. Demo of our CMS login form5:42169. Adding our database connect script, notices function and login links3:52170. How our login and logout features work2:18171. Demo of our new edit, delete and add user features0:48172. Reviewing changes in our login form6:53173. What happens in our updated CRUD code when we submit a user edit form5:52174. What happens in our updated CRUD code when we add a user5:24175. The problem with using relative or absolute paths in subfolders4:23176. Using a URL function to route all requests to the right location regardless of subfolder3:28177. Creating our products database table and populating it2:41178. Discussing the similiarties that will exist between our product and user administration pages1:04179. Demo of our updated product CRUD script4:17180. Comparing the code in our user and product CRUD scripts2:25181. Reviewing changes in our product rendering code, and how the WHERE IN SQL syntax works
1h12. Generalizing Functionality and Object Oriented Programming Primer
1:37182. Why generalizing CRUD functionality makes so much sense1:35183. Setting up the next steps and a demo of our generalized CRUD script5:30184. How to distill CRUD configuration options into an array1:25185. Overview of the functions in our generalized CRUD script6:09186. How to create a generalized record listing function6:51187. How to build a generalized CRUD edit and add form function5:39188. How to build a generalized CRUD form validation function3:46189. How to create a generalized CRUD form processing script1:54190. Summary of what we've accomplished, and a few challenges2:00191. How to set up a database table to store page data5:26192. Demoing our page administration tools and adding our adding our first pages6:00193. How to load pages from both files and the database
3:29194. How to convert file-based pages to database-based pages, and deciding which to convert1:16195. How this split file and database structure relates to Drupal3:41196. What we've accomplished with our CMS, compared to other CMS's like Drupal3:07197. Challenge your new PHP skills with these CMS enhancements1:20198. Why there's no need to be scared of OOP (Object Oriented Programming)2:30199. Demonstration of our new object oriented CRUD code2:38200. The weaknesses of function-based coding, and what objects are in OOP3:57201. How classes, methods, properties and constructors work3:29202. How instantiation works, and comparing our old render function to our new OOP one1:39203. How to use properties in a class1:35204. What extending a class means0:26205. Congratulations on finishing PHP Programming Basics
12h 23mDrupal 7 Development Core Concepts
22m1. Welcome to Module Building
6:241. Why to build a module instead of modifying source code, and how this video series works2:582. Setting up the module folder3:363. About the .info file
35m2. How to Build Module Scaffolding
3:356. Setting up the .module file structure4:067. The .info file in detail11:528. The .module file in detail
7:479. Adding a module settings page in an include file5:5210. Adding documentation with the README file2:3111. Review and next steps for the "How to Build Module Scaffolding" chapter
1h3. How Hooks Work and How to Use Them
5:5812. What hooks are and a demo of our final module9:5713. How hooks are invoked with module_invoke_all()3:3114. How hooks are invoked with module_invoke()5:2115. How hooks are invoked through custom functions0:4116. Summary of hook implementations4:5717. Using hook_init() to execute code on every page2:0418. How to watch data change in the database
2:3619. How to implement hook_permission()7:4320. Adding a settings page with hook_menu()4:2521. Implementing scheduled events with hook_cron()3:3022. Adding a block starting with hook_block_info()5:1923. Adding block configuration with hook_block_configure()10:4024. Displaying a block with hook_block_view() and checking permissions with user_access()3:1925. Seeing our final module in action and next steps
26m4. Overview of Coding Standards
6:2526. Why coding standards are useful and important2:5027. Using the Coder module to find problems2:4728. Working with white space2:1629. Using operators1:2530. Defining functions and class constructors
1:3031. Working with arrays2:0832. Quotes and string concatenation2:2633. Writing good comments2:2834. Including code files, php tags and semi-colons2:1435. A few miscellaneous items
51m5. Development Tips and Tricks
3:0436. About the Tips module11:1837. Using url() and l() to generate URLs and links5:5138. Using the t() function to make text translatable8:4139. Using variable_set(), variable_get() and variable_del()
13:0540. IDE features and comparison6:2941. How to find out if your module exists already2:4642. Review and next steps for the "Development Tips and Tricks" chapter
1h6. How to Build and Manipulate Forms with the Form API
6:1643. The benefits of using the Form API7:2544. Creating a simple form3:3345. Creating an embedded form5:3146. Using validation functions2:3347. Creating submission functions6:3748. Exploring more form elements and attributes
5:0949. Adding usability with the #states attribute7:5450. Modifying forms with hook_form_alter()7:3351. Adding autocomplete to a text input12:4452. Using the #ajax attribute for dynamic form building8:5153. Creating confirmation forms7:1654. Creating a module settings form
1h7. How to Add and Manipulate Pages With the Menu System
4:4255. How the menu system works5:4756. A simple menu callback9:4157. How to use render arrays and tabs2:0958. How to use sub-tabs2:0159. How to add a page without adding a menu item5:2960. How to pass arguments through the path
5:0261. How to use placehoders to pass arguments in the middle of a path8:1362. How to load objects through placeholders4:0963. How to create dynamic titles with a title callback7:5364. How to modify page output with hook_page_alter()4:0365. How to modify menu items with hook_menu_alter()5:2266. How to use include files to improve performance and next steps
52m8. How to Add to and Manipulate the Theme Layer
4:1267. How the theme layer helps designers and coders work together4:3968. How to invoke a theme function1:3669. A more complex example of theme_item_list()5:1470. How to theme tables and the essence of theming6:4471. How to implement a theme function and how the theme registry works
6:4772. How to create template files7:4173. How to use preprocessing functions5:4174. How to add CSS files in theme functions and template files5:5075. How to override theme functions with hook_theme_alter()4:1576. How to override template files and next steps
1h9. How to Work With the Database
3:3177. What is the Database API2:3178. Preview of the final module6:3979. Review of existing module3:1980. How to use table schemas and a description of the Schema module3:5481. Building a database table in an external application6:5582. Setting up the install file and generating a schema with the schema module6:4883. The wrong way to write queries, and restructuring the module5:3684. How to write an INSERT query with the Database API
3:1785. The 4 big benefits of using the Database API3:4286. How to write a static SELECT query with the Database API2:2887. How to write a DELETE query with the Database API9:1288. How to write a dynamic SELECT query and easily paginate a result set3:2089. A dynamic SQL query in action5:4890. Using hook_update_N() to add a new table8:5891. Adding utility queries and functions for INSERT, SELECT and DELETE1:4992. Review and next steps for the "How to Work With the Database" chapter
54m10. How to Work With Users
2:4493. What this video covers and a preview of the final module5:0094. How to modify the user settings form11:1895. How to save data to an authenticated user6:2396. How to modify the user page6:2197. How to work with user permissions (complete)
3:3398. How to respond to a user login or logout4:1099. How to add user bulk operations9:14100. How to store anonymous user data in a cookie4:04101. How to store user data in a session variable1:45102. Review and next steps of the "How to Work With Users" chapter
1h11. How to Work With Nodes
2:03103. Introduction to the Node API10:09104. How to load and view a single node and create fake content2:47105. How to load and view multiple nodes at once3:13106. How to manipulate node data with node_save()13:03107. How to add custom data to a node with hook_node_insert() and hook_node_update()8:35108. How to display custom node data in forms and in the node display5:00109. How to add a custom view mode
4:19110. How to add bulk operations6:02111. How to control node-based access using hook_node_access()7:37112. How to control node-based access using grants9:27113. How to add a new node type with a module3:43114. How to remove custom content types when a module is uninstalled5:57115. How to add a custom field formatter1:31116. Review and next steps for the "How to Work With Nodes" chapter
2h12. How to Work With JavaScript and jQuery
5:59117. Two major use cases for jQuery and JavaScript and what this video covers6:51118. How to include a JavaScript file on every page and intro to the jQuery object7:08119. How to load JavaScript after a page is done loading3:22120. How to use the dollar sign as an alias for the jQuery object9:18121. How to use jQuery selectors9:03122. How to manipulate content in the DOM (Document Object Model) with jQuery6:10123. How to use jQuery events to add interactivity6:14124. How to use effects and work with CSS in jQuery11:22125. How to use Drupal behaviors to add JavaScript functionality to new content10:58126. How to use drupal_add_js() to include and set the weight of JavaScript files
6:15127. How to use drupal_add_js() to add inline JavaScript, use the footer, and store settings5:09128. How to include and define a Drupal JavaScript library3:25129. How to use hook_library_alter() to see what JavaScript libraries are available14:54130. How to use the Drupal Ajax library to load dynamic HTML2:38131. How to dynamically load JavaScript and CSS with Ajax2:26132. How to display status messages when using Ajax3:06133. How to add CSS styles, classes, and JavaScript alerts through Ajax commands7:14134. An overview of JavaScript utilities included in core Drupal2:14135. Review and next steps of the "How to Work With JavaScript and jQuery" chapter
9h 25mChange Management and Version Control
49m1. Installing Git and Working on the Command Line
5:591. Welcome to "Change Management and Version Control"7:362. How to install Git on Windows with mysygit3:053. How to install git and SmartGit on a Mac7:304. How to create a Git repository and add a complete Drupal site to it7:125. Why the command line can be scary, and the benefits of conquering your fear
7:086. How to navigate file structures and stop processes on the command line3:237. How to edit and save text files on the command line with VIM2:518. How to use built-in help on the command line5:009. How to create, move, copy and remove files on the command line
58m2. Staging, Committing and Undoing in Git
10:5310. Introduction to version control6:3111. How to stage and unstage files and what staging means2:2812. How to commit a file and stage multiple files5:5913. Why certain files are ignored and how to add your own ignored files3:0514. How to commit unstaged changes and modify staged files4:4915. How to use the diff command to review modifications
3:2716. How to use git help5:0017. How to use SmartGit to view graphical diffs and revision trees5:5218. How to undo modifications to staged and unstaged files2:1719. How to use the log command for viewing revision information5:5120. How to undo commits2:0621. Quick summary of undoing in Git
34m3. Branching, Merging and Tagging in Git
3:5422. How to move files in Git4:0623. Introduction to branching and merging in Git5:0924. How to create a new branch and navigate existing branches5:1425. How to merge with and without branch history1:3126. How to modify an existing commit message
0:5227. How to delete a branch5:1928. How to use a stash to save uncommited changes when switching branches3:0129. How to apply a saved stash2:2330. Quickly commiting, merging and deleting a branch3:2031. How to add, remove, list and rename tags
1h4. Working With Remote Git Repositories
2:5832. How remote central repositories work11:0533. How to create an account on GitHub and set up SSH key pair authentication6:1134. How to set up a remote repository and connect to it1:1635. What we'll be doing now with our remote repository3:0936. How to clone our remote repository into a production environment5:0037. How to push a change from dev to production with push, fetch and merge1:3338. How to push a change from dev to production with push and pull
6:5039. How to undo commits to a remote repository3:1740. How to push changes from production to dev8:5641. What conflicts are and how to resolve them3:2342. How to create a branch and track it remotely6:5843. How to create a release with a develop-master branch system3:0144. How to set up a new environment for a team member
38m5. Deploying Releases, Features, and Fixes With Git
6:4145. How to use a scalable Git branching model called Gitflow1:3846. Summary of how to use release, hotfix and feature branches8:3747. How to create, deploy and clean up a release branch1:2648. Release branch cycle summary
5:0949. How to create, deploy and clean up a hotfix branch8:5550. How to troubleshoot pushes, pulls and conflicts with a feature branch3:0251. Merging an update into a feature branch, then deploying and cleaning up2:3752. Summary of lessons learned in the feature branch cycle
24m6. How to Version Control the Database
5:5053. Overview of database components you can add to version control2:5754. Where to store version controlled assets2:0355. How to set up an assets folder that is not accessible via the web3:3156. How to export a database schema for version control
4:0957. How to export database content for version control3:0358. Cleaning up our assets folder and rolling our assets into a feature branch3:2259. How often should you update version controlled database dumps and why
1h7. How To Version Control Site Configuration With Features
9:2560. Overview of a typical push cycle, with and without version control1:5061. How to download and install the Features module10:0962. How to build a feature module, and how each component group works1:4763. The 3 big benefits of having our components in a feature module2:4864. How to revert a modification to a feature module component3:4165. How to install and use the Diff module to view feature module overrides7:4466. How to learn more about your feature by reviewing the code5:3367. How to update a feature and review updates with Git diff
1:4368. How to revert a feature once changes are in code3:0869. How to deploy a feature module2:3870. Overview of merging multi-user changes to the same component3:0471. Pushing a feature modification and explaining unsolicited changes8:4172. How to merge our feature component changes and update a feature module4:0973. How to organize features and implications of getting everything into code2:5774. How to re-organize components into new features with the UI or the .info file4:5275. Overview of other exportable components and enabling a copied feature module
25m8. How To Manage Non-Exportable Configuration Changes
2:0776. Overview of using Selenium IDE to store config-building macros7:0877. How to create and modify a Selenium macro that builds a node4:1778. How to export Selenium tests and creating one more test
2:3679. How to keep team members up to speed with manual changes using a simple list3:3980. How to package several repository modifications into multiple commits6:0281. How to load and play back Selenium tests to update another environment
57m9. How to Override Shared Features and Modify Text
4:5382. The challenges of overriding shared feature modules and some solutions4:4583. How to override a box title, and how to learn about what else we can change4:0084. How to override block position, and a brief overview of the Context module2:5785. How to override user permissions5:4086. How to override Views options like title, ajax and number per page4:4087. How to override a Views query, like changing node type or order
2:5288. How to override a menu item title4:5189. How to override variables and how the Strongarm module works3:4490. How to modify interface text and version control the overrides5:1991. How to use a version controlled settings.php include to share settings6:0992. How to find and override strings with dynamic content or links7:1593. How to override a feature module by cloning
33m10. How to Upgrade Drupal and Patch Contributed Modules
8:3894. How to patch a module3:4695. How to upgrade a module sustainably4:1196. How to prepare for a minor Drupal upgrade
7:5997. How to use a patch to upgrade the Drupal codebase4:5698. How to upgrade the Drupal codebase the traditional way3:4299. How to complete a minor upgrade
37m11. How to Install Drupal, Manage Features and Perform Common Tasks Using Drush
5:31100. Introduction to Drush, the ultimate Drupal productivity tool2:53101. How to install Drush on a Mac1:12102. How to install Drush on Windows4:25103. How to use Drush status, help, clear-cache and archive-dump2:04104. Overview of using Drush to speed up Features
5:44105. How to update, review and revert feature modules with Drush3:44106. How to add new components to a feature module with the .info file and Drush5:35107. How to download and install Drupal using Drush2:14108. How to download and enable a module or theme using Drush3:58109. How to update Drupal core and contributed modules using Drush
31m12. How to Configure Drush and use Drush Make
3:59110. How to set up a Drush configuration file (drushrc.php) and use shell aliases1:52111. How to set up a global Drush configuration file4:35112. How to use Drush aliases to simultaneously work with multiple Drupal installations3:43113. How to set up a remote site alias for Drush3:20114. Why building site scaffolding is tricky and how Drush Make can save you time
1:45115. How to install Drush Make and any Drush extension6:27116. How to create and run a Drush Make file3:27117. How to generate a Drush Make file from an existing Drupal installation2:29118. How to quickly generate a Drush Make file with drushmake.me
37m13. How to Extend Drush and Other Useful Drush Tools
3:53119. How to review and filter Watchdog log messages with Drush4:43120. How to add, remove and manage users with Drush5:01121. How to extend Drush with PHP scripts and run arbitrary PHP on-the-fly5:42122. How to pass arguments to a custom PHP script for use with the Drush php-script command
4:09123. How to install and use the Drush sandwich example command4:51124. How the Drush example custom sandwich command works5:20125. How to create a custom Drush command3:23126. How to perform SQL queries in Drush and quickly set variables
8h 1mDrupal Theming Essentials
1h1. Important Drupal Theming Concepts
3:141. Who these theming videos are for and what they do (and don't) cover7:182. What is the difference between designing, theming and coding, and why do they overlap so much?10:403. What are all of the different ways to modify Drupal output?3:254. How to determine which method to use when modifying output2:315. A conceptual introduction to the Features module for exporting configuration options as code4:046. How to decide whether to use a module or a theme for your modifications2:427. How to decide when to use a theme function or template file9:528. How the theme registry works5:119. How to find out where any piece of output comes from
6:0510. What view modes are and why you would use them7:1011. How to adjust node view modes through the user interface5:5512. What field formatters are and how to use them to modify field output5:2413. How coding standards apply to the theme layer, and how to add comments to template files10:5314. Template file coding standards and conventions2:4815. How to apply CSS coding standards4:3516. Theme troubleshooting and what to do when you don't see your theme output changes applied7:3117. How to troubleshoot CSS problems in your theme4:0118. Review of 'Important Drupal Theming Concepts' and review
1h2. How to Build and Modify a Drupal Theme or Sub-Theme
7:1819. Overview of included themes and the themes directory, and where to put new themes6:4520. How the different parts of a theme work9:0121. Learning about theme structures by reviewing core Drupal themes4:5222. Learning from the Zen theme file structure2:4023. Learning from the Basic theme file structure2:5624. Learning from the Fusion theme file structure2:2525. Learning from the Marinelli theme file structure8:2026. Review of the theme .info file options
4:4327. How to create a theme folder, add an info file and enable a custom theme5:0028. How to add a screenshot2:5629. How to add a default logo file5:1830. How to override the page template with a page.tpl.php file9:2831. How to add a new region and what regions are4:4632. How to add a CSS file4:5733. How to add a JavaScript file
1h3. How to Build and Modify a Drupal Theme or Sub-Theme, Part 2
5:4534. How to add a new setting to the theme settings form4:4635. How to set a default for a theme setting and use it in a template file9:2536. How the template.php file works and a review of the Bartik theme template.php file5:5737. Learning from the Garland and Seven template.php files4:5238. How to add a template.php file and use a page preprocessing function4:1239. The advantages and disadvantages of using a sub-theme
5:5440. How to create a sub-theme5:1541. How sub-themes inherit or override base theme components6:3442. How to override CSS, JavaScript and screenshot files of a base theme using a sub-theme3:1143. The advantages of copying an existing theme10:5444. How to create a new theme by copying an existing theme6:1345. Overview of theme CSS file structures
54m4. Theme CSS File Structure and Extended Drupal Theme Building
10:3346. A close look at the Bartik stylesheet structure2:5847. A quick look at the Garland and Seven theme stylesheet structures5:5048. How the Zen theme uses extensive CSS files for learning6:4249. Review of the Basic and Fusion CSS file structures
5:1950. How to enable element toggling with theme 10:1351. How to add CSS or JavaScript files to a theme conditionally based on node type9:2752. How to add CSS or JavaScript files to a theme conditionally based on path or user role3:4353. Review and next steps for the "Theme CSS File Structure and Extended Drupal Theme Building" chapter
1h5. Template Files, Theme Function Overrides and Preprocessing Functions
4:2054. Before you start, is there a simpler way?13:2655. Why use template files, how file suggestions work, and setting up for later examples8:5456. How to use the page template file (page.tpl.php) and override it by path9:0657. How to use the node template file (node.tpl.php) and override it by content type or node ID10:5958. How to use the block template file (block.tpl.php) and override it by module, region or delta8:2359. How to use the comment (comment.tpl.php) and comment wrapper (comment-wrapper.tpl.php) template files4:2560. How to name preprocessing functions to use with theme functions and template files5:5261. How to use simple preprocessing functions
3:5262. How to apply preprocessing code only in certain situations4:0163. How template file suggestions work in depth and adding new suggestions10:2964. How to override template files for specific conditions using template file suggestions2:0265. How to override a theme function7:1866. Theme function override examples8:1067. How to conditionally add CSS classes to the body, page and node wrapper tags for easier styling4:3468. A practical example of adding a conditional body class3:2869. Review and next steps for the "Template Files, Theme Function Overrides and Preprocessing Functions" chapter
1h6. How to Work With Drupal Theme Settings
6:3570. What this chapter covers and basic global toggle options available in the theme setting4:5671. Overview of additional element toggle options such as main and secondary menus7:1372. How to tell when global or theme-specific settings are used, and how to uninstall a theme5:5473. How to add a custom theme setting and set a default for it2:4374. How to use the custom theme setting in code using theme_get_setting()3:2175. Overview of how the color module works to add custom color selections to a theme
2:1076. What steps are required to integrate the color module with your theme6:3177. Overview of color module integration files part 1, including the color.inc file7:3778. Overview of color module integration files part 2, including the preview.js file10:4579. How to add a new color selector to your theme with the color module2:1980. Review of the "How to Work With Drupal Theme Settings" chapter
8h 55mDrupal 6 Development and Tools
3h1. Essential Concepts
3:301. How to install and uninstall a module14:032. How to build your first Drupal module13:473. Introduction to hooks8:214. How to add permissions27:135. Introduction to the Form API12:446. How to make your module customizable21:337. How to add and configure blocks
10:138. How to add JavaScript and CSS15:079. How to theme a Drupal module16:1810. How to create an install script19:0011. How to create, format and validate a form21:2412. How to improve form validation and process a form18:4713. How to create edit and delete forms and alter other forms10:2914. How to apply for a Drupal CVS account
27m2. Working with jQuery and Javascript
1h3. Securing a Module
19:2917. A review of module security and the t() function16:5018. How to use string filtering functions, l() and url()
17:2219. How to use drupal_get_token() and user_access()13:2220. How to work with the database securely
58m4. Testing and Debugging a Module
1h5. PHP and MySQL Basics
23:0126. Introduction to MySQL, tools and SELECT queries24:4027. How to use JOINs, insert variables and INSERT, UPDATE and DELETE
1h6. Using Komodo Edit as an IDE
5:2328. How to create a project in Komodo Edit8:5929. How to work with projects in Komodo Edit11:0330. How to work with files in Komodo Edit12:2831. Understanding the Komodo Edit interface
10:1932. How to create snippets with variables and options11:2633. Advanced snippet usage: Key binding, tabstops and abbreviations13:4734. How to use templates in Komodo Edit
2h 17mWorking with Files and the File API
39m1. How to Work With Files and the File API
2:431. What this video covers and a demo of our node-free image gallery module2:242. What the difference is between a URI and a URL3:223. What stream wrappers are and how they work1:364. How the private file system works5:155. How file and folder permissions work, and best practices
2:416. How to set up PHP to properly handle file uploading5:457. How to create a simple form with an unmanaged file input5:028. How to use a form validation function to validate a file3:369. How to use hook_file_validate() to validate an uploaded file6:4310. How to use core file validation functions and define your own validator
1h2. How to Work With Files and the File API, Part 2
7:5611. How to process an unmanaged file and recursively create a directory7:3212. How to use file_unmanaged_copy() to move a file to a permanent location7:3713. How to loop through a file directory and create a URL from a URI6:4914. How to delete an unmanaged file4:5215. How to recursively delete all unmanaged files in a directory10:0716. How to use the private file system with unmanaged files7:3017. How private files are delivered and how to troubleshoot private file issues
10:3418. How to add a managed file input to a form5:5719. How to validate a managed file, prevent it from being deleted and add a usage marker5:5820. How to use the EntityFieldQuery class to match certain criteria and display the results6:4221. How to delete managed files6:0822. How to work with private managed files4:1923. How to configure and use X-Sendfile to improve private file performance6:0524. A quick look at the code behind stream wrappers
22m 53sAppendix
22m1. Mentored Training Resources
Double-tap to return to library
1236,1237,1242,1244
1236,1237,1242,1244