Skip to Content


Mobile Menu

New Drupal Modules - 17 December 2014 - 3:14pm

This is a mobile menu module. It differes from other mobile or responsive menus by being completely self contained. It requires no 3rd party javascript libraries to run.

Categories: Drupal

Drupal Watchdog: The Drupal 6 to 8 Upgrade Challenge - Part 1

Planet Drupal - 17 December 2014 - 1:52pm

Nathaniel Catchpole , the Drupal 8 release maintainer and Tag1 Senior Performance Engineer, suggested that Drupal shops everywhere could support the release of Drupal 8 by upgrading their own sites and addressing the issues they find along the way. This series chronicles the journey from Drupal 6 to Drupal 8.

Part 1: Readiness Assessment

Before performing a major version upgrade, I usually go through a series of steps that help me determine:

  1. What compelling business needs or new functionality are prompting the move? In this case, the site builder view on the status of D8 will help us identify and hopefully address real barriers to adoption, as well as to prepare materials that help document the journey.
  2. What does the site do? If there are functional tests or test plans, I review those. Then, I manually review the site, paying attention to functionality for particular roles. I also check with at least one or two of the stakeholders with each role to learn what features they regularly use, what improvements would better support them, and what they’d really like to see. I don’t normally act on that wish list answer as part of the upgrade proper, but knowing what new functionality they desire can help make decisions about the new modules to use.
  3. Are there features that are no longer in use? I’m always surprised, though by now I really shouldn’t be, by the number of things that seemed like a good idea at the time to someone which were never used at all or which are no longer in use.
  4. Is now the right time? Are the contributed modules on which the site depends ready or is there a new way to achieve the required functionality.
1- Compelling Functionality

As noted above, this particular journey is compelled by the desire to identify and fix bugs during the Beta period of Drupal 8. That doesn’t mean we’re not excited by:

  • WYSIWYG in Core- I am ecstatic at the prospect of NOT having to choose and configure basic WYSIWYG functionality.
  • Views in Core - I pay a lot of attention to the experience of content contributors. They’re the everyday users that Dries talked about back at DrupalCon San Francisco, people who use the interface of Drupal as their day job. What a site builder does for them (or fails to do) can make or break the success of the site as well as cement the organizational satisfaction with Drupal itself.

I want Tag1’s busy staff to find it a pleasure to keep their blogs, community contributions, and case studies up-to-date.

2 - Current Functionality

Our speciality is performance and scalability for complex websites, which never necessitated building a complex external site for ourselves. We have internal sites that put Drupal 6 though its paces, but the main Tag1 site is a combination of blogs and brochure:

  • Review what the current site does
    I start any readiness evaluation looking at the site from the user perspective, clicking around, then reviewing any documentation. The site revealed no surprises. I jotted notes about those user-facing features, mapped to Drupal functionality, and stored them as a sheet in the Readiness spreadsheet. For a basic site, the notes aren’t too impressive, but the process was a valuable refresher on what the site does.
  • Inventory the enabled modules
    After looking at the site from the user interface, I make an inventory of enabled modules. The following Drush commands make nice spreadsheets: drush pm-list --no-core drush pm-list --core

    You can take a look on Sheets 2 and 3 of the Readiness spreadsheet to see the entirety of what was and and wasn’t available.

    In our case there are just two areas of concern:

    Blogs have been removed from core, but with views moved in, this won’t be daunting to rebuild. They may work a little differently, but odds are that will be for the better!

    The only missing module that had no alternative and looked like it might hurt was Pathauto. It’s nice to keep URLs tidy and hard to remember to set them, but wouldn’t be strictly necessary for our purposes and there were were no other glaring show stoppers.

    Note: It looks like upgrade work is happening on Github so I updated the spreadsheet to make note and will evaluate the status as part of the process.

  • Look for customizations
    In addition to custom and contributed modules, it’s good to check for inappropriate customizations done directly to core or contrib. Whatever reason they had for being done back then may need to be accounted for, hopefully in a best-practices way, on the new site.

    Although it seemed unlikely that any relevant changes had been done, for good measure, I always run Hacked. It’ll let you know about files that have been changed from the source.

    There were some theme customizations and a .gitignore file was missing, so as suspected, nothing to worry about.

