In this chapter we learn other ways to interact with our database beyond the simple db_select() query from the earlier video. This example walks through writing a module that that saves and displays data about how many times a user has visited a specific page. We learn about db_select(), db_insert(), db_update(), db_merge(), db_delete() and introduce the concept of "get and set" helper functions.
In this chapter we learn how to create a new database table. This example walks through creating a module that defines the the properties of our new table and also programatically creating that table. We learn about hook_schema() and hook_update_N() in our module's install file.
Trainers note: This video starts out with a module that implements hook_node_view() and stores data about views in the $_SESSION variable. It also states that we built this earlier in the series. However, that's not true. We did talk about hook_node_view() in https://drupalize.me/videos/event-driven-hook-system, but we never actually wrote the $_SESSION handling part. So, if you're following along and want the same sample code we start with make sure you download the code attached to this node.
In this excerpt from the Overview of Drupal 7, Angie Byron, talks about the Database API in Drupal 7. This was a round table discussion with other Lullabots on the line who ask and answer questions, in addition to Angie's presentation. This lays a good foundation for how the database system works in Drupal and sets you up for the hands-on tutorials that follow.
Additional resources
This video goes through the process of changing some of the properties of a form with the hook_form_alter() function. This hook is a very powerful tool to be able to modify existing Drupal forms, created by core or contributed modules, and tailor them to your needs.
This screencast shows how to use fields when scheduling Rules components. In the example we are also using the Flag module, to allow people to sign up for reminder e-mails 24 hours before an event starts. The screencast covers:
- Using flags to load user lists in Rules
- Scheduling a rules component from a triggered rule
- Some words about rescheduling the evaluation if the event date should change
- Using conditions to make fields available in Rules configuration
- Using a date field to set evaluation time
- Adding an offset to the evaluation (-1 day)
- Verifying the configuration by executing the action set manually
Note: It would have been smarter to use the “Before saving content” event for this rule – to make it act on both new nodes and updates of existing ones. If combined with a check to see that the event is in the future, you would actually have pretty good notification system!
Additional resources
Rules guide (Drupal.org)
This video walks through the new interface in Drupal 7 for enabling themes, setting them to be the default, and configuring the administration theme. It also walks through the process of downloading a contributed theme, and where to store it. Finally, it walks through the theme settings pages that provide a user interface for turning on and off specific options for a theme.
Additional resources
This video shows how a module can integrate with Drupal's theme system by exposing a new themeable item to the theme registry with hook_theme(), and then creates a function in order the customize the output of that themeable item. The then video demonstrates how the theme layer can override the markup defined with theme functions at the module layer.
This presentation provides an overview of the different phases of the form submission and validation process that Drupal uses with the Forms API. This will give you a good foundation for implementing forms yourself in the following videos.
Flag is a module used for marking nodes, comments or users with an on/off marker, for example for flagging spam comments, selecting content to promote to a sidebar, or marking other users as friends. What makes Flag useful is primarily its integration with the Views and Rules modules, and this series will make sure to cover those important pieces, too.
Field Templates
FreeIn this lesson we cover how you can do some powerful things with Display Suite in regards to field templates. Using the Display Suite GUI there are lots of configurations and offerings to get the markup just the way you want.
Additional resources
Lists and Loops
FreeThis tutorial shows how to manage lists in Rules – data types corresponding to arrays of other data types. It covers:
- How to loop through multiple-value data in Rules, to act on each individual data entry
- That lists are their own data types in Rules
- That each primary data type automatically gets a list type as well
- How to add data to lists
- How to only add data if it is not already present
- How to select whether to add new data to the start or end of the list
- How to load new entities into Rules (by id)
- A few words about other ways of fetching entities, such as by property or with Views (through VBO or Rules Bonus Pack)
- That Rules configuration are actually entities
- How to disable reaction rules
Additional resources
Rules guide (Drupal.org)
Flag and Rules
FreeThis screencast covers the following topics:
- Where to find and how to apply the patch currently necessary to use Rules with Flag
- How to have a rule react on flagging/unflagging a piece of content
- As an example: How to change access to a node based on flagging status
If you need a refresher on Rules, check out the Learning the Rules framework series.
In this lesson we cover downloading and installing the WYSIWYG module. We show the relationship between the WYSIWYG editor and Drupal Text Formats. We go over the basic settings of the WYSIWYG module, how to download and install an editor, and configurations necessary in Text Formats to make things work properly.
Use this handbook page on Drupal.org to determine which version of TinyMCE is supported with CKEditor: Editors.
Additional resources
Basics of Rules Link
FreeThis screencast shows the Rules Link module, and some basics in how to use it. It covers:
- That Rules Link adds links to entities (and that you set up each link separately).
- That these links triggers rule sets.
- That the links may be displayed as links on (for example) comments and nodes.
- That Rules Link is useful when you previously used Flag, but didn't really need the 1/0 data that Flag provides (but rather just the Rules trigger effect).
- That access to each configured link can be controlled using the standard permission system.
All of this is demonstrated by adding a "block spammer" link to comments, allowing administrators to block the comment author and delete all comments written by him/her.
Additional resources
Rules guide (Drupal.org)
This screencast shows how to go about debugging Rules configuration. It covers:
- Enabling the debug information in Rules, showing rules evaluation.
- How to drill down into Rules’ debug messages.
- That most (or all) times, it is your configuration and not the Rules engine that has the bug.
- That the most common bug is condition that evaluates in an unexpected way.
- How to see how long time rules execution takes – and why/when this may be important.
- How to use the debugging action in Rules, to inspect the data in Rules.
Additional resources
Rules guide (Drupal.org)
This screencast quickly shows the events, conditions and actions that Flag exposes to the Rules module. It covers:
- Event: Flagging and unflagging entities
- Condition: Flag is set on an entity (by a particular user)
- Condition: An entity has at least a number of flaggings
- Action: Load the list of users flagging an entity
- Action: Set or remove a flag (for a particular user)
- Action: Remove all flaggings (for a particular user) – or save a particular number of flaggings
Additional resources
- Flag project (Drupal.org)
- Rules project (Drupal.org)
- Rules guide (Drupal.org)
- Flag module documentation (Drupal.org)
This screencast shows how to work with export and import of Rules configuration, in particular using the Features module. It covers:
- Why you should use the Features and Strongarm modules.
- How to export Rules configuration with Features.
- How to import Feature-exported Rules configuration to a site.
- What reverting rules configuration means, and how to do it from Rules or Features.
- How to (eventually) export Rules configuration manually, and some words about the high readability in the Rules export code.
- How to import manually exported Rules configuration, including some available options/tweaks.
- Why configuration management is an important issue for Drupal.
For more information and tutorials on the Features module, check out the Drupal Deployment with Features & Drush Series.
Additional resources
Rules guide (Drupal.org)
Display Suite is a module that controls the display of your notes, users, comments, and any entity that's available in your system.
In this video, I will cover the installation of the module and some quick overview of all the menu items that will be made available if you install Display Suite, through the three modules that are its components: Display Suite, Extras, and Search Display.
Additional resources
I'm always asked about Drupal: "Where is the editor?" Well, this series is going to answer that and teach you everything you need to know about WYSIWYG.
I’ll cover the WYSIWYG module and other modules that allow us to bring media, especially images, into our content. I'll cover best practices for using a WYSIWYG module, how you can use other modules, and various methods of getting images into your text areas with WYSIWYG or with just an image field, and I'll explain the differences among various methods.
Additional resources
I am going to show you how you can upload an image of any size and it will automatically display as the size/style that you designate by editing the display field settings for your content type. We are going to add an image field to the basic page content type and set the node display to use medium size of 220 wide by 220 tall. Being able to set a standard for image display creates consistency and a better user experience. Site builders and content administrators will also have less work because you don’t need to cut all of your images before you upload them. Drupal does all the work for you!