Skip to Content

Planet Drupal

Syndicate content - aggregated feeds in category Planet Drupal
Updated: 9 hours 35 min ago

Drupal Association News: Why is Module X slow? Or is it really module Y? Debugging performance at scale

5 November 2015 - 3:48pm

Its an exciting time to be working on! Content strategy is being implemented, and thus we've been evaluating and implementing modules, including:

  • Organic Groups
  • Panels
  • Page Manager
  • Panelizer
  • Flag 3.x (already implemented for spam)

There are numerous reasons why we're looking at using these modules, but one of them is because we're able to see them in action on Panelizer was being called out as one of the least performant of these modules. This was due to a slow query that was observed at Drupalcon Barcelona:

SELECT * FROM {panelizer_entity} WHERE entity_type = :entity_type AND entity_id IN (:ids)

For each entity that gets loaded, panelizer needs to grab the associated panelizer_entity ID and load it up for preperation to view. While this isn't a problem for a few nodes, it doesn't scale when you're querying 100s or thousands of them:

2015.09.23.mysql-slow.gz:2015-09-23T09:41:14.147976+00:00 db5 mysql-slow: EXPLAIN SELECT * FROM panelizer_entity WHERE entity_type = 'node' AND entity_id IN ('171', '177', '179', '181', '183', '185', '189', '193', '199', '201', '209', '211', '213', '215', '217', '219', '221', '225', '227', '229', '233', '235', '239', '243', '245', '247', '249', '251', '253', '255', '277', '279', '281', '287', '289', '291', '293', '295', '297', '301', '303', '305', '307', '309', '311', '313', '317', '319', '321', '323', '325', '327', '335', '337', '343', '347', '349', '351', '353', '359', '363', '367', '381', '385', '389', '391', '397', '399', '403', '405', '407', '409', '411', '413', '415', '417', '419', '421', '423', '427', '429', '431', '433', '435', '437', '439', '441', '443', '449', '451', '453', '455', '459', '461', '463', '465', '467', '469', '471', '473', '475', '477', '479', '481', '483', '485', '489', '495', '497', '499', '501', '503', '505', '507', '509', '511', '513', '515', '517', '519', '521', '523', '525', '527', '529', '531', '533', '535', '537', '539', '541', '543', '545', '547', '549', '551', '553', '555', '557', '559', '561', '563', '565', '567', '569', '571', '573', '575', '577', '579', '583', '585', '589', '591', '593', '595', '597', '599', '601', '603', '605', '607', '609', '611', '613', '615', '617', '619', '623', '631', '633', '635', '637', '639', '641', '643', '645', '647', '649', '651', '653', '655', '657', '659', '661', '663', '665', '667', '669', '671', '673', '675', '677', '679', '681', '683', '685', '687', '689', '691', '693', '695', '697', '699', '701', '705', '707', '709', '711', '713', '715', '717', '719', '721', '723', '725', '727', '729', '731', '733', '735', '737', '739', '741', '743', '745', '747', '749', '751', '753', '755', '757', '759', '761', '763', '765', '767', '769', '771', '773', '775', '777', '779', '781', '783', '785', '787', '789', '791', '793', '795', '797', '799', '801', '803', '805', '807', '809', '811', '813', '815', '817', '819', '821', '823', '825', '827', '829', '831', '833', '835', '837', '839',

Additionally, there is this issue: -- this discusses the potential issues around loading the panelizer settings and some solutions, including adding a lazy loader to get the entity but not load up all the settings until say, view time.

It is apparent that we have an issue on our hand. But was it panelizer?

First -- I would suggest watching Ezra Gildesgame's talk on XHprof. It will give you some ideas about how to troubleshoot performance issues.

Secondly, I'd suggest getting a monitoring tool to average your performance over time. This is also possible to do with XHprof, but thats for another post.

At the Association, we use New Relic for server monitoring. While the full version can give you some really detailed results, our version gives us an overview. Here is a snapshot of what was happening when panelizer was being suspected as slow:

When we take a look at the modules that are being executed, it gives us a little more information about what modules are going slow:


If you don't have New Relic, you can still get this data by setting up XHprof and going to the affected page. It should give you similar results. One nice feature of New Relic is that it gives you XHprof (ish) results for past performance problems. Unless you're profiling every page (which is not recommended for production), you won't have a snapshot result of what happened when the site was going slow.

Looking at the New Relic logs and the query, we know three things:

  1. This issue is happening on node_add
  2. This issue is affecting nodes that are related to sessions only. (If you pop in those node ids in the query to
  3. Entityreference module load time correlates to the database slow query time.

So what things could cause multiple session nodes to occur?

  • View of many nodes, like a schedule
  • field or panel on a node/add page that is making a query of entities
  • Session counts (although that would be quite unperformant, loading a node just to get its count.. but I've seen worse things happen)
  • an entity reference field

By looking at the New Relic logs, there isn't any reference to the view module causing a problem. This is also during node_add, which doesn't call any views. While cod_sponsors or products might be an (separate) issue, they their peak loads are not occuring at the same time as the db query. That leaves us with entity reference. This hits as the top module at the same time as the panelizer query is being executed.

What node/add pages are using entity reference for sessions?

Only one. Session Evaluations.

Here we are using entityreference prepopulate, which shows the session thats being evaluated. But, there is a problem with this...

So there is the issue. Why didn't this occur in LA? because there were half as many sessions. Its also why we never saw it in any previous drupalcon, because the sites were singular so performance issues like this wouldn't ever have enough content to show its face.

Conclusion / Take aways

  • While there might be some architecture tweaks that could be done to Panelizer, it was not the key issue. 
  • The issue is the combination of modules, exasperated by the amount of content. Entityreference + Entityreference Prepopulate (Disabled select field) + Panelizer + Two cons worth of content = Problem.
  • Don't assume a module is slow or unperformant from a single query.
  • When an issue is found, don't guess, investigate.
  • XHProf and New Relic are essential for large drupal sites.

A simple tweak to the entity reference field has fixed the problem for now. Before the next con, we'll implement some better methods of showing the title so this doesn't occur again. In fact there is already an issue for it.

Of course, this is just one potential issue - but this method demonstrates that a monitoring tool like New Relic plus performance profiling tools like XHProf can allow you to find unexpected interactions between modules that may result in performance problems at scale. Luckily, our fixes translate into fixes for the whole community. This means not only a better, but a better Drupal product.

Categories: Drupal

Out & About On The Third Rock: An Engagement Manager’s guide to site building in Drupal 8 – week 01

5 November 2015 - 3:05pm
More a log than a guide, but you get the idea! Day 0 Many a weeks before Day 1! started putting a backlog together, the site is for an Open Social Transformation project, its open sourcing the materials designed and developed for Peace Through Prosperity’s social transformation programs that have had epic results so far. The […]
Categories: Drupal

Axelerant Blog: Drupal Staff Augmentation: Finding Partner Value

5 November 2015 - 11:00am

If you’re looking to hire for a Drupal project, Drupal staff augmentation may make the most sense for your organization. Drupal migration projects, site builds, support and maintenance, DevOps consultations—these all fall under this umbrella service. Growing your Drupal staff with an external agency is retractable, scalable, affordable, and smart. And it’s time to choose a partner.

What Should You Consider First?

How About What You’re Most Afraid Of.

Failure. If you’ve been in the business long enough you know, you should be considering the ramifications first. It can’t be overstated: if you don’t bring in the talent to do it right, you need the time (and the budget) to do it over.

Signing off on an insourcing deal without looking beyond the pitch, the branding, or a brief preliminary review is never a good idea. With concerns duly noted, it’s time to focus on value.

Your Organization Wants Value, Right?

So What Does Your Organization Value?

A natural next step after defining concerns should be determining values. Drupal staff augmentation means you’re choosing the best Drupal agency to be your extension, a valued partner.

This partnership has to be on respective terms, conditions, and most of all shared values. Discerning the similarities or irreconcilable differences is what’s important here.

Every organization is different but when it comes to values, there’s sure to be overlap. What does your organization value when it comes to staffing? Here are six suggestions to get you thinking:

1. Thought Leadership. Drupal augmentee agencies should cherish and exude thought leadership as much as your organization. These will likely be different areas of thought leadership—you’re in different industries—but the value is the same.

Look for innovation in unique projects. Thought leadership isn’t always that recognizable. While an agency can be respected for forward thinking, it may not be applauded.

Competitive rhetoric dominates most industries, so it’s best to look through agency contributions, portfolios, case studies, and convention session topics.

2. Serious Discipline. Levels of due diligence and focus aren’t things that can be taught easily, right? It’s something you learn to appreciate in yourself and other people. As far as values go, this one is essential.

What’re some signs of this? Work environments that promote discipline. Remote offices and telecommuting practices speak an awful lot about a staff’s discipline. Without this value—it’s more of a virtue—nothing would get done.

3. Real Savings. You want to make a deal, and you want the better half of it. If your prospective partner values savings, so will they. There’s nothing wrong with healthy negotiation. The alternative is scrambling for your business; a reckless disregard for the worth of their services. Your organization has likely turned down bad business before. A staff augmentation partner would do the same.

Your partner should understand this too. You’ll know if they share this value with you if they refuse blatant low balling. Desperation isn’t a sign of fiscal responsibility.

See if there are any big names, big projects—launching or re-launching one of the top websites in the US should count. You can bet these projects played well for the agency financially.

4. Timely Results. The bottom line is this: you want results that are on time and budget. Without results oriented success, you’ve got nothing—literally. This should be significant to all of your staff members and even more so your augmented ones.

There are things to look for. Check to see if your prospect publicly mentions deadlines, agency self-organization, and DevOps practices. These are signs that the agency values timely, results oriented success.

Next, you’re going to have to go beyond this and look into their project management processes. Agile frameworks. This is what you should be looking for.

5. Reputation. Poor standing within respective communities isn’t a good sign for obvious reasons. And the reputation the prospect has based on staff member reviews should be just as valued.

If there are challenges to the provider’s reputation—or yours—this may be indicative of a lack of care to respond to allegations of mismanagement or a hostile work environment.

What do the employees say? If there has been public, verifiable negligence against current or former team members (look at recent Glassdoor reviews and responses), then pass them by.

Public disgruntlement is a serious red flag when it comes to Drupal staff augmentation specifically. You want your staff augmentation team to be well treated, and you don’t need a tarnished reputation for partnering with a problem agency.

6. Likeability. It’s true that surveys show that likability is a key part of getting hired. There are some who believe this doesn’t matter, and that quantified, qualified results are the only things that do.

When it comes to partnerships involving teams, this should matter a whole lot. You’re going to be collaborating, perhaps on a daily basis.

Ask yourself: do I want to work with these people? Don’t go basing everything on first impressions, but consider the whole picture.

Teams should exude a fun, playful atmosphere. What you want are staff members who take their work seriously without taking themselves too seriously.

Drupal staff augmentation is really like hiring new employees. Consider what you’re hiring process is like and what it’s meant to do. When onboarding staff, hiring managers are looking to discover if their values line up with the company.

While it’s probably not smart to build a team of only the like-minded, creating a team with shared values when it comes to production, your industry, and accomplishments makes sense. So it is with Drupal agencies that offer staff augmentation.
Think we might be a match? Tell us what you value.

The post Drupal Staff Augmentation: Finding Partner Value first appeared on Axelerant.

Categories: Drupal

Acquia Developer Center Blog: Lessons Learned from an Early Drupal 8 Project

5 November 2015 - 8:09am
DC Denison

With the official release of Drupal 8.0.0 on the horizon, "real world" Drupal 8 stories are becoming more valuable.

Now that the train is actually approaching the station, we all want to know what it will be like to get on. 

Mediacurrent, a leading Drupal design firm, got their Drupal 8 ticket punched early. They partnered with Acquia to launch a Drupal 8 site for Manhattan Associates, a supply chain management software provider, back in August, 2015, when Drupal 8 was in beta. The site has been on the Drupal 8 frontier ever since. 

So what has the experience been like? 

A "real world Drupal 8" series from Mediacurrent and Acquia has been telling some backstories. 

Tags: acquia drupal planet
Categories: Drupal

Pronovix: Industrial Drupal 8: the heating experience

5 November 2015 - 12:31am

Drupal 8 is out the door – well, the release candidate at least, so it's time to get intimate with it. As I'm mostly a backend developer with a focus on coding, I'm mostly interested in what's under the hood: how should we write a new module. As we had our heating system upgraded this summer and I opted for a controller that can be instructed via the web, it was an extra motivational factor: it would be nice to have a heating system #madewithdrupal8.

Categories: Drupal Building an app in Drupal's theme layer

4 November 2015 - 8:26pm
Building an app in Drupal's theme layer

Drupal 8 as many people have already pointed out provides a great base for front end developers regardless of your chosen stack. Providing REST as core functionality has created a standardised approach which when left up to contrib can often become enigmatic.

This article aims to explain the benefits of building a JavaScript application via Drupal's theme layer. Mithril JS will be used as the client side framework, however the core concepts could be applied to others as well. 

For those interested in learning more JavaScript instead of another framework I strongly recommend giving Mithril JS a try. Mithril is more inline with React than Angular providing a classic MVC design pattern without the additional weight and learning curve a framework traditionally inroduces.

One of the biggest pitfalls of building an app is the ability to provide a HTML fallback. This is not solely for visitors which have JavaScript disabled (1.3% ish) but instead for search engines and crawlers. Eiriksm has already written a fantastic article which outlines these concerns. Eiriksm points out what a typical setup generally consists of and the benefits of using Drupal to generate your HTML. The flip side is if you don't have something like Drupal's traditional rendering method to fall back on you'll need to implement a service such as

The one downside here being a duplication of theme work. This can of course be mitigated by matching your HTML output from Drupal. Rule of thumb for me is to focus on the app; as long as the fallback provides a clean and readable page. Crawlers won't care about your sweet styles and people with JavaScript disabled probably aren't on Twitter so it won't come back at you.

Before we start writing any JavaScript we need to configure our REST client; there's a number of articles already on downloading and configuring the REST UI, follow those first if it's not setup. Enable the content resource, enable the GET method with your desired format and auth (I use JSON and cookie).

To help handle our requests to Drupal I have written a small wrapper for Mithril's m.request function. The wrapper provides a number of common features we'll need when communicating with Drupal. The wrapper can be found here.

  • Checks and sets the users CSRF token
  • Tracks request completion status
  • Provides a request queue
  • Provides a request cache
  • Sets the request format

The first example illustrates how to load a single node from Drupal. The first object passed contains all the standard information required by m.request; method, url etc.

var response = md.request({ method: 'GET', url: '/node/1', background: true });

The second example illustrates how to override the default format type, set request headers and provide a redraw timeout.

var response = md.request({ method: 'GET', url: '/node/1', background: true }, { headers: [ { type: 'Content-Type', value: 'application/json' } ], format: 'json', redrawTimeout: 1500 });
Categories: Drupal

Drupal Association News: Get Ready to Translate for Drupal 8

4 November 2015 - 7:06pm

Did you hear the news? Drupal 8.0.0's release date will be November 19, 2015.

Translations needed for the Drupal 8 release

We’re excited to see Drupal 8 out in the world, but that also means there is not a lot of time left to get ready to share it with the world! We are working on both the release announcement and the press release in English. We are looking for volunteers to help translate it to your language. The final translations will be posted on at the time of release.

One of the hallmarks of our community is the hard work we put into making sure that everyone around the globe has access to Drupal in their own language. Since we're focused on translation leading up to the D8 release, I wanted to take a moment to highlight the work of our Friends at the French Drupal Association. To celebrate RC1, they translated some key pages in French:

To these amazing volunteers, we say Merci Beaucoup. Thanks for leading the way for a truly global release of Drupal.

Want to help in other ways? Here’s how:

If you can help promote the release on Twitter in your respective time zone, Paul Johnson is looking for you. We also suggest you follow @celebr8d8.

We also need you to throw a party! Organize a local meetup on the week (or even better the exact date) with sweets, sessions, shirts, stickers or whatever fits to spice it up. Make sure to tweet about your party with the #celebr8d8 hashtag and let the community know, so it shows up on our world map on

Categories: Drupal Decoupled Drupal: When, Why, and How - The Video

4 November 2015 - 2:00pm

I believe it's safe to say that Decoupled Drupal is here to stay. Back in DrupalCon Los Angeles my good friend Josh koenig from Pantheon and I teamed up to share our experience with it.

Josh asked me if I could do the presentation with him and I immediately agreed, as Josh is an awesome presenter and I knew it's going to be fun. My answer, if I recall correctly, was:

If the session gets selected it will need to be partially weird. And you might need to grow a mustache for that.

He didn't grow a mustache. But it was fun and full of energy. And it has a lot of very pragmatic tips, such as Headless Drupal is a terrible idea!

Anyway, enough text - here is the video:

Continue reading…

Categories: Drupal

Mediacurrent: Leading the Way on Drupal 8: Lessons Learned from Manhattan Associates D8 Redesign (Blog Series Pt 3)

4 November 2015 - 11:24am

In part one of our blog series centered on Manhattan Associates’s experience as an early D8 adopter, our partners at Acquia showed Drupal 8’s mobile-first approach, improved theming and

Categories: Drupal

Commerce Guys: What B2B Companies can Learn from B2C Best Practices

4 November 2015 - 10:12am
0) { $(window).scroll(function(){ var distanceTop = $('#last').offset().top - $(window).height(); if ($(window).scrollTop() > distanceTop){ slidebox.animate({'left':'0px'},300); } else{ slidebox.stop(true).animate({'left':'-430px'},100); } }); $('#slidebox .close').on('click',function(){ $(this).parent().remove(); }); } }); //--> */