3 - Features no longer in use

I’ve learned over the years that not every module that is enabled is in use! I try to find a link that illustrates somewhere on the site that the module is visibly in play. Even when there is a place in production where the module is used, it’s entirely possible that the production feature itself doesn’t make sense to upgrade. A serious investigation of analytics and logs can be insightful. Data can guide conversations with product owners about what’s still valuable and support decision-making.

On our straightforward site, there’s not much to not use. As I learned running the first migration, though, even features that were briefly explored but never used can come into play. More on this later.

4 - The right time

Once you’ve completed your archaeology, you’ll need to find the right time for your organization. Talk with stakeholders about the change and be on the lookout for in-process or upcoming feature requests that you might not be prepared to accommodate.

In our case, because the motivation for this upgrade is process, not product, we’ll proceed and go as far as we reasonably can with the upgrade. At the time of this writing, I’ve done a D8 install and begun running a migration. (That’s how I know to be on the lookout for certain disabled modules!) I’m feeling confident that we can get a long way.

Unless the migration process is flawless and the Drupal 8 to Drupal 8 update path is in place I'd be unlikely to recommend deployment of the work, especially with an impending re-design. While re-entering some data manually has always been a part of previous major version upgrades, I’d be loathe to commit to beta adoption if I thought we’d find ourselves stranded in the latest version. Fortunately, all the preparatory work can be done without the upgrade path in place!

Coming next in this blog series, Part 2: Preparing to Migrate.

What modules and processes do you use to prepare for a major version upgrade?

Categories: Drupal

Acquia: Drupal & PHP: Linking Islands, the podcast – part 1

Planet Drupal - 17 December 2014 - 1:14pm
Language Undefined Drupal & PHP: Linking Islands, the podcast – part 1

Categories: Drupal

Phase2: Play with Display: Altering Drupal Field Collections

Planet Drupal - 17 December 2014 - 12:43pm

How do you insert a text field into a rendered entity, all within a field collection? This question came to mind on a recent Drupal 7 build. What at first sounded complicated turned into a concise and elegant solution.

The basis of the requirement broke down into the need for events to list those participating in the event. The build already had existing Event and Profile content types, so the new functionality would only require implementing the list of Profiles participating in an event. Each participant would include their role at the event, along with links to contact them.

To implement this, an Event Participant field collection was added as a field to the Event content type. Each instance of the field collection included a single Profile content type and a single text field for their role at the Event. The Profile would then be displayed as a rendered entity within the field collection so that the Profile’s image and contact links could be displayed. The point at issue then arose. How would the Participant’s role at the event be placed within the rendered Profile teaser, along with the other Profile fields? To the user it needed to look like a single unified entity, with the Profile’s image, role at the Event, Profile name, and contact links all included.

After some initial brainstorming a handful of different approaches came to mind. The initial impression was to use template_preprocess_field() since it allows the alteration of values in the theme layer. The participant role field would be removed from it’s initial location and inserted into the participant profile object. This did not work though. Despite the repositioning of elements within the render array, the changes occur too late in the rendering execution. The render array had already been rendered and thus the display remained the same.

After quickly realizing a theme function wasn’t the answer, hook_node_view() came to mind. The hook allows for the alteration of a node before it is rendered and so all that would be needed would be to shift the location of the Participant Role field within the $node array. The issue with this implementation and the reason it wasn’t chosen, is that it would require reaching out to the global state to determine what changes are needed. In other words hook_node_view() doesn’t realize what context it is called under and would thus require a hack of sorts to determine when it was being called under an Event node. This could be worked around by checking the URL path, but this is not best practice as it is brittle and prone to breaking with future site updates.

