Before we set up a multisite we need to understand how Apache and Drupal work together to deliver the site we intend. In this lesson we'll look at the documentation for Drupal multisites, and then discuss the way you need to set up your Drupal directories. We'll also review the workflow that Apache and Drupal go through to get the correct site displaying in the browser.
Additional resources
Multi-site - Sharing the same code base (drupal.org)
Building one Drupal site is a fair amount of work in and of itself. But what about working with multiple Drupal sites? Sometimes you have a few sites that make sense together, either from a maintenance perspective, or due to an overlap in content or users. There are a number of different ways to approach this in Drupal, and which path you follow varies considerably depending on the exact use case you need to fulfill. In this lesson we'll get a good look at the problem multiple sites can pose, and list out some common use cases. Then we'll take a look at three different broad categories of solutions, with some specific architectural approaches. The rest of this series will walk through managing multiple sites using Drupal core's built-in multisite system.
If you are interested in working with the Domain Access project instead of core multisite, you should look at the Introduction to Domain Access series.
When working with domain names and getting a website to show up in your browser, it can be a little confusing to sort out which bits of the puzzle are where. You need to be able to properly configure the domain name server (DNS) so your browser can match up a domain name with a web server, and then make sure the Apache web server knows which files to direct that incoming domain name to. In this lesson we're going to walk through the process from the browser request to the website files. We'll take a look at the Apache documentation on virtual hosts (or vhosts) and discuss where to find this configuration. Then we'll take a look at some example vhost files to see what's going on in there.
Additional resources
Welcome Blake and Will
Blog postWe're excited to introduce two new team members! Meet Blake Hall and Will Hetherington.
Podcast No. 58: Drupal Console
Blog postThis week on the podcast, Amber Matz chatted with Jesus Manuel Olivas about the Drupal Console project. What is Drupal Console? The Drupal Console is, at this time, a suite of tools that you run on a command line interface (CLI) to generate boilerplate code and interact with a Drupal 8 installation.
Responding to Events in Drupal
Blog postEvents in Drupal allow various system components to interact and communicate with one another while remaining independent, or decoupled. The event system is built on the Symfony event dispatcher component, and is an implementation of the Mediator design pattern. This post takes an in-depth look at how module developers can subscribe to events in Drupal.
More Drupal 8 Insights
Blog postLast month, we posted a survey regarding your plans for learning Drupal 8. This was a follow-up to a similar survey we posted back in May, 2014. The responses we received in both instances were remarkably consistent, which is reassuring as we begin to publish our Drupal 8 tutorials. Here are a few big take-aways from our Drupal 8 surveys and some insight into our plans for Drupal 8 tutorials.
Last year was big for Drupalize.Me. We made a lot of changes to our website, and we increased the number of video tutorials we publish each week. In December 2014, our team met in Atlanta to celebrate these successes and outline a few high-level goals for 2015. The big goal to share is that we want to communicate with you more! We want to hear your suggestions for improvements, and we want to know you as individuals. We look forward to meeting and chatting with you at events like DrupalCon, but we also want to open new channels of communication. We have lots of ideas for this, and we're excited to get started.
This tutorial covers writing a "Hello World" test for Drupal 7 using the SimpleTest framework that comes with Drupal core, and is based on the free video Learning Test Case Basics by Writing A Hello World Test.
February Tech Update
Blog postIt's February, so it's time for another tech update. And it's a big one! Here's what we've been working on...
In this podcast Kyle Hofmeyer gets together with fellow Lullabots Joe Fender and Carwin Young to chat about their book, why they wrote it, and what it covers. From book writing, to favorite frameworks, take a listen to learn more about the book, Front-End Fundamentals.
Panels, Blocks, Layouts, and Drupal 8
Blog postOver the years of Drupal 8 development we've heard a lot of talk about "Panels in core" or "Blocks everywhere" or "Layout all the things!" and even SCOTCH(?). What does it all mean? Is Panels actually in core? Well, no, but there are some cool improvements in Drupal 8. I decided to follow the breadcrumb trail to figure out what this initiative was really about and how it ended up, now that Drupal 8 is in beta. Join me for a little bit of a trip back through the life of the Blocks and Layouts Everywhere (SCOTCH) Initiative.
Guide to Drupal 8 at DrupalCon Bogotá
Blog postAre you lucky enough to attend DrupalCon Latin America in Bogotá, Colombia? Excited to learn more about Drupal 8 in particular? If so, put these Drupal 8-related sessions on your radar. If you'll be watching from home, keep an eye on the Drupal Association's YouTube channel for session recordings. Here's the Drupalize.Me guide to Drupal 8 at DrupalCon Latin America 2015.
This week we have a veritable cornucopia of video demonstrations and tutorials for your learning pleasure. In this week's release, Joe Shindelar takes you through Drupal's PHP coding standards as well as covering essential tools to help you adhere to these standards. Also this week, we have for you several videos to complement Lullabot's Module Monday coverage of Honeypot, Node Revision Delete, and TableField modules, presented by Addison Berry.
Drupal's custom fields allow site builders to tweak out their content types with all kinds of data: phone numbers, file uploads, maps, and more. When it comes to tabular information, though, most of us fall back on simple HTML tables in the body field. The TableField module aims to fix that by storing and editing data tables with a single consolidated Drupal field type. In this tutorial we'll give you an overview of how to use the TableField module. This tutorial is based on a Lullabot Module Monday article.
Additional resources
Drupal's revisioning system is really powerful. Out of the box we can keep track of changes in our content and restore to a previous version with just a couple clicks. However, on large sites with a lot of activity in their content, revisions can grow exponentially up to a size that it can compromise performance and disk storage. The Node Revision Delete module can help us to keep this under control. In this tutorial we'll walk through an overview of this helpful module. This tutorial is based on a Lullabot Module Monday article.
Additional resources
Lullabot.com Node Revision Delete article
Node Revision Delete module
Honeypot module helps you stop spammers in a different way than the typical spam modules that put up barriers, like captchas. Spambots will typically hit a form like the user registration page, fill in all the fields, and submit the form. Honeypot adds a hidden field to the form that users won't see, but spambots will. If that form is filled in, you know you've found a bot and the submission is discarded. This tutorial will give you an overview of the Honeypot module, including the configuration and seeing how it works. This tutorial is based on a Lullabot.com Module Monday post.
Additional resources
Podcast Episode 56: Drush and Composer
Blog postThis week's podcast, episode 56, has Greg Anderson and Juampy Novillo Requena join Addison Berry to discuss Drush and the PHP dependency manager, Composer. We talk about what Drush and Composer are, why and how Drush is using Composer now, as well as a look down the road at further integration.
This week we're going to wrap things up in our testing Drupal 7 with SimpleTest series. And it's a doozy. We'll cover, submitting AJAX forms, uploading files, writing unit tests, and the SimpleTest 7.x-2.x contributed module.
So far all the tests that we've written are testing the functionality of our module in the context of a fresh Drupal install. However, in the real world we're also going to want to have tests that test the content of our application. As well as other things that it's unrealistic to assume we'll also have the time and resources to write a complete installation routine to replicate. Instead, it would be nice if we could test against a clone of our site rather than a from scratch installation of Drupal.
The SimpleTest module included with Drupal 7 core doesn't support this feature. However, the 7.x-2.x version of the module in contrib has a DrupalCloneTestCase
class that we can extend instead of the usual DrupalWebTestCase that operates on a clone of the database from our existing site. Allowing us to test things like, "Does the about page exist.", and other mission critical features of our site. In this lesson we'll take a look at installing the SimpleTest module from contrib, and writing some new tests using the 2.x version of the API in order to test an existing website.
Note that after you install the 2.x version of the SimpleTest module none of the tests we've written so far, or any of the tests from core will be in the list of available tests to run. This is because each tests needs to explicitly declare that it is compatible with the 2.x version of the test suite. This is done in the .info file of the module that provides the tests.
Add this to your .info file:
testing_api = 2.x
As of the time that this video was recorded you also need to apply the patch in this SimpleTest issue. The current version of the patch to use is https://www.drupal.org/files/issues/983266-10-simletest-clone.patch. Without it the DrupalCloneTestCase setup method won't properly clone the tables from your existing site. You should always use whatever the latest working patch is from that issue.
Here's how I patched it:
curl -O https://www.drupal.org/files/issues/983266-10-simletest-clone.patch
patch -p1 < 983266-10-simletest-clone.patch
Additional resources
Patched with patch from issue #983266