B2B eCommerce is growing. Fast. In fact according to one Internet Retailer article B2B online revenue will hit $1.13 trillion in sales worldwide by 20201. This is outpacing retail eCommerce significantly and is creating significant opportunity for manufacturers and other B2B companies to invest in online sales and marketing technology to better serve their clients’ demands. There are a number of factors in today’s business environment that contribute to this critical need to invest in better, more integrated web technologies. If you are unsure about whether it’s worth it to modernize your online technology, or you’re reluctant to set aside the appropriate budget for such an endeavor, this article provides strong reasons why this may be the best opportunity to grow your business and better serve your customers.

If you are a manufacturer, you are probably keenly aware of the industrialization of traditionally ‘3rd-world’ countries. While the quality of this new competition is often lower, the fact is that these manufacturers create downward pressure on prices in the market. And additional competitors never make it easier to keep and gain market share. Ultimately, margins on products are skinnier than they were a decade or two ago. Two major strategies are being considered to combat encroaching lost profitability and market share: cutting costs and going direct-to-consumer.

What many manufacturers have realized is that their technical infrastructure is outdated and their inability to leverage the latest web technology to modernize their business is costing them big. Legacy systems are typically spread across multiple technologies that are difficult and expensive to integrate and maintain. Often times, multiple databases become hard to manage and require manual data entry often by the company’s most valuable employees! Transitioning can be expensive, but modernized systems often reap the benefits of reduced stress and hassle, better customer service, reduced technical and inventory costs, and more agile marketing capabilities.