As they say the third time’s the charm. The final solution was to use hook_field_collection_item_view(). This hook allows for the alteration of a field collection item before rendering. Unlike many of the other options, this hook is called for each field collection item, allowing one to both check the field collection name and adjust it’s internal field ordering, before any rendering occurs. Using this hook, each Event Participant field collection item is altered, removing the Role field and inserting it into the Profile rendered entity. Simple as that. Now each Event Participant is correctly displayed as a single unified entity, with an image, name, and a set of contact links.

function hook_event_field_collection_item_view($field_collection_item, $view_mode, $langcode) { if ($field_collection_item->field_name == "field_event_participants") { $role = $field_collection_item->content['field_event_participants_role']; $profile_id = $field_collection_item->field_event_participants_profile[LANGUAGE_NONE][0]['target_id']; // Remove Participant Role from previous location in field collection output unset($field_collection_item->content['field_event_participants_role']); // Insert Participant Role into the Participant Profile output $field_collection_item->content['field_event_participants_profile'][0]['node'][$profile_id]['field_event_participants_role'] = $role; } }

Through several quick, small, iterations an elegant, straight-forward solution was found to what at first sounded like a complicated feature request. Now users viewing an Event can see a list of Participants, with each Participant displayed as a single item. Check out more on field collections on the Phase2 blog!

Categories: Drupal

Drupal Association News: Meeting Personas: The Skilled Drupal User

Planet Drupal - 17 December 2014 - 12:00pm

This post is part of an ongoing series detailing the new personas that have been drawn up as part of our user research.

Chris Ohmstede is based out of Los Angeles, California. An experienced programmer, Chris is new to Drupal but already identifies as a skilled persona. Several months ago, Chris discovered Drupal as he was looking for solutions to build a website for hosting a program he wrote.

"I spent a number of years in the banking industry, and in that industry banks are constantly making connections to everything. I was always running in to problems when things couldn’t connect— it was always an issue trying to figure out what was actually going on. Over the years, I wrote a bunch of applets here and there to figure out what the problems were, and my program whycanticonnect is a conglomeration of those applets that work across operating systems, mobile— I’ve got cloud services approaching me about it, too.

Wanted: Custom Functionality

“Originally, I was hosting my project for download using a different CMS option, but things weren't working properly. Finally, I hit a point where I said “I’ve got to make a change.” I initially went to Drupal because I use Linux as my OS, and Drupal is one of the only CMSs available out of the repositories. I saw that, went and did some research, and Drupal looked big and well organized. One of the cool things that caught my attention is that I could Google around and see that everything I needed was already built. I never had to ask for any help — I was able to roll on through and put my site together easily."

“Also, one of the reasons why I selected Drupal was that I've released my product in 12 different languages, and Drupal looks like it has some decent translation services coming in. I want my site to be usable in all 12 languages I support."

After downloading Drupal, Chris relied on his technical knowledge to carry him through. Though he initially encountered some difficulty getting the modules to do what he wanted, he found after some searching that deriving his theme would fix his problems.

"Once I derived the theme, everything got easier— the way drupal derives themes is perfect. It’s very object oriented, which is fantastic. The nice thing about Drupal was that I could figure out what I wanted to mess with, and I could build variables on the local scope and carry them through the whole page and process, which is surprisingly difficult to do with other systems."

"It gives me everything I need"

“The great thing about Drupal is that you're not limited in how to inject code,” said Chris. "I like my download module because it gives me everything I need. It figures out intelligently what’s the best download to go with, it builds a link and launches the javalaunch, so it’ll work whether java is enabled or not— which was a problem I’d had before. I’m very happy with it, and very happy with Drupal."

For the time being, Chris doesn’t plan to put together more Drupal sites — rather, he’s going to focus on maintaining the one he has.

"I have no desire to become a web designer,” Chris said. “I built my site because I know I'll need to change it often, and with Drupal it doesn’t cost me anything. As far as giving back to the community, I’m mostly focused on working with my product. I need to write an Android, Mac, and iOS version. I’m planning on submitting some of my modules to once I’ve got them in shape, and I’ve made posts for people asking the same questions and encountering the same problem as I have. Maybe someday down the road I’ll have time to do more, though I certainly wouldn’t make any promises about it."

Personal blog tags: user researchpersona interviews
Categories: Drupal

Drupal core announcements: Global Sprint Weekend 17-18 January 2015, Small local sprints good for first time organizers

Planet Drupal - 17 December 2014 - 10:10am

Global #SprintWeekend will be 17-18 January 2015.

Please encourage contributors you know to host a small local sprint near them.

Post an announcement in your local meetup groups please; ask if anyone is interested in hosting a sprint and wants some support organizing it.

List sprints on the wiki:
That wiki also has more information about organizing a sprint.

We will have a couple meetings to support organizers (doodle for organizer support meetings: )
and also have mentors in irc over the sprint days (doodle for mentoring during the sprint: ).

Categories: Drupal

Web Services Load Entity References

New Drupal Modules - 17 December 2014 - 8:35am

RESTful Web Services doesn't recursively populate entity references with entity objects. Rather, entity references are entity id+type stubs. This hooks into the construction of the services' response data to populate entityreference fields with their respective fully-loaded entity.

Categories: Drupal

Taxonomy Edge Field

New Drupal Modules - 17 December 2014 - 7:26am

Adds Views Taxonomy Edge filters and arguments for Taxonomy Term Reference fields

Categories: Drupal

Views Plugin Argument Default Referer

New Drupal Modules - 17 December 2014 - 6:33am

Adds a views plugin argument default that retrieves a Node ID from HTTP_REFERER.

This plugin was created as a reaction to the following issue on the Media module

Categories: Drupal

IBAN Field

New Drupal Modules - 17 December 2014 - 5:34am

This module provides an IBAN field via the Drupal Field API. The module comes shipped with a second module which provides Webform support.

IBAN numbers are validated by country, length and the mod97 validation of IBAN numbers.


  • Enable the module like any other module
  • Enable countries you want validated on the module settings page
  • Create a field instance (In either a Content Type or a Webform)


Categories: Drupal

Force JS

New Drupal Modules - 17 December 2014 - 5:04am

Removes the has_js cookie for anonymous users without an open session.

When a browser renders a page generated by Drupal, a piece of JavaScript is executed which adds a cookie (has_js=1). This allows Drupal to generate different markup depending on whether the user agent is capable of executing JavaScript or not.

Categories: Drupal

Zengenuity: DrupalCamp Michigan 2015: January 31 at Henry Ford College

Planet Drupal - 17 December 2014 - 4:49am

Attention Michigan Drupalers! Mark your calendars for DrupalCamp Michigan, Saturday January 31 at Henry Ford College in Dearborn. For only $15, you get a full day of Drupal presentations, discussions and lunch!

Online registration/tickets will be available soon, and we’re currently accepting session proposals. If you’ve got an interesting presentation to share, please post it to the website here: Session selections will be made in early January.

Interested is sponsoring the camp and getting your name out to the local Drupal community? Sponsorship information is available here:

Categories: Drupal

Code Karate: Drupal 7 PRLP: An easier way to resetting Drupal passwords

Planet Drupal - 17 December 2014 - 4:40am
Episode Number: 187

The Password Reset Landing Page or PRLP module is honestly one of the simplest modules you have come across. The sole purpose of the module is to provide the ability for users who request a new password to be able to reset their password on the password reset landing page instead of having to do so on the user edit page.

Tags: DrupalDrupal 7Drupal PlanetEmailSite Administration
Categories: Drupal

Code Drop: Upgrade Path: Drupal 6 to Drupal 8 using the Migrate API - Video Demo

Planet Drupal - 17 December 2014 - 12:57am

It's the final week of work before Christmas and Code Drop have sponsored me to work on core for the whole week :). I've been working towards a successful end to end migration from Drupal 6 to Drupal 8 and after debugging 5 core bugs, I finally have a working solution. Checkout the video!

The video shows an out the box Drupal 6 website with a bunch of fields, taxonomies and settings created. Most of the stuff comes across to Drupal 8 but there are still a few issues that need work.

Current Core Bugs

These are the core bugs that are required to get this demo working.

Categories: Drupal

Drupal Association News: Meeting Personas: The Drupal Learner

Planet Drupal - 16 December 2014 - 7:58pm

In April of 2014, the Japanese Drupal community gathered in Kyoto for their first ever DrupalCamp. Individuals came from other countries to attend the conference, and that was how Keiko Kanda was first introduced to the project.

“I think it might be a bit unusual to get involved the way I did,” Keiko said. “My cousin who lives in Sydney, Australia, married an Australian man. He came to Japan to attend the DrupalCamp in Kyoto and he asked me to accompany him… though some people were presenting in English, he was concerned that he might need a translator.”

“I knew almost nothing about Drupal, even though he had introduced me to what he was working on at that time. But I thought, I would be glad if I could help him out. So I went to the DrupalCamp in Kyoto and it turned out to be a very interesting experience for me.”

“To be perfectly honest with you, when I decided to tag along with my cousin’s husband, Colin Watson, I didn’t realize how fun it would be. I never thought my involvement would last this long,” Keiko said.

Serving an Immediate Need

At the camp, Keiko quickly found herself enlisted as a translator for some of the sessions, and was surprised by the number of foreign attendees at the conference.

“They were all very nice people, and there was much more international attendance than I expected. There were maybe fifteen or twenty international attendees there, and probably ten or fewer were giving presentations in English. Some were able to give parts of their Drupal explanations in Japanese, but they needed a translator to help introduce themselves. So when I arrived at the venue, the camp organizer asked me to translate the introductions from English to Japanese."

That was how Keiko met Chris Luckhardt, a Drupal Master that we will hear from later in the week.

"Chris was one of the speakers... though he had another translator to translate the technical parts of his presentation, when he spoke about himself and other innocent, casual stuff, he needed someone to translate. So that's how I got involved."

Stayed For the Community

"After the Drupal camp in Kyoto, the organizers — Satoshi Kino and Kyoto Ohtagaki — they asked me to do the translation stuff not only at DrupalCamp but at the meet-ups and meetings. According to them, many Japanese Drupal developers can understand when they read English, but when they have something to express it’s very hard to write or speak whole thing in English.

"Kino-san says it’s hard for Japanese developers to catch up with the latest information on,” Keiko continued, “So he and some other Japanese community members are trying to translate some of the useful English information into Japanese, though it takes time.

"I was — still am — studying to be a translator,” Keiko added, "and I thought it would be a good experience for me to help them. But many of Drupal technical terms... for me, they are gibberish. It’s not a language problem, it’s a problem with Drupal technical terms. So even though at DrupalCamp Kyoto they were talking in Japanese, I often couldn’t understand what they were talking about."

"I refer to occasionally when the community members talk about something very complicated— something about Drupal or what they were doing with Drupal… [translation is] hard for me but it’s fun, and in the process I can learn not only Drupal technical terms, but also what is going on in the Drupal world, learn about the problems the Drupal Japanese community has, and so on."

Ways of Mastering Drupal

When it comes to her current work with Drupal, Keiko is more focused on supporting the CMS than using it.

“When Kino-san organizes Drupal meetings, like monthly meetings, he will post the venue and time and date on Facebook in Japanese, and I will translate that into English and spread the word. When Kino-san or Kyoto-san works with Chris [or other English-speaking Drupal users], I facilitate the meeting on Skype. Though they understand English, it is hard for them to speak in English so I translate from Japanese to English for them."

Keiko has plans to help with translating quite a bit of technical material in the future. She has already agreed to assist Chris Luckhardt with translating a Drupal 8 tutorial video into Japanese, and has volunteered to help translate several books as well. In the meantime, she wishes there was a better way to get ahold of other translators like herself.

“I’m not sure because I’ve never thoroughly searched around, but it would be great if there were resources for people who aren't developers,” Keiko said. “I wish there was a better way to find translators, or event organizers— maybe people who don't create websites but instead help to build the project and the community — not only local communities but worldwide communities too. It would be good if there was a place I could go to find people with experience that might be helpful when organizing DrupalCamps, DrupalCons, and Drupal meetups."

Finding a Common Vocabulary

Keiko has a few other pain points, but they mostly revolve around language.

“As a community member, I think so many challenges I have, are… well, first I’m trying to understand what other community members are talking about as accurately, correctly as I can. That’s the first challenge. And I’m trying to learn more Drupal technical terms so that I can understand people's conversations more easily, but oftentimes… it might appear to be an innocent conversation, but behind the ordinary conversation sometimes there are subtexts… you imagine that someone is talking about an innocent topic but when you try to read between the lines there are implications of bigger problems they have.

“For instance, many people in the Japanese Drupal community are spending incredible amounts of time trying to understand what’s written on, because it’s written in English. It’s my impression — and it might be wrong — that the Japanese Drupal community falls into one of two categories: either they catch up with latest information using frequently, or they are totally left behind, staying within only Japanese-written world, because it is so difficult to read English.

"It’s my impression and opinion too that the Japanese community members are trying to attract more people who maybe did not have anything to do with Drupal, but are good with English. For me, I would be happy to find someone who speaks English and Japanese better than I do... the workload can be overwhelming sometimes, but if I could share the task for someone, that would be very helpful for me. "

Personal blog tags: user researchpersona interviews
Categories: Drupal

Blink Reaction: Creatin Custom Search Pages with Search404 and Apache Solr Search

Planet Drupal - 16 December 2014 - 5:56pm

Imagine somewhere deep in your site that you have a page with the alias:


Now, let’s imagine this page is not a link in your site’s menu. Your visitor remembers that they have seen this page on your site and starts typing in the address line:

Categories: Drupal

Metatag Android

New Drupal Modules - 16 December 2014 - 4:58pm

Provides support for the android app link tag.

Categories: Drupal

Entity Display Field

New Drupal Modules - 16 December 2014 - 4:54pm

Provides a field which returns the rendered view mode for the current entity.

This modules can be used to enable per-entity view mode settings.

How to use:

Categories: Drupal

Drupal Watchdog: The Angry Themer

Planet Drupal - 16 December 2014 - 7:38am

Sometimes CSS feels like it stands for “Complete Sh*t Show.”

Lucky for us, there’s a tool to help get our CSS under control. This tool is Sass; Simply Awesome Style Sheets. Well, actually: Syntactically Awesome Stylesheets.

Sass is a preprocessor for CSS. Just like PHP & Drupal create Drupal’s Very Rich and Enhanced Markup™, Sass does the same for CSS, but properly, by taking your .scss (sass) files and turning them into super .css files, with variables, functions, and other fancy powers.

.sass files -> [magic thingie] -> .css

Install Sass

Installing Sass on your machine is straightforward, if you’re not afraid of the terminal. Simply do a "sudo gem install sass".


You’re ready to get Sassy.

But if the terminal gives you agita, you can install Sass with a GUI, a complete list can be found on or

Here’s a video showing how this process works:

Setup your Drupal theme

In order to make Sass work in your theme, you need:

  • a Ruby config.rb file, for configuration;
  • a Sass folder for all your Sass files;
  • a CSS folder where all your compiled CSS files will be created.
Say Good-bye to Your CSS Files

First, accept that once you convert your CSS files to Sass, you will never again have to look into the CSS folder.

Your days of fiddling directly with CSS are over, and everything is gonna be OK.

Categories: Drupal

Data Warehouse

New Drupal Modules - 16 December 2014 - 7:12am

The Data Warehouse module provides an easy to extend API to store/retrieve current and historical data that could be used for creating trending reports for senior management reporting such as annual and quarterly comparisons, among other use cases.

Data Warehouse in Wikipedia:

Categories: Drupal
Syndicate content

about seo