Blog Posts

Drupal 8 & 9 Theming: How to Render and Format JSON Data With PHP and Twig Using the JSON Field Module

(08 Jun 2021)
There's a neat little Drupal module called JSON Field and recently, I had a chance to play around with it. Out of the box, JSON field is a just a plain field where JSON data can be input and output on a web page.

Drupal 9 DevOps: a Recipe For Setting Up Xdebug 3 With Lando and PHPStorm

(02 Jun 2021)
Recently, I onboarded to a new project that required Lando, a popular local development server. When I am coding, I consider Xdebug to be of immense value for debugging and defining variables.

Drupal 8 Architecture: How to Add Custom HTML Data Attributes to Menus

(23 May 2020)
In this post, I show you how to extend menu link attributes in a custom module

Drupal 8 Theming: How to Render Custom Datetime formats For Events With Twig

(01 Feb 2020)
In this blog post, I will show you how to theme custom datetime formats using Twig in Drupal 8

Drupal 8 Video Tutorial: How to Get Started with Xdebug using PHPStorm with Docksal

(16 Aug 2019)
In this screencast video tutorial, I show you how to get up and running with Xdebug and PHPStorm using Docksal.

Using Docksal for Local Web Development: How I'm integrating Node, Yarn, Jekyll, and Ruby

(01 Oct 2018)
Docksal has become one of the de facto standards for local DevOps in the PHP, Drupal, and WordPress sphere. Docksal sits on top of Virtual Box and Docker to make it easy and fast to get up and running with your local development environment.

Drupal 8 Architecture: Video Tour for Designing Structured Modular Content

(18 Sep 2016)
In this screencast, I'm going to walkthrough how I've been designing structured modular content with Entity Construction Kit and Inline Entity Form in Drupal 8.

Drupal 8: How to Craft Custom Theme Hook Suggestions & Templates

(10 May 2016)
In Drupal 8, there's templates for just about anything and with Drupal 8's new theme hooks, you can really narrow in on crafting a custom template for your specific use case. This makes getting at and altering markup far more accessible than it was in Drupal 6 and 7.

Implementing HTML5 Image Captions with Drupal 7

(09 Jul 2013)
I've been pretty busy these days with a few different projects and a number of them required a user friendly way (editors not needing to know how to code) of implementing captions for images within content areas.

Designing a Responsive Lightbox Photo Grid Gallery for Drupal 7

(04 Jul 2013)
Lately, I've been designing and developing photo galleries for both clients and myself. I thought it would be nice to share some methods and practices that I've learned. This tutorial will focus on creating node photo grid galleries that can either be stand alone or attached to other content types.

Custom Taxonomy Pages with Drupal Views Using Selective Overrides

(15 Jun 2013)
Drupal 7 has an option to turn on a default View for Taxonomy term pages via the contrib module, Views. This is generally pretty good but if you want highly designed pages with additional custom fields than what the default view renders, you could simply update and customize this view but there's a few drawbacks.

Drupal 7 Preprocess Tricks: Tips From a Themer

(08 Jun 2013)
In the course of a day as a Drupal Themer, I need to code a wide variety of functionality into a given site I'm working on. I try to follow Drupal best practices as well and this usually means implementing theme preprocess functions; these become key to a Themer's toolbox.

Leveraging Drupal 7 API Functions for Theming Field Array Element Data

(24 Jan 2013)
In my last article I demonstrated how to extract basic data from field array elements which is ideal for custom node theming. The key to this is using *field_get_items*. I'll expand upon that by adding in additional Drupal API functions to enhance and format these Field array elements.

Drupal 7 Fields: Digging Deep into the Data for Themers

(23 Jan 2013)
In this article, I'll show how to really dig into data associated with a field and for that I'll use a preprocess function in your theme's template.php for the logic and then a variable for presentation in a custom node template.

Drupal 7 Multi-sites and a Git Workflow

(20 Oct 2012)
I've been playing around with Drupal 7 Multi-sites lately on my local development environment and was trying to figure out how to add a multisite to git.

Customizing the User Login Page in Drupal 7

(17 Aug 2012)
I was recently tasked with theming a customized user login page in Drupal 7. I could not find a whole lot of documentation for this so the first place I looked was in the core modules folder hoping to find something like user--login.tpl.php that I would be able to copy and put in my theme folder for an override.

Theming a Views Post Date With Drupal 7 ("Date in Parts")

(02 Jul 2012)
In my last blog post I showed how to theme a node post date. I'll take it one step further this time and show how to do the same thing with a View. This assumes you are using the Views Module, and a use case would be if you want to display a feed of items with titles and teasers such as blog posts or news.

Theming a Node Post Date With Drupal 7

(14 Mar 2012)
In this article I will show you how to theme a post date in Drupal 7. The goal is to take a boring date printed inline and theme it so it stands out as a design element.

Screencast: Creating and Theming a Node Photo Gallery with Drupal 7 and Colorbox

(16 Sep 2011)
I wanted the ability to easily create node galleries and this screencast shows you how to create and theme a node photo gallery using Drupal 7. I will also point out what modules are needed and make reference to those that would have been used in Drupal 6 and are now integrated into core in Drupal 7.

My Favorite Resources for Learning Drupal

(11 Apr 2011)
Recently on Twitter, one of my followers asked me for some resources and links for learning Drupal. I thought that would make an excellent blog post. When I first started learning Drupal, I watched screencasts and read all the relevant books I could get my hands on.

Using Drupal Views Arguments to Show Results Only When a Filter is Used

(18 Feb 2011)
Recently I was configuring a Drupal view for a client's website that consisted of the user inputting a zip code and distance to find a store near them. I was using an exposed proximity search filter with a postal code in combination with the Gmap and Location Modules.

Screencast: Tracking File Downloads in Drupal 6

(10 Nov 2010)
In this video, we explore how to track file downloads in Drupal 6 using the Filefield Download Tracking, CCK and Private Download modules. I'll also show you how to do this using a hybrid public / private file system.

Theming Unique Home Page Elements in Drupal with $is_front & PHP

(20 Oct 2010)
Ask 10 Drupal Themers how they would accomplish a task in Drupal and you just might get 10 different answers. Most likely those 10 different ways of accomplishing the task would all be valid and unique. This concept would apply when theming a home page element in Drupal; there are several different ways of going about this.

Rewriting Drupal Views Output for Custom Theming & CSS

(20 May 2010)
I love it when we discover one of those wonderful Drupal gems that is not well documented and is very powerful in creating some nice Drupal Views theme customization. We were recently tasked with creating an events calendar that has a custom CCK field called "City". There's a drop down menu with a list of cities to assign the event to.

Leveraging Custom Body Classes for Advanced Theming in Drupal 6

(10 May 2010)
I recently developed a Drupal site where each page in the site was based on a custom content type and needed some very specific theming. Although my custom theme was based on, I decided to borrow from the zen theme its custom body class implementation to give more meaningful CSS classes to leverage for theming.

How to Customize and Theme Post & Date info in Drupal 6

(01 Apr 2010)
When I was theming my blog in Drupal, I decided I wanted a better way to customize and display post info such as wording used and the way date was displayed. The first step is to have a look around and see where the code is coming from that renders this info. I viewed the files in my custom theme folder and discovered these few lines of code in node.tpl.php