Another opportunity that many manufacturers are considering , is increasing their margins by removing the ‘middlemen’, and going direct to the end customer. The reward is higher profit margins and ownership of the end customer relationship. Direct ownership of the customer has benefits that go beyond higher profit margins as it also means better access to word-of-mouth advertising, easier brand management, the higher ROI on marketing dollars that goes with customer loyalty, and the customer behavior and preference data gathered through the process of directly servicing the customer.

The other obvious (and often painful) fact is that the methods of reaching buyers are changing. Buyers are less willing to be subjected to cold call2 sales efforts and less likely to click on banner ads3 4. Traditional online marketing is losing traction across the board. Marketing is seeping from every corner of our lives, whether it’s print, radio, web, apps, calls, and texts. You can’t even visit a news site without being confused about whether your clicking on an article or an ad disguised as an article! What buyers want to do now is research product details and pricing on their own and choose their supplier before they even pick up the phone, relying on that research to inform their interest and buying decisions. This requires that the right content is at their fingertips when they are researching your offerings.

In a recent article from ‘think with Google’5, statistics were presented that showed that a full 46% of buyers now fall into the 18-34 years old age range, and this shift has rapidly occurred over the last two years. These younger buyers will demand a different experience than old buyer portals with their poor user experience. Even the new ones created by ERP systems are typically years behind modern eCommerce technology, and can range from cheap and dirty to expensive yet constrictive. All of these ERP wholesale portals lack flexibility, scalability, etc. The hidden cost to the B2B merchant is frustration, loss of time, loss of growth, and ultimately loss of their loyal clients.

There is no question that significant revenue is transitioning to the online channel from traditional B2B channels. If you include revenue that comes through these traditional channels (sales reps and other direct offline orders), but was initiated by buyers’ online research, it accounts for a (most likely) majority percentage of overall revenue changing hands in the B2B arena. The distributor is sorely hurt if they do not have the right online experience. And these buyers are not likely to reach out before they move to another distributor. Their silent ultimatum is modernize or lose market share.

The hard part about making the transition is that it is a jungle in terms of technologies promising ‘robust’ B2B solutions. The discussion seems to always center around a list of features, which are used to compare one technology to the next. While it may be comforting to have these lists and comparisons, the crux of the matter is actually less about features, more about fundamental differences. Features create the blind spots, where decision makers stop thinking about how the technology choice will impact the end user experience, including the integration of commerce and content, and how it may create unnecessary dependence on a vendor. We often find that the focus on features creates an assumption that all other decision factors are equal, and in doing so, often lose control the ability to adapt quickly to market changes and maintain control over their business processes.

Interested in B2B eCommerce?
We've got a lot to share. Subscribe below and we will email you on several key topics.


1"B2B e-commerce sales will top $1.13 trillion by 2020." 2015. 2 Sep. 2015
2" Facts On The Future Of Social Selling vs. Cold Calling." 2014. 23 Jul. 2015
3"10 Horrifying Display Advertising Stats." - Hubspot." 2013. 23 Jul. 2015
4"Better than Banner Ads: Smart ways to spend your ad ..." - Tint. 2015. 23 Jul. 2015
5"The Changing Face of B2B Marketing" – Think with Google. 2015. 23 Jul. 2015

  Our Experience, Your Business. We’ve got more insight into the unique challenges B2B companies face. Subscribe today to receive additional content over the coming weeks.

Categories: Drupal

Acquia Developer Center Blog: How to Conduct Usability Tests at Conferences: Tips & Tricks

4 November 2015 - 10:09am
Julie Fischer

One of the most difficult parts of executing a successful round of usability testing can be recruiting participants. You may need to show your designs to people who fit a certain professional persona, or hear feedback from people with a particular technical skill set. Once you’re in touch with testers who fit the bill, you’ll have to navigate their busy schedules, and disparate locations, to organize their test sessions.

Tags: acquia drupal planet
Categories: Drupal

Frederic Marand: Drupal tip of the day: how to drop the Simpletest collections when using Drupal with MongoDB

4 November 2015 - 9:06am
The problem

When running tests on a server using the recent versions of the MongoDB module for Drupal, and more specifically the MongoDB simpletests, the simpletest runner may leave droppings in your MongoDB Drupal database, which have no business remaining there. How to remove them while keeping the good collections ?

The typical case will be after a failed test runs, looking like this:

read more

Categories: Drupal

Lullabot: Configuration Management in Drupal 8: The Key Concepts

4 November 2015 - 6:36am

While the new configuration system in Drupal 8 strives to make the process of exporting and importing site configuration feel almost effortless, immensely complex logic facilitates this process. Over the past five years, the entire configuration system code was written and rewritten multiple times, and we think we got much of it right in its present form. As a result of this work, it is now possible to store configuration data in a consistent manner and to manage changes to configuration. Although we made every attempt to document how and why decisions were made – and to always update issue queues, documentation, and change notices – it is not reasonable to expect everyone to read all of this material. But I did, and in this post I try to distill years of thinking, discussions, issue summaries, code sprints, and code to ease your transition to Drupal 8.

In this article I highlight nine concepts that are key to understanding the configuration system. This article is light on details and heavy on links to additional resources.

  1. It is called the “configuration system.” The Configuration Management Initiative (CMI) is, by most reasonable measures, feature complete. The number of CMI critical issues was reduced to zero back in the Spring and the #drupal-cmi IRC channel has been very quiet over the past few months. Drupal now has a functional configuration management system, but we only should call the former a CMS. While it is tempting to think of “CMI” as an orphaned initialism, like AARP or SAT, we aspire to avoid confusion. Our preferred phrase to describe the result of CMI is “configuration system.” This is the phrase we use in the issue queue and the configuration system documentation.

  2. DEV ➞ PROD. Perhaps the most important concept to understand is that the configuration system is designed to optimize the process of moving configuration between instances of the same site. It is not intended to allow exporting the configuration from one site to another. In order to move configuration data, the site and import files must have matching values for UUID in the configuration item. In other words, additional environments should initially be set up as clones of the site. We did not, for instance, hope to facilitate exporting configuration from and importing it into

  3. The configuration system is highly configurable. Out of the box the configuration system stores configuration data in the database. However, it allows websites to easily switch to file-based storage, MongoDB, Redis, or another favorite key/value store. In fact, there is a growing ecosystem of modules related to the configuration system, such as Configuration Update, Configuration Tools, Configuration Synchronizer, and Configuration Development.

  4. There is no “recommended” workflow. The configuration system is quite flexible and we can imagine multiple workflows. On one end of the spectrum, we expect some small sites will not ever use the configuration manager module to import and export configuration. For the sites that utilize the full capabilities of the configuration system, one key question they will need to answer regards the role that site administrators will play in managing configuration. I suspect many sites will disable configuration forms on their production sites – perhaps using modules like Configuration Read-Only Mode – and make all configuration changes in their version control system.

  5. Sites, not modules, own configuration. When a module is installed, and the configuration system imports the configuration data from the module’s config/install directory (and perhaps the config/optional directory), the configuration system assumes the site owner is now in control of the configuration data. This is a contentious point to some developers because module maintainers will need to use update hooks rather than making simple changes to their configuration. Changing the files in a module’s config/install directory after the module has been installed will have no effect on the site.

  6. Developers will still use Features. The Features module in Drupal 8 changes how the configuration system works to allow modules to control their configuration. Mike Potter, Nedjo Rogers, and others have been making Features in Drupal 8 do the kinds of things Features was originally intended to do, which is to bundle functionality, such as a “photo gallery feature.” The configuration system makes the work of the Features module maintainers exponentially easier and as a result, we all expect using Features to be more enjoyable in Drupal 8 than it was in Drupal 7.

  7. There are two kinds of configuration in Drupal 8: simple configuration and configuration entities. Simple configuration stores basic configuration, such as boolean values, integers, or texts. Simple configuration has exactly one copy or version, and is somewhat similar to using variable_get() and variable_set() in Drupal 7. Configuration entities, like content types, enable the creation of zero or more items and are far more complex. Examples of configuration entities include views, content types, and image styles.

  8. Multilingual needs drove many decisions. Many of the features of the configuration system exist to support multilingual sites. For example, the primary reason schema files were introduced was for multilingual support. And many of the benefits to enabling multilingual functionality resulted in enhancements that had much wider benefits. The multilingual initiative was perhaps the best organized and documented Drupal 8 initiative and their initiative website contains extensive information and documentation.

  9. Configuration can still be overridden in settings.php. The $config variable in the settings.php file provides a mechanism for overriding configuration data. This is called the configuration override system. Overrides in settings.php take precedence over values provided by modules. This is a good method for storing sensitive data that should not be stored in the database. Note, however, that the values in the active configuration – not the values from settings.php – are displayed on configuration forms. Of course, this behavior can be modified to match expected workflows. For example, some site administrators will want the configuration forms to indicate when form values are overridden in settings.php.

If you want more information about the configuration system, the best place to start is the Configuration API page on It contains numerous links to additional documentation. Additionally, Alex Pott, my fellow configuration system co-maintainer, wrote a series of blog posts concerning the “Principles of Configuration Management” that I enthusiastically recommend.

I hope you will agree that the configuration system is one of the more exciting features of Drupal 8.

This article benefitted from helpful conversations and reviews by Tim Plunkett, Jennifer Hodgdon, Andrew Berry, and Juampy NR.

Categories: Drupal

Realityloop: Organising a Drupal Contrib Port-a-Thon

3 November 2015 - 7:31pm
4 Nov Brian Gilbert

In my last blog I wrote about 7 things you can do to help get Drupal 8 contribs faster, where I mentioned that organising a contributed module port- a- thon was one way you could help, in this post I am elaborating on how to actually go about doing that.

Decide if it is a general or targeted port-a-thon

How you tackle organisation changes considerably depending on if you are focusing on a particular contrib module or allowing attendees to work on any module. It will also depend on the size of the event which type is best for you to target.

Small event
For a small event you will likely be far more productive selecting a single contrib to work on and in some ways I think this is the best approach.

Large Event
In this scenario you are likely expecting your attendees to already have a project to work on, it would be worth sending them an email before the event encouraging them to touch base with maintainers of the modules they would like to work on.

The steps I would recommend for organising the actual event are as follows:

Teach or patch

A code sprint can either be intended for experienced developers only, ready to dive in and write patches for the software. It can also be open for anyone to participate in any way they can.

It can be for both, but you will need to decide this in advance so you can set expectations and plan accordingly. At least one person should be planning to spend much of their time teaching rather than coding to make it a good event for beginners.  It's generally good to have around 1 mentor for every 8 participants.
Find your core team
You will need a few well experienced developers that can help direct any less experienced attendees that may attend, it's a good idea to lock down these volunteers before you proceed.

Experience that can be useful for these volunteers to have (depending on the module)

  1. Patch Reviewing
  2. Documentation
  3. UX

Also you may want to think about how to set up a development environment for attendees:

The main thing with development environments is that you don’t want to spend all your time helping users fix a broken one, make them aware they are free to use what they are comfortable with, but if it isn’t working ask them to use the suggested setup just for today.
Select a contrib to focus on
If you are planning a smaller focused sprint you will want to select the contrib to work on, without doing that it will be hard to move on to the next step.

Contact the maintainers

If attendees will be picking the contribs they want to work on themselves, I would suggest you have a google doc where they can list their name and what module they want to work on so that like minded attendees can pair up with them.

Once this google doc has settled a bit I would suggest you encourage attendees to reach out to the module maintainers, make sure you allow ample time (up to a month) for a response as maintainers are often a busy group of people. Here is a sample message that can be posted in the issue queue or to the maintainers contact form:

Hi [name], My local community is currently planning a contribution sprint and during the event I would like to help with porting [project name] to Drupal 8. The event is advertised at: [event link] It is being held on: [event date including timezone] It would be really helpful if you could find some time beforehand to let me know anything that would be relevant to your plans before the event so that my work can be as useful to the project as possible. Cheers [your name]

If you’re lucky one, or several of them may be able to attend your event (in person or virtually). They will be able to give insight and some background on their plans which will be invaluable for attendees to make sure that their development work during the sprint will have a chance of being committed. 

Also take the opportunity to try and pick a date when a maintainer will be available so that you can move on to the next step.

Find a venue

It’s generally good if you can find a location that is easily accessible via public transport, the other main concerns are food and internet access.

Plan to provide enough access points with enough capacity for 2.5 devices per person.
For a small sprint of around 10 people: Bandwidth: 20-30 MBps down, 5 MBps up should handle 20-25 devices.
If your venue is close to food outlets this will be sufficient, but you will get a better turnout if you can get food sponsorship from local companies that use Drupal.
Also getting food delivered means more time for coding!

Schedule the actual event

Be sure to publicise the event to the relevant places:

  1. Relavant groups at
  2. Relevant groups
  3. Twitter
    Remember to use the #Drupal hashtag on twitter and also send a tweet to @drupalmentoring to help spread the word.
  4. Facebook
  5. Drupal planet
  6. Have someone who can be a point of contact before and during the event
  7. Tell attendees if food is or isn’t being catered
At the Port-a-Thon

As a first order of the day it would be good to run around the group and introduce yourself and have everyone give some indication of their background and Drupal experience, as well as what they would like to do to help with the port of this particular module.

As with any sprint it is a good idea to have people group up and work on things together, and for an event focusing on a particular module it's a good idea to have a discussion about the overall plan for how the group plans to tackle the work involved.

  1. Have name tags for everyone, ones that won’t be below the table when sitting down.
  2. Make sure you have access to whiteboards or butcher paper for brainstorming and assigning tasks.
  3. Having a group focus on documentation will really help the maintainers so don’t forget that part.
  4. Git can make the process of contributing so much easier. There are many great Git tutorials out there, but [Git Immersion] is a great resource
  5. Ensure everyone knows about the ‘Version control’ tab on d.o
  6. Make time for people to communicate their achievements
  7. Think about having a social event at the end of the port-a-thon
  8. Have a great time!
  1. How to successfully host a sprint (youtube)
  2. How to plan a sprint
  3. Documentation sprints
One last thing

Those who have organised events in the past will usually be happy to help you with advice, feel free to contact me if you have any questions.


drupal planetdrupal 8
Categories: Drupal

Hook 42: How to Help with the Drupal 8 Contrib Porting Tracker

3 November 2015 - 7:23pm
Tuesday, November 3, 2015

Drupal 8 RC2 is out and a full release is coming on November 19th! But, in order to make more great websites on Drupal 8, we need to port a bunch of contrib projects from Drupal 7 to Drupal 8. There are a LOT of contrib projects out there (over 12,000 modules, themes, and distributions!), so the new Drupal 8 Contrib Porting Tracker helps track these projects so the community can see what’s going on in a centralized place.

Angie Byron (aka webchick) wrote a great blog article on the idea behind the Drupal 8 Contrib Porting Tracker. TL;DR: Everything was everywhere for D8 ports, and now it will be in one place. To understand more about the motivation for the Drupal 8 Contrib Porting Tracker, check out the project page FAQs and this issue's comments on the history of its evolution and some other opinions on its worth.

Do you want to help this documentation process? Great! This blog post shows how you can contribute to the Drupal 8 Contrib Porting Tracker project. You do not need to be a core contributor or a contrib project maintainer or a coder or even know much about Drupal to help with this task!

Step 0: Install Dreditor

First and foremost make sure that you have dreditor installed on your browser.

Step 1: Don’t redo what has already been done

Log into 

Take a look at the Drupal 8 Contrib Porting Tracker Issue Page, and check if the project is already being tracked.

IMPORTANT: Make sure that you choose - Any - issues manually, since the drop down defaults to Status: Open issues.  

For this how to, I am going to choose the module Nice Menus and add it to the list of contrib projects documented in the Drupal 8 Contrib Porting Tracker project.

Click Search and, in this case, no results appeared since the project hadn't been added yet. Make sure you search several variants of the project name, including the machine name. For example, "Nice Menus", "nice_menus", and "nicemenus" (in case there is a typo). Note: If the project already is being tracked, you can update the issue for that project if you have additional information to add or more current information.

Step 2: Check the project’s page and issue queue

If a project is ported, in the process of being ported, or is not going to be ported, we want to create an issue in the Drupal 8 Contrib Porting Tracker. In other words, if the issue doesn’t exist, make it!

If we take a look at the Nice Menus’ project page, we see Nice Menus has a development release for Drupal 8. Great!

It's also important to get a look into how the development is going for the Drupal 8 port, especially if there is not an official D8 version yet. You can do this by searching “Drupal 8”, “Drupal 8 port”, "D8 port", etc. in the issues for the project.

Looking through the issue queue for Nice Menus I saw that many users were having difficulty using the Drupal 8 release of the module. Now I know to put the status as "Needs work" (all the other status will be explained in the next section).

Step 3. Create an issue in the Drupal 8 Contrib Porting Tracker

Navigate to the template for Drupal 8 Contrib Porting Tracker.

Click the CLONE ISSUE button. This handy button shows up because we installed Dreditor. :)

The template will open up in a new page.

Now, let’s fill in the information in the fields.

  • TItle: [module_short_name] Module Human-Readable Name (Issue Template)
    • Ex. [nice_menus] Nice Menus
  • Project: Drupal 8 Contrib Porting Tracker (2573607)
    • Leave as is
  • Category: Plan
    • Leave as is
  • Priority
    • Choose between: Critical, Major, Normal, Minor
    • Unless this is a very popular module or blocks the porting of numerous other modules, choose between Normal and Minor
  • Status
    • Status to choose from:
      • Active = No D8 port started yet.
      • Needs work = D8 development has started but is not yet usable.
      • Needs review = Project has Alpha or Beta D8 releases available for testing.
      • Reviewed & tested by the community = Project has Release Candidate (RC) D8 release.
      • Fixed / Closed (fixed) = Project has stable D8 release.
      • Statuses with special meaning:
        • Postponed = Project porting is blocked; for example, blocked on another dependent module or on a core issue.
        • Postponed (maintainer needs more info) = Needs research to determine D8 status.
        • Closed (won't fix) = Project or its functionality is now in core.
        • Closed (duplicate) = Project has been renamed or made obsolete by another project.
    • DO NOT use these statuses at this time (in the future, it's possible these will be used for a status) 
      • Patch (to be ported) (if there is a patch available, mark as Needs work and update the issue summary with a link to the issue with the patch)
      • Closed (works as designed)
      • Closed (cannot reproduce)
  • Version:
    • Leave as is
  • Component
    • Choose from: Module, Theme, or Distribution
  • Assigned
    • Leave as unassigned unless you are planning to do the port yourself
  • Issue tags

Fill in the information for the Issue summary.

(Note: The issue template may change in the future so follow the template on the Drupal 8 Contrib Porting Tracker for the latest and greatest.)

Read the highlighted section since it contains directions and then delete it.

Now fill out the text underneath each <h3>.

If some sections aren't applicable to the project or are unknown, please keep the section and write in the section: "N/A", "Unknown", "None", etc. or even just leave it blank. That way someone with the information will have a spot to easily add it later.

The sections include:

  1. Project summary and overall status
  2. Project URL
  3. Link to the code - this is usually either on (main project page or an issue in that project) or on github
  4. Estimated completion date
  5. Any other projects that this module depends on
  6. Name(s) of who is doing the port
  7. What is needed to help the port
  8. The roadmap for how the project will be ported
  9. Any links for reference

Delete the text in the Parent issue field.

Click the Save button.

Proofread the issue you created. If you find any mistakes, simply edit the issue again and fix the mistakes.

Great job! Here’s a look at the finished result for the Nice Menus Drupal 8 Contrib Porting Tracker issue.

Step 4. Tracking the top 1000 projects by November 19th!

The Drupal 8 Contrib Porting Tracker is a centralized way to track all our favorite projects available for the community. We are currently part of a team of community contributors who are adding these porting issues for the top 1000 projects and would love your help.

To find the top 1000 projects, check out the Drupal project usage overview page. Go down the list and find a project that's not in the Drupal 8 Contrib Porting Tracker and then add it following the instructions above. Or, if you want to coordinate with us more tightly, we are tracking the top 1000 projects we are adding right now so contact us and we can collaborate on getting these into

Our goal is to get these top 1000 projects into the Drupal 8 Contrib Porting Tracker by November 19th in honor of the official release. It takes a village to raise a Drupal!


Lindsay Gaudinier Topics: Services:
Categories: Drupal

Chromatic: BADCamp 2015: Transitioning From theme() and Theme Functions to Render Arrays and Templates

3 November 2015 - 4:09pm

I was fortunate to attend and speak at BADCamp for the first time this year. BADCamp is the Bay Area Drupal Camp, held annually in Berkeley, CA. I don't know the official numbers, but I believe over 1,000 were in attendance, giving it the feel of a smaller DrupalCon. The camp was well organized, the sessions were high quality, and I met and got to know quite a few great people.

Anyone who wasn't able to attend can watch my session, 7 to 8: Transitioning From theme() and Theme Functions to Render Arrays and Templates, here:

My slides are also available online. The video and slides include in-depth examples, but for the TL;DW crowd more interested in the key takeaways:

Render Arrays > theme()

The theme() function no longer exists in Drupal 8. Instead, render markup by passing render arrays to the template. Start using render arrays instead of theme() in Drupal 7 right now. Not only will it make the code easier to port to Drupal 8, but there are other advantages.

Using render arrays allows for the data to remain an array until the template renders it into markup. Waiting to render markup allows other modules or themes to intercept and alter the data before it is rendered. This is typically done with preprocess hooks.

Templates > Theme Functions

When Drupal 7 goes to render markup, it does so with either a theme function, such as theme_image(), or a template. Theme functions contain a lot of logic and are a tough way to write and alter markup. Overriding theme functions also involves copying a significant amount of code to make changes.

Instead of writing theme functions, write templates. Keep the logic in preprocess and process functions. This separation will make altering the logic and markup much easier. Other modules or themes can easily use preprocess hooks or override templates as needed.

Drupal 8 has taken this approach. While theme functions can still exist in Drupal 8, all core theme functions were converted to templates.

More information

For more on this topic, check out these resources on

There were also a number of other sessions at BADCamp related to this topic. They included:

Thanks again to the BADCamp organizers. I hope to see everyone again next year!

Categories: Drupal

OSTraining: Drupal 8 Dates You Need to Know

3 November 2015 - 11:52am

Yes, 1779 days after Drupal 7 arrived, we finally have a release date for Drupal 8.

As a result of this decision, two other important dates were decided:

  • the end of support for Drupal 6
  • the approximate release date for Drupal 8.1

Read on to find out more about these important dates for Drupal, during the next six months:

Categories: Drupal

Axelerant Blog: The Best Drupal Agency to Work With? Consider Team Wellness.

3 November 2015 - 11:00am

When it comes to picking the best Drupal agency to work with or for, you should look at team wellness. To be fair, most completely remote, globally distributed powerhouses are healthy. But this post, it’s different, it’s why Axelerant is at the forefront of Drupal agencies.

Here we have an amazing life coach working full-time for our team members, semi-annual raises that are peer-determined, serious productivity, and a get things done mentality that isn’t measured in hours. And these are just a few unique details of Axelerant. These characteristics aren’t exactly how you’d classify an agency typically.

At Axelerant, work-life balance, organizational culture, time (and of course, money) are gone about differently. It’s changed the way we live.

We take employee satisfaction to an odd extreme.

We hired a Life Coach full-time for our team members. This unique move has helped forward our holistic approach to instill job satisfaction, side step burnout, and enable healthy professional growth. Team members can contact our life coach to work on career path objectives, stress management, personal goal setting, life changes, social challenges, and much, much more.

This enablement creates a healthy and safe environment within our organization. In a professional environment like this, positive feedback doesn’t always do the job. We’re building a positive culture for our team, with an emphasis on goals, personal development, and satisfaction.

We’ve got an awesome kudos system. Our HR platform is integrated with Slack, which lets us give publically and receive pats on the back throughout the day. We encourage many notes of appreciation, recognizing monthly those who give and receive the most.

Often when logging into our Slack system, we find personalized messages from the CEO and COO encouraging us to reach out to our leaders, peers, or them if there’s something on our minds.

Monthly 1-on-1’s are about career growth. Making improvements and milestones are imperative, but you could say that career growth is paramount. Team members meet with leaders to discuss this growth so they can visualize the stepping stones.

In these meetings, we discuss training opportunities, the possibilities of educational reimbursement, and career path changes. If a team member is interested in another vertical or department, we can nurture a transition or part-time involvement.

Our progressive policies are benefits. Team members are encouraged to take advantage of leave, travel, and tech policies whenever applicable. Inside Axelerant, you’ll find travel and technology budgets (Wi-fi reimbursement and device replacement); group health insurance; maternity, sabbatical, and paternity leave, and an extra special leave policy.

Days off are shareable with other team members. And these are paid, of course.

We “do” work differently.

There’s been quite a bit of talk recently about burnout in the Drupal community. Work-life balance has been at the heart of this conversation. At the crux of work-life balance rests company policy.

Let’s face it, over working, over time, and burnout have a lot, if not everything, to do with an agency’s approach to productivity. The best Drupal company will put this into perspective.

We don’t clock in or out. We deliver quality work on time and budget, without timesheets. Productivity is about results via Key Performance Indicator’s, not punch cards. When you work hard, efficiently, and you’re connected with the team, you get quality results on time and budget.

Of course our approach is detailed; we’ve adopted and refined agile frameworks which support our self-organized, self-managed teams. Agile powers how we go about getting things done, our performance tracking and collaborative. There are many more reasons for our successes in delivery, including our competence with automation.

We set our work schedules. This scheduling is expressive of deep trust and responsibility, but it’s also a testament. Axelerant’s work-life balance is in the hands of each team member.

This doesn’t mean that our employees aren’t up early in the morning or late at night. What this means is while some may choose to be up before the sun (or long after it’s gone), it’s up to them. We encourage them to do what’s best for themselves.

These agile and scheduling characteristics help foster our team’s wellness, as both are focused on the needs of the individual. We’ve found that this doesn’t hinder project success, in fact, it helps to ensure it.

Rigidity doesn’t work, and our teams have proven that they can be trusted with accountability and independence.

We handle finances differently.

We’re transparent. In Axelerant, employees can view salaries, raises, and other details about company spending. These aren’t coveted secrets; figures are talked about openly. In this way, every employee is kept in the loop and encouraged to ask questions about our internal affairs. We keep ourselves honest, and we don’t mind talking about money.

We’re passionate about our work and our livelihood. Some firms and agencies don’t like to speak about money. We’re not like this. Let’s be frank, financial conversations centered on our employees needs aren’t signs of a lack of passion or selfishness. At Axelerant, we encourage openness.

Semi-annual raises are peer-determined. Each team receives a raise budget based upon profits. Next, the allocation of this amount is by honest team-level discussions. We’ve found that this system in conjunction with 1-on-1s, metrics, and engagement survey enables team recognition and promotes project feats. While this isn’t wholly competitive, it does encourage personal growth.

We’re paid on-time, in monthly lump sums. This consistency works great for our employees when it comes to putting away savings and meeting monthly budgeting needs. Whereas some agency employees need to wait several weeks to a couple of months for addressing their school loans, rent, food, and other financial concerns, Axelerant employees are already done during the first week of every month.

And being global? It changes everything.

Axelerant is a globally distributed team (France, Taiwan, India, Israel, Japan, Australia, United States, and more to come). Some of us are from big cities; others live in small towns—why does this matter? Because we’ve built a close-knit international team and have attained a diversity some can only dream of.

We’re a melting pot. Our cultural differences create a unique environment that enriches us all. The unique perspectives and insights every team member brings to Axelerant makes our team dynamic.

The importance of having this universal, a global mindset in today’s market can’t be undervalued. We’re world travelers, with deep appreciation for the new. This connectedness is positive energy that charges Axelerant’s brand: we’re multicultural movers, doers, and dreamers.

There are global events and retreats happening back-to-back. Our annual retreat officially brings us all together for epicness, but we often see one another at international cons, camps, and other local meetups. This sponsored travel takes many of us to places we wouldn’t be visiting otherwise, broadening our horizons, and exposing us to the world even more.

We’re an international, 24-hour powerhouse. We use time zones to our advantage. This provides a tremendous advantage to our clients and enables us to get ahead of other agencies. At any time, somebody from Axelerant, somewhere in the world, is working hard at getting the right thing done.

These are just a few oddities that make Axelerant great. If you’re looking to hire or work for the best Drupal agency, these are some of the details you should be considering.

Sounds unbelievable right? It's not Find out for yourself

The post The Best Drupal Agency to Work With? Consider Team Wellness. first appeared on Axelerant.

Categories: Drupal

Drupal Watchdog: Platonic Project Workflow

3 November 2015 - 9:37am

Perhaps the most important workflow any of us encounter is the one least talked about: That is, the flow of, well, our work. Not of our content through a CMS, but of the process of building that CMS in the first place. Or, for that matter, any web project.

Many electrons have been spilled extolling the merits of Agile development and the evils of Waterfall development, the two popular workflow archetypes. The real world, as ever, is not that simple. Especially when we speak of consulting projects rather than in-house teams, pure Agile is rarely acceptable; it lacks long-term predictability (by design). And good design (both visual and technical) requires some level of up-front gestalt planning.

Every project is different, but what does an ideal project workflow look like? And how can we try to approach that ideal more readily?

Plan Ahead

There is an old British military adage: Proper Prior Planning Prevents Piss Poor Performance.

Up-front planning of a project is crucially important, especially when some stakeholder asks the all important question: “So will we be able to do it within budget and/or timeline?”

Good planning is how you are able to answer that question.

More important, though, that planning phase (often called “discovery”) is where the architecture of the project is defined. That architecture encompasses three different, closely-related areas: Content Strategy, Design, and Architecture.

Content Strategy

Content strategy is one of those fields that has only recently received a name, but has been around as long as good websites have existed. It can be thought of as the “architecture of information” (not to be confused with information architecture, which is a subset of content strategy), or perhaps design of information. Content strategy is concerned with questions such as:

Categories: Drupal

about seo