Upgrade Your Drupal Skills

We trained 1,000+ Drupal Developers over the last decade.

See Advanced Courses NAH, I know Enough
May 20 2020
May 20

by David Snopek on May 20, 2020 - 11:17am

As you may know, Drupal 6 has reached End-of-Life (EOL) which means the Drupal Security Team is no longer doing Security Advisories or working on security patches for Drupal 6 core or contrib modules - but the Drupal 6 LTS vendors are and we're one of them!

Today, there is a Moderately Critical security release for Drupal core to fix a vulnerability in jQuery. You can learn more in the security advisory:

Drupal core - Moderately Critical - Cross Site Scripting - SA-CORE-2020-002

Here you can download the Drupal 6 patch to fix, or a full release ZIP or TAR.GZ.

If you have a Drupal 6 site, we recommend you update immediately! We have already deployed the patch for all of our Drupal 6 Long-Term Support clients. :-)

FYI, there was another Drupal core security release made today (SA-CORE-2020-003) but that one doesn't affect Drupal 6.

If you'd like all your Drupal 6 modules to receive security updates and have the fixes deployed the same day they're released, please check out our D6LTS plans.

Note: if you use the myDropWizard module (totally free!), you'll be alerted to these and any future security updates, and will be able to use drush to install them (even though they won't necessarily have a release on Drupal.org).

May 20 2020
May 20

More likely, you have a content management system (CMS), which is specifically configured and customized to manage your content. In some cases, this same software will deliver your content to your audience. In more complex cases, the CMS exposes your content over an API to a front-end application and other channels, which present this content to your audience.

<?php

echo("It's software all the way down.");
 

When it comes to the software supporting your website or application, there will always be a tension between building something new and innovative and getting the most out of what you have already built. Twenty years ago, Joel Spolsky wrote about Netscape making the "worst strategic mistake... they decided to rewrite the code from scratch."

Quote

While I love this quote (I probably reference this thinking at least a few times a month) perhaps the more important point is made at the end of Joel's article:

"It’s important to remember that when you start from scratch there is absolutely no reason to believe that you are going to do a better job than you did the first time."

Now, this isn't to say that I am anti-innovation or that I am a technology conservative. In fact, I believe that iterations are the best way to make pieces of software more effective, elegant, or efficient. But, far more than this, I hate to see the waste created by under-investment in existing production software.

Talking about something new is way easier than executing maintenance plans on what you already have. And, as it turns out, executing a new development project is often far more difficult and way riskier than you can possibly imagine while you're dreaming up the new idea.

I believe that adopting a maintenance mindset is one of the best ways to delay the risky undertaking of a full web site or web application rebuild. I come across a lot of engineers, communications professionals, and digital marketers who think that web maintenance is something that starts after a development cycle and ends just before a rebuild.

Web Maintenance Graph

When talking to customers and teams, I try to encourage us to give the software being created the upper hand by employing what I refer to as "Engineering for Maintenance". You can think of this as "building it right". Once the software has been built and launched in a way that it can be maintained, you can execute a systematic maintenance plan, which I refer to as "Maintenance Engineering".

Engineering for maintenance

ALGM Web Maintenance

In the best case, "building it right" should be the first step taken towards adopting a maintenance mindset. Building and launching web software in a way that it can be maintained covers multiple interrelated disciplines. Starting from the user experience (UX) and design process, where we uncover the best way to communicate with your audience, through to the content modelling, where we plan a logical structure for your content, to picking the technology stack and developing the custom features required to present the specifics of your brand, organization, or mission.

By building something in a maintainable way, we lay the groundwork for getting the return on our investment for the longest possible time.

We frequently come across maintenance cases where "Engineering for Maintenance" was not considered. There are multiple reasons why this could be the case, running the range from inexperience to unexpected success, to pivot pressure, through to simply negligent practices. In these cases, the "Engineering for Maintenance" often takes the shape of an audit and change implementation plan to lay the foundation of what we need to take the project into an appropriate maintenance plan.

Maintenance engineering

ALGM Web Maintenance Engineering
In the web development context, "Maintenance Engineering" covers all the disciplines of keeping the website delivering the specific value it was created to deliver. This could be from simply communicating a concise brand message, through to an enterprise brand presentation, collecting donations, or selling products.

Maintenance Engineering is not just keeping the software secure and up to date - it is also about keeping features working well, iterating on features that can be changed, and building out new features which can launch on the same software. So Maintenance Engineering also covers the creation of new features to deliver new value as you iterate and grow to further understand your audience.

Consequently, this phase doesn't only involve engineers. It equally involves UX specialists, designers, content specialists, analytics consultants, and project managers.

As you may notice, there is a significant overlap in the activities that are undertaken during a new development stage and those undertaken in a maintenance stage. However, I've found that "Maintenance Engineering" has a somewhat different flavour to that of the engineering undertaken when building new software. This is due to the fact that maintenance engineering looks after a production site - it necessarily takes a more conservative approach, and moves at a different pace.

I don't mean to suggest that things move more slowly in a maintenance phase - in fact, this is often quite the opposite. I rather mean to underline the point that there are often more things to consider with a site that is in production. This is the reason that, at Amazee Labs, we split our team into a new build team and a maintenance & extension team.

Get more from what you have already built


Adopting a maintenance mindset can be a challenge. It sometimes requires a shift in thinking and taking a longer view than what you may have intended. But I believe it can be valuable, and that you can often get more out of what you have already built.

Find a partner that gets it

If you have an internal team looking after your web software, find a product owner, manager, or member of the engineering team that also believes there is merit in maintenance as a mindset, rather than a milestone.

If you outsource your web development, have a chat with your project manager or customer liaison and check that they share your view on maintenance as a mindset. At Amazee Labs, this happens by default in the regular alignment calls between the Project Manager and client Product Owner.

Take inventory

Spend some time with your chosen partner taking an inventory of where you are at with your current site or application. How aligned is your website look and feel with your brand? How well is it telling your story? Is it still effectively selling your products, or collecting your donations? Essentially ask yourself, from a functionality and communication perspective, how far off are you?

Next, take inventory of the software and infrastructure. Is the software out of date, and can it be brought up to date easily? How performant is the site? Does it feel snappy or sluggish?

Take action

Remember, the goal is to get more out of what you already have. There is no getting without doing, so the most important part of trying it out is to take action! The sooner you try to adopt the maintenance mindset, the sooner you'll really know how much more you can get out of what you have already built. In some cases, you may find that the relative cost of maintenance is so high that new software should be considered. In this case, you have learned something, so you're already better off than you were.

But in my experience at Amazee Labs, 9 times out of 10, with some planning and some creativity, we have been able to extend the lifetime of our customers' sites significantly.

Reach out


The team and I at Amazee Labs are passionate about helping you get more out of what you have already built. If you are interested to find out what we do, and how we do it, get in touch. Looking forward to hearing from you.

May 20 2020
May 20
Project: Drupal coreDate: 2020-May-20Security risk: Moderately critical 10∕25 AC:Basic/A:None/CI:None/II:None/E:Theoretical/TD:AllVulnerability: Open RedirectCVE IDs: CVE-2020-13662 Description: 

Drupal 7 has an Open Redirect vulnerability. For example, a user could be tricked into visiting a specially crafted link which would redirect them to an arbitrary external URL.

The vulnerability is caused by insufficient validation of the destination query parameter in the drupal_goto() function.

Other versions of Drupal core are not vulnerable.

Solution: 

Install the latest version:

Reported By: Fixed By: 
May 20 2020
May 20
Project: Drupal coreDate: 2020-May-20Security risk: Moderately critical 10∕25 AC:Complex/A:Admin/CI:Some/II:Some/E:Theoretical/TD:UncommonVulnerability: Cross Site ScriptingDescription: 

The jQuery project released version 3.5.0, and as part of that, disclosed two security vulnerabilities that affect all prior versions. As mentioned in the jQuery blog, both are

[...] security issues in jQuery’s DOM manipulation methods, as in .html(), .append(), and the others. Security advisories for both of these issues have been published on GitHub.

Those advisories are:

These vulnerabilities may be exploitable on some Drupal sites. This Drupal security release backports the fixes to the relevant jQuery functions, without making any other changes to the jQuery version that is included in Drupal core or running on the site via some other module such as jQuery Update. It is not necessary to update jquery_update on Drupal 7 sites that have the module installed.

Backwards-compatibility code has also been added to minimize regressions to Drupal sites that might rely on jQuery's prior behavior. With jQuery 3.5, incorrect self-closing HTML tags in JavaScript for elements where end tags are normally required will encounter a change in what jQuery returns or inserts. To minimize that disruption in 8.8.x and earlier, this security release retains jQuery's prior behavior for most safe tags. There may still be regressions for edge cases, including invalidly self-closed custom elements on Internet Explorer.

(Note: the backwards compatibility layer will not be included in the upcoming Drupal 8.9 and 9.0 releases, so Drupal 8 and 9 modules, themes, and sites should correct tags in JavaScript to properly use closing tags.)

If you find a regression caused by the jQuery changes, please report it in Drupal core's issue queue (or that of the relevant contrib project). However, if you believe you have found a security issue, please report it privately to the Drupal Security Team.

Solution: 

Install the latest version:

Versions of Drupal 8 prior to 8.7 are end-of-life and do not receive security coverage. Sites on 8.6 or earlier should update to 8.7.14.

The pre-release Drupal versions (8.9 and 9.0) have been updated jQuery to version 3.5.1 as of 8.9.0-beta3 and 9.0.0-beta3.

Reported By: Fixed By: 
May 20 2020
May 20

For every website, irrespective of the industry, a blog is a powerful magnet that attracts both visitors and search engines. In order to keep your website fresh, you need to regularly treat your audience to new and tasty content.

Among the ways to increase blog engagement is to notify users about new posts. Let’s see how to set up content email notifications on a Drupal website.

Of course, you can always rely on our Drupal development team for setting up notifications on your website according to your requirements at very affordable prices.

A few tips about how to engage readers on a blog

So you have a blog that helps you bring your message across to your prospective customers. How can you increase content engagement? How do you connect with readers better? The tips include (but are not limited to) the following:

  • Regularly share your blog on social media and add sharing buttons for your readers to do the same.
  • Make sure your website has a comment section so your readers can share their thoughts or ask questions (and get your answers!)
  • Insert encouraging questions into your blog content that directly ask your readers’ opinion.
  • Never underestimate the power of interesting video content.
  • Share your blog on forums, communities, and specialized platforms in various engaging formats like polls, podcasts, contests, slideshows, and so on.
  • Don’t forget to increase your website loading speed so your users don’t lose patience while waiting to read your content.
  • Be sure to improve your website’s mobile UX so it’s easy and enjoyable to read your blog from any device.
  • Email users when a new post is published, or an old one is updated or commented on. This is the subject of the rest of this post.

The role of email notifications in your user engagement

Let’s see more details about the benefits of notifying users about new posts on a website. This increases the chance that they:

  • come and read your content
  • share it on social media
  • register on your website
  • subscribe to your newsletter
  • become loyal readers
  • get involved in a discussion in the comments
  • or, most desirably, click your important CTA button

That’s why email notifications, as an important engagement technique, are beneficial for your blog views, popularity, SEO, and conversions. Considering the high open rates of emails, the impact can be very significant.

Opportunities to notify users about new posts on a Drupal website

If your website is built with Drupal, your options for email notifications are very extensive:

  • Recipients. You can send new post notifications to subscribers, users, authors, admins, etc. These can be users of specific roles, users from a specific list, or users who have performed specific actions (e.g. commented on a blog post).
  • Events. Notify users when content is created, updated, someone posted a comment or replied to it, there are new posts to moderate, etc.
  • Form. Send notification messages, full content items, content teasers, full comment threads or just personal replies.
  • Time. Send your emails immediately, schedule them to be sent in the future, or unquee them to be processed by Drupal Cron (time-based task scheduler).
  • Amount. Notify users about every single event or collect the events into regular newsletters.

Drupal modules for email notifications

Let’s now see how to notify users about a new Drupal blog and other events described above. As usual with Drupal, this can be implemented through a wide array of contributed Drupal modules.

Which is the best Drupal module to send new post notifications to subscribers? Each of them is great in its own way and performs particular functions. Of course, anything that is not covered by them can be added as custom functionality by Drupal development experts.

Comment Notify

Comment Notify is a lightweight module that notifies users by email about replies to their comments and other comment-related events. It is available both in Drupal 7 and Drupal 8. The module has been freshly updated.

One of its important features is the ability to send emails both to authenticated and anonymous users. Anonymous users are a very promising audience in building a blog community. Other features of the module include the option for users to unsubscribe, notifications for admins that they need to moderate a comment, emails for authors about new comments to their blog posts, and much more.

Comment Notify Drupal module

Admin Content Notification

The Admin Content Notification module allows you to notify users by email when new content has been created or updated. It is also available in Drupal 7 and 8.

You can notify website administrators or users of any other roles, as well as users of a specific list. It’s possible to select specific content types, events (whether the content is created or updated), send content nodes via tokens, and much more. 

Admin Content Notification Drupal module

Workbench Email

The Workbench Email module enables you to send email notifications based on content status changes. You can send emails from the admin dashboard about the transitions of content from state to state, for example, when the content moves from “draft” to “needs review.” Its work is based on configurable email templates. The module supports tokens and allows you to select users and content types.

Workbench Email Drupal module

Message Stack

The Message Stack is a complex but very powerful and flexible module that consists of the Message, Message Notify, Message Subscribe, Message Digest, and Message UI submodules. The package has capabilities that will impress any developer because it can do literally anything if used properly. For example:

  • defining message types and generating messages
  • export of message types
  • subscription to events related to content
  • plugins for email and SMS notifications
  • multilingual support
  • Token support
  • Rules support
  • example modules included

Message Stack Drupal module

Let us help you notify your users about new posts on your site!

If you are still asking yourself “How can I increase my blog traffic?” try these effective email notification techniques and boost user engagement with the help of our Drupal development company.

We understand the situation is difficult today for many businesses. So we have adopted a cost-effective development approach and now do the work twice as fast. A wealth of contributed modules in Drupal, for email notifications and other purposes, allows us to use minimum customization where it is possible in order to meet the customer requirements. Give it a try!

Contact us to discuss how we can use our development expertise to help your website and business.

May 20 2020
May 20

Your browser does not support the audio element. TEN7-Podcast-Ep-090-Heaher-Rocker-and-Tim-Lehnen-Drupal-Association_0.mp3

Summary

Heather Rocker and Tim Lehnen discuss the multiple missions of the Drupal Association, DrupalCon Global 2020, and the upcoming Drupal 9 release.

Guest

Heather Rocker and Tim Lehnen of the Drupal Association

Highlights

  • Drupal Association (DA) covers three areas, drupal.org (open source projects), DrupalCon, the Drupal community
  • The DA doesn’t build Drupal directly, they build and enhance the tools that enable the community to build Drupal
  • It was a tough decision to make DrupalCon 2020 virtual, but Minneapolis community was supportive and forgiving
  • With loss of DrupalCon, DA lost 60% of its total funding, but with emergency #Drupal Cares fundraiser, the Drupal community made up the $500K shortfall
  • Drupal 9 is coming June 3, focused on empowering less-technical users
  • Drupal 8 to Drupal 9 upgrade will be as easy as minor upgrade, and that sentiment carries forward to all future releases
  • Drupal 9 has a new evergreen logo, and will help with brand recognition

Links

Transcript

IVAN: Hey everyone! You’re listening to The TEN7 Podcast, where we get together every fortnight, and sometimes more often, to talk about technology, business and the humans in it. I’m your host Ivan Stegic. As most of you know, TEN7 is squarely focused on Drupal as a technology. We live it, we breathe it, we create and we care for Drupal power websites, and we do what we can to support the community by donating our time and money by contributing to camps across the nation and of course, to Twin Cities Drupal Camp here in our backyard. Even though we’re a fully distributed firm with team members in Portland, Austin, Boise and Chicago, our roots are here in Minneapolis.

So, we’ve been giddy for almost two years now with the anticipation that DrupalCon 2020 was scheduled for Minneapolis. DrupalCon was finally going to be in our hometown, and we have been really looking forward to that. But as the Coronavirus pandemic has raged it’s not only devastated families, but it’s affected the global economy and has certainly left an indelible mark on the conference and events industry as well. DrupalCon Minneapolis has been transformed into DrupalCon Global with a new date and virtual presence online. Mark your calendars, July 14 to 17, 2020.

Today’s episode is publishing on what would’ve been the Wednesday of DrupalCon Minneapolis 2020. Trainings and summits behind us, we’d be listening to the Dries Notes and looking forward to sessions, BOFs and of course a sprint day, DrupalCon. And what better way to celebrate what would’ve been than to have two members of the Drupal Association with me today on the podcast.

My guests today are Heather Rocker, Global Executive Director of the Drupal Association, and Tim Lehnen, Chief Technology Officer of the Drupal Association. Heather is a champion for the global ecosystem of Drupal and has been Global Executive Director of the Drupal Association for just over a year. What a time to have come aboard. She has been the Executive Director of Women in Technology and the CEO of Girls, Incorporated of Greater Atlanta in the past. Tim has been involved with Drupal for over 14 years, has been the Director of Engineering in the past, the interim Executive Director, and now serves as the Chief Technology Officer of the Drupal Association.

Hello, and welcome to you both. I’m just so honored to have you on the show.

HEATHER ROCKER: Thank you. It’s lovely to be here. We’d rather be with you in person in Minneapolis though, if we had our way

TIM LEHNEN: Yeah, it would be wonderful if we could’ve been there together, but it’s great to be here and great to talk about how we’re pivoting to DrupalCon Global and making all that happen.

IVAN: I’m just honored,  and it’s nice to be speaking with you both. I want to ask the first question by saying, how are you guys doing? How are your families? Where are you joining me from on the podcast today? And also, who else is using your wi-fi?

HEATHER: [laughing] I’ll let Tim go first.

TIM: Yeah, so, doing fairly well. I’m here in Portland, Oregon and the city has been doing a decent job with our Shelter In Place and quarantine rules. So for the most part we’re doing okay here. Fortunately, my family has been not too disrupted. I, of course, have been working remotely since before all this happened. My wife, who’s a reading tutor, is now working from home and doing that virtually. And so, we just got a few folks in the home, my wife and my brother, all using our wi-fi, but otherwise we’ve been very fortunate and doing very well.

IVAN: I’m so glad to hear that. How about you Heather?

HEATHER: So, we’re doing well. So, I’m in Atlanta, just north of Atlanta, Georgia. We are handling Shelter In Place slightly differently. If you’ve seen the news lately, but my husband and son and I are staying home and staying healthy. It’s an interesting situation. So, I got married in January of this year.

IVAN: Congratulations. Wow.

HEATHER: This is a very interesting way to start a marriage. [laughing] It’s a lot of togetherness that nobody planned, so we’re getting to know each other really well from a living together perspective.

IVAN: Well done. Wow.

HEATHER: Thank you. And my son is in fourth grade, so we’re also trying to be teachers or at least teaching assistance, at the same time as working full-time from home. So, it’s an interesting situation and last week we decided to bring two fairly newborn kittens into the situation just to make things interesting.

IVAN: Wow.

HEATHER: So we’ve got a house full of excitement now.

IVAN: Oh my gosh. I’m sure your son loves having kittens around.

HEATHER: It’s a nice distraction. It’s a lot of upheaval I think for children, and it’s hard to know how it’s affecting them. So, having something fun running around the house that’s not mom and bonus dad is good stuff.

IVAN: I hear you. My kids are [laughing] giving our dog a lot of attention and have been for the last eight weeks, [laughing] and I think the dog loves it. Daphne’s a big fan of us being all around, she loves the attention.

HEATHER: Exactly. Yeah, they say dogs are winning. [laughing]

IVAN: [laughing] I agree. Well, we have a lot to talk about today. I want to make sure we cover not only DrupalCon and what was supposed to be and what it is now and what it might be in the future, but that we also talk about Drupal 9 and that beautiful new logo and brand standards that came out and the thought process behind all of that.

Before we get to that, and all that, I want to kind of go back to first principles, because we do have listeners who sometimes haven’t used Drupal in the past and don’t know what it is. I want to go back and talk a bit about the Drupal Association. Let me thank you both for serving the community as officers on the Association, and I want to go to a basic level. What is the Association? Why does it exist? What role does it play? How did it come about?

HEATHER: So, I’ll hit this at a high level and then Tim, who’s been here much longer than me, can give a great deep dive. So, the Drupal Association is a non-profit organization who exists primarily to accelerate the Drupal project. We do that through three basic program areas. One is drupal.org, which if you are familiar with Drupal Open Source Project that’s what you’re most familiar with. The second is DrupalCon which you mentioned earlier, and we’ll talk about more. And the third is the Drupal community. So, there’s some great programs that we do outside of DrupalCon, although DrupalCon’s probably the most recognized. But for drupal.org, I’ll let Tim speak to that because that’s a key area that he brings to the table.

TIM: Frankly there’s a lot to talk about. We can go on all day just about this, but the Drupal Association evolved organically about the need to support the infrastructure that the community was building. Originally, if we go back more than 10 years, drupal.org and DrupalCon were effectively volunteer-organized. People in project leadership, like Dries Buytaert and some of the key early contributors, started ad hoc, creating tools to manage the contribution system on drupal.org and gathering people together for events. And as that grew and grew it became clear that that needed to professionalize and have an organization behind it, and that was the origin in founding the association.

So now drupal.org is not only the home of the code, the home of the project, it’s also really the home of the community. It’s where we organize all of the initiatives. It’s where you can find information about local events, things like Drupal Camps. It is where we recruit new contributors into the ecosystem, and finally it’s where we promote Drupal itself to the world.

As one of the perhaps the most powerful content management system, particularly for as we like to say the most ambitious kinds of digital experiences, there’s really a lot to say about what the Drupal CMS can do. And it’s part of our role to get that word out, not just to the people who already know, but to people who might be evaluating Drupal for their needs. So, there’s a lot that we do there. And in addition to that, from an engineering perspective, there’s a lot of infrastructure that goes into supporting the project; all the testing, all the code hosting, all the management of the contribution tools. So, a lot to do there, and a lot to support the community and make sure that Drupal keeps moving forward.

IVAN: So, I think you’ve outlined good reasons and areas why someone should care about the Drupal Association. What are your roles in the Association? Heather, you’re the Executive Director. Tim, you’re the Chief Technology Officer. What are your responsibilities? Heather, why don’t you go first.

HEATHER: So we laugh, lately it depends on the day. But I would say in general, it’s a small team at the Drupal Association, and we all take on a lot of responsibility in different roles depending on the day. But if I do my role correctly at the end of the day, I’m an ultimate advocate for Drupal specifically, and open source in general. So, what I try to do on a daily basis is take the vision and strategy from the Board of Directors, from input we get from the community, from working closely with Dries himself, and translate that into operational perspective from the Drupal Association. So, how do we take that long-term strategy and put that into action in both supporting the open source community as a whole, our Drupal community specifically, and then how do we move the project forward?

So, it’s a very interesting role, made not less interesting by the timing, as you mentioned, of mine coming on and a lot of events. But what I think is interesting is we constantly have the opportunity to innovate, and I know we’ll talk about that in a few minutes. But we have to look at what’s the upside from an innovation standpoint. So, that’s what we’re trying to do right now.

TIM: Yeah, and for myself acting as the Chief Technology Officer for the Association, I do a combination of very concrete work to manage the engineering team here. So, there are only four of us the engineering team on the Association side, and we do the support, the care and feeding for drupal.org itself, maintaining that site, making sure it’s up. We ensure that the Drupal CI testing system is there to provide test coverage for all the contributions that come into the project.

And we build all of the kinds of features and support for other program areas within the Association. So, for example, the engineering side of the DA is involved in figuring out our platform to do DrupalCon Global and to enable us to have a virtual version of DrupalCon. So, there’s a lot of different areas there.

I think one of the things that’s often not well understood about the Drupal Association, especially for people who are new to the community, is the DA isn’t a top down leader of the development of Drupal itself. Drupal is built by the community. It’s built by a group of initiative leads and core maintainers and community contributors. So, what we say about our work is, rather than building Drupal directly, We build the tools that enable the community to build Drupal. And that’s really my role and our role.

IVAN: That’s a really nice description of the fact that the community is actually building Drupal, and that you’re almost just facilitating it right with the tools?

TIM: Yeah, in many ways that’s our focus. Every time we can make an improvement to the tools that we provide, that can accelerate what the community does. It can enable them to do that work faster to ensure those contributions are performance and compatible with the rest of the existing code base, and to increase the pace of innovation in Drupal.

IVAN: And there’s so much work to be done there. It’s just amazing that a team of four can be doing that on such a global scale. I commend you. It’s just so wonderful to see. Jeff Robbins has often referred to the role of leading a small company or a big company and the role of CEO, as the Chief Paranoia Officer, and [laughing] I find myself in that position a lot, even more so lately. Do we have a particular person who’s the paranoia officer, the CPO right now, or is it kind of everyone at the DA?

HEATHER: If I’m doing it correctly I’m absorbing some of the paranoia on behalf of the team. The way I’ve tried to navigate is I try to take on a lot of the worry and look at all the worst case scenarios and then figure out what we can do, and then come back to the team and put plans together. So, Tim [laughing] may have another version of that, but I hope that I’m absorbing some so the team doesn’t feel quite as impacted.

TIM:  I think it’s absolutely true. And the truth is the Association, for better or worse, is not necessarily a stranger to crisis. Way, way back in the very beginning, the first shared host that drupal.org used kind of melted down, and there was a call by Dries to get donations for a server. We had a financial entrenchment about three and a half, four years ago. It’s not that there aren’t ups and downs. One thing I really appreciate about having Heather onboard for this last year though is she does exactly as she says. She’s done a very good job of focusing on how to execute to ensure that regardless of the completely unpredictable world of circumstances, we’re still able to move forward and deliver what we can for the community.

IVAN: Let’s talk about DrupalCon Minneapolis a little bit. You guys actually announced this two years ago. It was kind of the first time that the Association announced not only next year’s, like the following year's location of the North America conference, but also two years in advance. You guys have been planning this DrupalCon for awhile. So, making the pivot to online is not a minor feat. Let’s talk about the different scenarios that you were considering early on when this first came to light that there was going to have to be a change here. And how did you come to the decision that you did?

HEATHER: I can tell you we’ve run just about every scenario possible, but both from an execution and financial standpoint. We looked at what was the path early on of moving forward and what would that look and feel like and it became clear that was not an option. So, then we looked at that cancellation. There’s a theory that contracts have force majeure and everything’s okay in a pandemic, and legally that doesn’t always work out. So, we had contracts we were still locked into.

From an economic perspective, of course everybody involved wanted things to move forward because there’s so much economic impact from a conference in a city like Minneapolis. And so it has a much broader reach than just us and our attendees. So, there was some good faith efforts. Cancellation early on was not a choice, and even long-term not even a choice, because it would’ve left such a void between money that had already been spent and the lack of net revenue that we needed to move the Association forward.

We looked at cancelling and moving tickets to honoring them in 2021, but that ended up having a short-term positive effect and a long-term negative effect, where we would’ve landed in an emergency funding situation next year instead of this year. So, what we decided we needed to do was to pivot to online, and that was because two reasons. We knew that we needed a mechanism from a funding perspective. We looked at the gap and we said, Okay, we can’t raise all this through sheer fundraising, or we don’t think we can raise it also through just a virtual conference, so we’re going to need a combination there. So, we decided to move to the online virtual conference.

The other piece is, we remain dedicated to pulling the community together. I think it’s not just a financial issue for us, it’s a community issue. And we were highly disappointed that we couldn’t be together and execute on DrupalCon which, while it’s a fundraiser, is every bit as much if not more mission-centric program for us. So, it was important for us to develop an alternative that not only helped from a financial situation, but that met the community need. And I think while it is going to be a journey for us between now and July to make that happen, we feel good about the fact that we have a mechanism to bring the community together and excited about the idea that we have global.

IVAN: Any thoughts Tim?

TIM: Yeah. I would certainly agree with that. There were some more elements. As you mentioned earlier, I was briefly the interim Executive Director while we were in the search process in finding Heather to bring her on board. And, during that period is when we were making some decisions about announcing DrupalCon Minneapolis and the next events early, doing some contracting in advance with other events. It’s a little unfortunate in retrospect. We were so pleased with ourselves, patting ourselves on the back for securing these contracts in advance, getting some discounts for multi-year advance agreements, all these sorts of things we thought were going to make the next four years of DrupalCon a total shoe in, a really, really successful sort of thing.

And now we’ve had to think about how that changes. And, it’s not clear that even after this COVID crisis resolves, if we can say that it’ll even do that. But even after things return to some semblance of normal, it’s not clear that events will be the same, that they may change moving forward. So, it’ll be interesting to see how this pivot to virtual for this first DrupalCon affects what we do in the following years as well.

IVAN: How is it working with local governments and counties and companies in the Twin Cities region?

HEATHER: Minneapolis has definitely done everything they can to help us. I think where everybody met some challenges is, in lieu of governmental dictation, some of the contracts are hard to negate. And so, everybody was really good about working with each other, but we all had very similar constraints in trying to make things work.

The nice thing is we all landed in a place where we were able to significantly reduce our liability, and in a perfect world we would’ve been able to keep those contracts intact and bring money into the Minneapolis area. But it just wasn’t going to be safe to have attendees there. I think everybody was as nice as they could be. Everyone was very stressed out. It’s a tough time for the event industry on the other side of this as well, and it definitely has an economic impact when you don’t have big events coming to your local cities. And so, we’re very aware that this has an extenuating impact beyond just our circumstances as well. So, we appreciate everybody that worked with us to get here, even though it was really stressful for everybody involved. But we ended up where we needed to be.

TIM: I would add that the community itself, of course for those that don’t know, whenever we’re looking to put on a DrupalCon, we’re always looking for champions of the local region right, the local Drupal community of that city to come together with us and help us. First of all find the parts of the city that we want to highlight to the community, the usually international community that we’re bringing to that place, and also just to help us in organizing the event and selecting the program and finding speakers and all those sorts of things.

And from that point of view, I think the local Minneapolis crowd was one of the most engaged and dedicated and helpful that we’ve worked with for many years going back to all sorts of these DrupalCon events. The excitement was really high, and at the same time I know that they must’ve been, and are, hugely disappointed that we weren’t able to make it happen, they’ve been very graceful about understanding the change we needed to make, so that’s been helpful. It makes it easier for us to make the hard decisions and do the things we need to do in the community and the local region is so understanding and so helpful.

HEATHER: Absolutely.

IVAN: And I think we’re eternal optimists, so hopefully one day we’ll see DrupalCon back in Minneapolis for the conference that we were hoping it would be.

TIM: I would love that.

HEATHER: I hope so. I was very excited about coming to Minneapolis. I’ve never been. So, I would like to visit and I would like to go to Paisley Park. That was on my list of to dos. So, I’ll be back regardless. [laughing]

IVAN: [laughing] Yeah, the biggest joke and concern we had in Minneapolis was, [laughing] what happens if it snows? Because we’ve been known to have a snowstorm or two in the middle of May. I recall two conferences ago, I think we were coming back from Nashville, and I was stuck at the airport, because there was a snowstorm in Minneapolis, and we couldn’t leave Nashville [laughing] to come back home, so it’s definitely possible.

TIM: Oh my gosh.

IVAN: Yeah. Okay, let’s talk about DrupalCon Global. It’s not like all the planning’s done and you flip a switch and all of a sudden, Yeah, let’s go online. Tell me about the event, when it is. And then what about it is the same? What’s different? What are your thoughts going into it? What are you planning? Besides the people, what's new?

HEATHER: So, you’re exactly right. There was no playbook we were hiding for in the event of a pandemic. This is the DrupalCon Global event playbook. So we definitely had to pivot quickly. And I’ll give huge kudos to our Drupal Association team and our Board of Directors for huddling quickly and figuring out what we could do and what we could do well. Tim can speak to the technology pieces of it that we have to nail down, but I think we really sat down as a team and said, Okay, how can we bring the spirit of DrupalCon through a virtual experience, and how can we make this really impactful for people?

Where I think we have some exciting innovation opportunity is it is virtual. So, what are things that we can add to the mix? What are ways that exist now where people can connect virtually? There’s a lot of interesting platforms out there. Some that existed before, a lot that are springing up now, since we are definitely not the only virtual conference pivot that’s happening in 2020. We can’t be together physically, but how do we create a hallway tract? How do we facilitate networking? How do we highlight sponsors? How do we shift so that we’ve got this really great content library of knowledge and speaking engagements, and how do we use the best of peoples’ time so that it’s really interactive?

So, we’re looking at how do we let people have Q&A’s and interaction with the speakers and not just listening to a speaker do their presentation. So, I think we’re going to learn a lot through this, but quite frankly, we may translate to an in-person event in the future, and then my gut tells me that there will be some aspect of online DrupalCon in some form or fashion from this point forward. So, I think we’re going to learn a lot as we go.

IVAN: How do you do BOFs online? Come on.

TIM: No, it’s so tricky. Oh my gosh, it’s really interesting. That’s one of the things that I think has been interesting about this whole process, because obviously your first reaction to, Oh, the whole world is in crisis. Things are falling apart. You kind of clench up in a state of fear, and start thinking conservatively about, How do we just lift and shift an in-person event to a virtual event?

But I think very quickly we realized that that’s not the right approach. We have to understand that human interaction in a virtual context is fundamentally different. So, in order to create the same kind of connections between people, we need to make sure that we’re providing new sorts of tools and opportunities to make that happen. I think, I don’t know, I’ve been to something like 10 DrupalCons or something like that, and for me, one of the most powerful moments of any DrupalCon is not just the incredible information that comes from the formal program, from the actual speakers and the different events within the conference, but it’s the fact that you can find yourself sitting next to someone at the end of a session and get into this conversation about the topic. Develop this new connection to another person and then maintain that connection when you go back offline, whether it’s on drupal.org, through Drupal Slack, or just the next time you see each other at a DrupalCon. And we really wanted that to be possible, to be the case for this global event.

Plus, we’ve been saying the word over and over, we’re calling it DrupalCon Global for a reason. The opportunity of being virtual is that we can bring in people from all over the world. And there’s time zone considerations of course, but it’s a chance to have a group of people together that maybe couldn’t go to DrupalCon before. And so there’s an opportunity here really for some fresh interaction and fresh connections and new types of connections to be forged between people who attend.

Once we really started thinking about those opportunities on a conceptual level, we started asking ourselves, How do we execute that? What’s the difference between what happens at DrupalCon and just watching the sessions on YouTube after the event? What makes the difference? So, we’re looking at platforms that let you have that kind of round table experience of being in a BOF, but have these breakout session tools.

We’re looking at platforms that can simulate what it’s like to be in the contribution room, where you can select a virtual table to join for whatever kind of initiative you’re working on on contribution day. There’s some creative things that we’re looking at there. And in particular we’re trying to find ways to encourage people to be active participants in the event, and not just passively receiving. This shouldn’t be just an extension of the quarantine Netflix binging [laughing] that we’re all doing these days. It should be a conference.

HEATHER: It’s not distance learning, right?

TIM: Exactly. I think it’s going to be really cool. We’re still narrowing down all the technical details. We’re running demos of all sorts of platforms and tools, but we’re really going to try and focus on that, and I think people will find that it’s going to be a kind of unique experience. Hopefully we’re going to move that idea of passive consumption into active participation.

IVAN: I love that idea of actually flipping it on its head and making the audience more involved and be more active as opposed to passive. I think that’s definitely where the value of networking and the value of being in person is so high. And just for the record, for our listeners who have heard us refer to BOFs, birds of a feather, they’re interactive, not like a session, but group discussion almost, where there’s a topic that’s picked and everyone who is interested in that topic gets together in a room and talks about what problems they have, what successes they have, and so on and so forth. So, for those of you listening and heard us refer to BOFs, that’s what they are.

DrupalCon’s a significant milestone for the Drupal Association from a financial perspective, isn’t it? We talked about some of the numbers earlier. Can you guys give me an idea of what the budgets are that we’re looking at, and what kind of a shortfall are we talking about that we’re trying to fill in?

HEATHER: So, when we looked at the initial shortfall, both from a traditional DrupalCon plus some other economic impact on the Association because of COVID-19, we were looking at almost a million dollars of net revenue impact. Sixty percent of our total funding comes from DrupalCon, not because it’s a best practice, we’d like for it to be more of a third of our budget, and that’s where we’re headed strategically. We just haven’t had time to get there. So, it used to be 100 percent, so kudos to everyone that came before me.

IVAN: Yeah, making progress.

HEATHER: Yeah, [laughing] so everyone that came before me has done a lot of work to get us where we are, and we continue to do work. And so, we’re trying to develop obviously some revenue diversification, but you can’t do that in just a matter of months with this kind of impact. So, we looked at that net revenue impact and we said, Okay, there’s kind of two buckets to it. One is that emergency funding piece where we spawned the DrupalCares Campaign, and then the other piece is revenue that we can bring in through this virtual conference, DrupalCon Global.

So, between those two things, the Drupal Cares Campaign has gone exceedingly well, and so we’re hoping that the virtual conference has a similar level of success, so that we can pivot and move forward from a secure perspective. `We’re not naive enough to think that events will always be the same moving forward, so we are being very strategic internally about how can we be smart about what might be around the bend that we don’t know.

It’s hard to replace 60 percent of your income overnight. But we continue to do that through programs and services offered by the DA. And quite frankly, what we’ve seen through the DrupalCares fundraising program is when more people become members, when current members upgrade their membership, and when those that use drupal.org donate to the Drupal Association, that’s the kind of sustainable funding that makes this revenue diversification less of an issue moving forward. So there are ways that we can do this over time, and we’ve seen it be successful over the past month.

TIM: I would add to that, there’s another key area that I think frankly folks like you at TEN7 and others throughout the ecosystem can help us with. Just because of the scope and scale of the COVID situation even Drupal end users, who are not particularly connected to our community, are beginning to become aware of the importance of the Association, and how it feeds and sustains the Drupal project and how that could be important. We didn’t really mention this earlier, but not only is the Drupal Association being affected by the COVID pandemic, Drupal’s also being used in the fight against COVID and to try and manage it. So, it’s used by the National Institutes of Health and the CDC and Oxfam and Doctors without Borders. It’s being used all over the world to support that people's efforts. And the DrupalCares fundraiser, among those things, has given us an opportunity to try and reach out to those end user organizations, because for my money that’s I think where we’re going to find a lot of opportunity for future sustainability. And so, for folks out there listening, helping us get the word out to those users of Drupal about the importance of supporting the DA and becoming part of our community is going to be really impactful.

IVAN: Yeah, you forget that there are users of Drupal who are actually fighting against COVID, and that’s so important to bring to the surface and to remind people. So I’m glad to hear that that’s something that’s been a focus for you as well. In a nutshell, can you guys describe exactly what DrupalCares is? I think the three of us know what it is. For those who are listening who maybe don’t have an idea, what’s the elevator pitch on what DrupalCares is?

HEATHER: So, DrupalCares is the name that we gave our emergency fundraising campaign that launched toward the end of March. And the goal was, as it sounds like from an emergency funding perspective. What became clear to me though I’ve only been here just around a year, is that this was not a crisis we would solve internally. This is a crisis that the community would help us join together and solve. And so, this was the way for us to reach out to the community to say, Here’s where we are. Here’s what we need to accomplish. Now let’s do this together!

And the community rallied and answered that call in a way that proves out everything I’ve heard about the Drupal community and my time here, and even quite frankly, during the recruitment process about how wonderful this community was. It’s true, no one lied to me. It’s exciting. [laughing] Yay!

IVAN: And what was the goal for DrupalCares?

HEATHER: The goal was to raise $500,000 which seemed doable, so really ways that people could participate in that. There was something for everyone as they say. So, new memberships and upgraded memberships counted toward that goal. Cash donations, which we had over 1,000 individuals just donate cash toward DrupalCares. We had DrupalCon existing sponsors that agreed to leave their dollars intact as we figured out what was coming next. We have organizations that donated cash. We had large individual donors. So, all of those things came together to actually help us meet that $500,000 goal, and we met it almost a month in advance of the original deadline, which was the end of May. So, this has been amazing to witness. It proves the strength of not only Drupal as an ecosystem, but the strength of our community, how quickly the businesses came together to make this work.

Dries (Buytaert), our project founder, and his wife, did an initial $100K matching campaign, so that every dollar that came in was matched. And then we had a group of Drupal businesses that came together and did the same, so that all of the impact was tripled. We met the goal! We have a great story to tell! And now we can really focus on DrupalCon Global and all the other things we do at the Association. So, the campaign was a huge success and very heartwarming for all of us involved. We’re glad to ring the bell on that one.

IVAN: How exciting. How terribly exciting that we’re able to reach the goal like that. That’s just wonderful. What else are we excited about besides DrupalCon Global? What are you looking forward to? Is it Drupal 9? Is it something else? I know I’m excited about Drupal 9. I’m excited to tell clients that it’s not going to be a big deal to upgrade, that they’re not even going to notice in most cases. That’s exciting for me in addition to the new features and the new things that it brings. But tell us about what you guys are excited about.

TIM: I can nerd out about this topic for hours, so [laughing] I’m going to jump into this one a little bit. So, of course we’re excited about the release of Drupal 9, just as a milestone for the community. So, that’s a really big deal. But as you say, and what folks out there maybe don’t quite understand yet, is Drupal 9 is the culmination of a huge amount of work over the course of about the last five years, over the entire Drupal 8 cycle, to realize a vision of a Drupal 8 software that receives continuous innovation, six-month feature releases on a regular basis, and that has an easy upgrade between major versions. The days of having to basically do a replatforming, a complete migration to go from one major version of Drupal to another are over, and we’re close enough now to the release to realize that, Yes, we’ve achieved that. We’ve actually reached that point. And that’s phenomenally exciting.

IVAN: [applause] That’s awesome.

TIM: Yeah, it’s just so cool. It’s wonderful to be at that point. I was here for Drupal 8. I was working at the Association during the Drupal 8 release cycle. And there’s just a night-and-day difference between what the struggle was to try and make that upgrade happen, and even just to hit the deadline for our release date back in the Drupal 8 cycle.

And so, every change that was made over the course of Drupal 8 has just brought us to a fantastic place on that front to make these updates easier and to make these initiatives and regular feature releases more impactful. There are a few things I’m particularly excited about over the horizon of what’s upcoming after 9 comes out, the 9.1, 9.2, the feature releases that are going to be coming next.

I think what I would say about what’s going to happen over the course of the lifecycle of Drupal 9 is Drupal 8’s initial development and much of its early feature releases, maybe up through 8.5 or so, were very, very heavily focused on fundamental and powerful architectural features of the software platform itself. There were a lot of the API first work, a lot of the entity management work, revisioning work, APIs for various components in Drupal, a lot of that work was a key focus in the Drupal 8 cycle, And it’s what’s made Drupal the incredibly powerful platform that it is.

I think a lot of work in Drupal 9 is actually going to be focused on empowering users who are not the most technical engineering users, to actually be able to fully take advantage of those sorts of features. So that’s going to come in several different forms, but by empowering those regular users to be able to take advantage of all those great architectural changes, is going to be, I think, the next phase both in adoption for Drupal and in really showcasing everything that it can do.

So, a few of those things include focus on automatic update initiatives for Drupal. There was some good work on the first phase last year, and the second phase work going on now and continuing into next year that will just help reduce the cost of ownership, to make it easier to keep sites secure and up to date, and there’s tremendous work going on there. There’s also work to make both the administrative interface of Drupal and the default theme for Drupal more modern, more robust with modern JavaScript workloads and things like that, but with all the same accessibility tools and everything that have always been a priority for Drupal.

I think what you’ll see is that these first several feature releases of Drupal are going to be about that layer where the regular Drupal user, the person who spends their day job in the admin interface becomes empowered to do more and more with each of those kinds of features.

IVAN: So, when are we expecting the actual release to come out? I think we were scheduled for the beginning of June. With the pandemic going on, are we still going to hit that? Let’s talk about when it’s actually coming out.

TIM: That’s also super exciting. So, I’m going to bury the lead for a moment just to build up the story, [laughing] ‘cause I’m excited about it.

IVAN: [laughing] Good. Good. Yeah, do that.

TIM: Okay, so back in Drupal 8, I don’t know, you probably remember that the Drupal 8 release cycle, I almost measured in terms of DrupalCons. I think there were probably four different DrupalCons where the community thought, Oh, this’ll be the DrupalCon where Drupal 8 comes out. And then it was like, Oh, no, we missed that one. It’s going to be the next one. And we missed that one. It’s going to be the next one. It was an angsty difficult time, and we eventually got there which is wonderful, and I think we’ve realized tremendous work since then. But that was pain we didn’t want to repeat, right?

IVAN: Right.

TIM: So, for Drupal 9, the core maintainer team established three official release windows. The idea was if we hit any of these three it would be an on-time release. So, the three candidates for release were going to be the beginning of June, August or December of this year. So, those were the three windows, and the whole idea was that we’d be very happy if we hit really any of those.

The June date was going to be the most aggressive date for sure. What I’m thrilled and slightly shocked by is, we’re going to hit the June 3rd release, so less than a month away! Drupal 9 is going to be out, and despite the pandemic and everything else, we’re going to be on time with our most aggressive and ambitious release date. So, it’s very, very exciting.

IVAN: That’s amazing. That’s just testament to the organization and all of the volunteers that have done all of the work to go into that and all the planning. And frankly the setup that’s been done in Drupal 8 to go to six-month release cycles to get into that habit and to set ourselves up for a release of Drupal 9. That’s, I would say, early not late or on time, but early.

TIM: Pretty much, yeah. Absolutely the earliest we could’ve conceived it happening. So, it’s really exciting.

IVAN: And what does the launch actually look like?

HEATHER: So, we’re working on that. [laughing] That’s part of the, Will it be on time? Surely not with everything going on. Oh, it is. Pivot again. So, part of what the Drupal Association is responsible for is, orchestrating the Drupal 9 launch. What we mean by that is putting together some of the marketing and PR planning around it as well as a toolkit that we can give to organizations. In particular Drupal businesses, so that they can promote it amongst their current and potential clients. And so, we’re putting that toolkit together now.

We have a draft press release that we’re going to get out to all the stakeholders very soon, so they have time to do translations and to build their press list, so that we can make this truly a global effort. But, we normally would’ve had a big splash in Minneapolis going into this, so we’ve got to find ways virtually to do it, which the community’s helping us organize some of those celebrations. But, we’ve got a lot of the marketing/PR effort on our side that we’re working on right now and should have some things coming out shortly. And Tim, I know you’ve got some more information from the community as well.

TIM: Yeah. Back during the Drupal 8 cycle again. We did this celebrate D8#endcampaign, and a lot of the people in the community who were involved in organizing that effort, are working together through the Drupal community Slack to set up a celebration for Drupal 9. And that’s going to be a way, so that on the release day global communities can have virtual celebrations about the release, and that’s going to be really exciting. I think that handles a lot of the internal side, but I think a lot of the efforts that Heather is talking about are really critical for the external perception of this release, and what it’s going to mean to the larger open source community and the technology community in general.

Major releases of Drupal are typically our opportunity to reintroduce Drupal to a wider audience. Our minor feature releases, even though they often have some really powerful new tools, don’t necessarily get the press coverage in the broader technology media that the major releases do, and we really want to make sure to capitalize on that. And so, that’s why this international translated press effort is underway, new landing pages with all the highlights about Drupal 9 are being built, all of those sorts of things. So, I think we’re really excited about that. And then, at the same time, we want to build that into momentum. I think it’s going to be a story that’s not about, Oh, we build up, we build up. June 3 is a big hooray, rah, rah, rah. And then we’re done. I think we’re going to need to be telling that story over the course of really a year or more about what it means, because we’ll have a lot of people who are then beginning their upgrade process.

We’ll have the feature releases starting to come out. We’re really going to need to share and tell that story. So, that’s going to be really important. And, we’re going to need to continue to innovate. So, Dries just published The Drupal Product Survey for 2020.

IVAN: I was just about to ask you about that.

TIM: Yeah, so that just went live. You can find it in the announcement banner on drupal.org or you can find it on Dries’ blog which is very easy to find dri.es, probably one of the shortest domain names on the web today.

IVAN: That’s wonderful.

TIM: So, I’m kind of jealous [laughing] but anyway, that product survey is something that’s been done annually, but especially around the time of a new major release. It’s a really powerful tool for end users, Drupal businesses, anybody in the community to actually have an influence on what comes next. So, I said earlier that I think one of the primary focuses is probably going to be on empowering users to use those low level tools that have been built in recent versions, to create better user experience to access all of those tools. But I think there’s other opportunities, and the survey is a great way to get that word out to the Drupal project leadership about what’s coming next.

IVAN: So, the Drupal Product Survey is currently listed on Dries'  website. We will link to it from the show notes. Go ahead and take that survey. It gives the community an opportunity to weigh in on the strategic direction of the project, and I think that’s just so valuable to do. Thank you for mentioning all of those things.

I want to say something about the new logo for Drupal 9. It’s so cool. [laughing] I love it. I love that it’s being unified across the brand. That work that SIX ELEVEN has done has just been so refreshing and evolutionary. It’s just lovely to see this is happening. Tell me about the new logo. Why do we need to unify across the brand and are we going to see a new logo for Drupal 10? What’s the thought process behind this?

HEATHER: So it’s interesting. There is not an intent to have a new logo for Drupal 10. Tim and I have been closely involved in this. There was a conversation both from key members of the community and internally at the Drupal Association that we wanted to establish what we call an evergreen logo. So, instead of being tied to versions, which if you’re thinking about most of the software and technology that you use, you’re not even aware of what version you’re using, you just know you’re using it. So, we want people to know they’re using Drupal and be less concerned about the version. So we think an evergreen logo is going to help us with that.

It’s going to help us from a marketing and PR perspective as well. A lot of the input that I get from community leaders in our business community is that we need more brand recognition. We need stronger branding in the technology community in general. And so when you have people spinning up different versions of logo, and you’ve got those all over the world, it’s hard to create that brand consistency. So, we’re hoping this evergreen logo will do that. And then it was important to us to really look at it and say, Given that Drupal the product and project, the Drupal Association and DrupalCon are all really tied together, it’s part of the same ecosystem. And so I really wanted to make sure and luckily the team agreed, and SIX ELEVEN did a great job pulling this together, about let’s make sure that that tie in is obvious.

I think we learned a lot through this DrupalCares campaign, that we can do a better job telling the Drupal Association story, and our tie to the Drupal project–that we’re not at arms length from what happens with Drupal from a technical perspective–that we’re more a part of that ecosystem in a big important way. And so we wanted to make sure that it was obvious that all those three things were together. And so, I like the logo, I’m glad you like it too.

SIX ELEVEN did great work. They stepped in as a really strategic partner at a time where we not only needed creativity in what they produced, but creativity in what they would expect from an expense perspective. So, knowing that we were having a bit of a financial crisis, they really stepped up and stepped in in a major way and created something that I’m really proud of, and to your point about will there be a new D10, the idea is no.

Tim’s been really involved in this too from the very beginning and has some thoughts on it. But I’m really excited that it’s out there. I think it’s yet another thing that I’m proud of the team and the community for coming together and getting done where we could’ve easily said, You know, there’s too much going on. Let’s put this off. But I really wanted to make a push to have these major products move forward.

TIM: Yeah, I would just add a few small things to that, which is just that the evergreen sense of the logo, that notion that we don’t need to change the brand identity for Drupal with major versions, ties exactly into what we’ve been saying about Drupal 9 and it’s upgrade path. The upgrade from Drupal 8 to Drupal 9 is going to be as easy as a minor version update. There’s huge progress in the contribution ecosystem already to make the modules that everybody uses compatible with Drupal 9. Even before Drupal 9’s release, something like 40 percent of the top 200 modules are already compatible, huge amounts of other modules are compatible, we’ve got new automated tools. It’s just much easier to make this transition, and that’s going to be true from 9 to 10 as well.

My understanding from the core maintainers is that this commitment to this upgrade cycle is not a one off from Drupal 8 to Drupal 9. This is going to be true moving forward. So the Drupal 9 to 10 release should be just as easy, if not easier, since we’ll have more time to even further refine these tools and the strategy of doing things. And so, if that’s really our goal, if that’s what we’re saying is important in part of the Drupal development process, that should be reflected by our brand and reflected by our logo. And I think that’s where we landed. I’m really proud of that work as well.

IVAN: I’m proud of it as well. You guys have done a wonderful job of rolling it out as well and showing off the brand and using it, and I think it’s only going to get better from here on in. And I love the word evergreen. It’s just so true that that’s what the logo is intended to be. I wonder if we’ll ever stop using version numbers and just refer to Drupal as the product?

Just like you mentioned, Heather, I don’t think some clients in the business world really care about the version number. In most cases I think it brings angst and concern about the cost of an upgrade for example. So, if we make that upgrade easy, do we consider not even using version numbers?

TIM: You know, I think we’re moving in that direction. I think that the current set of brand tools offers both a version with a much smaller and de-emphasized version number and a version without it at all. And I think increasingly we’ll start to see that non-versioned identity come to the floor. I think right now the lead up to this change and the sense of Drupal 9 being a milestone is still important to people, because it is the culmination of that promise, it is the realization of, Oh yes, we said it was going to be easy, and it actually is. So, I think there’s this sense that we still need to acknowledge that 9 represents that milestone, but going beyond that I think that becomes less important, and hopefully we can realize that with this change.

IVAN: Wonderful. It’s been really awesome talking to you both. I can’t believe it’s been almost an hour. [laughing]. It’s been great having you on the show. Anything you guys want to say in closing before we wrap it up here?

HEATHER: I want to take this opportunity to thank everybody in the Drupal community, whether you’re an individual or an organization or a camp or a local association. Everybody really came together in this time of need and made it possible for us to not only execute on the DrupalCares campaign, but the support around pivoting to DrupalCon Global, the Drupal 9 launch, the new logo. All these things are happening, and we’re committed as a team to pushing forwarding and to doing good things with your investment. And we’re developing strategic plans right now at the Board of Directors level where we’re looking to do even more.

So, I think folks from DrupalCon Amsterdam heard us launch that we’re working on ways to continue removing barriers to make contribution easier. I’m looking at how we increase brand awareness and adoption of Drupal so that we can satisfy the needs of our Drupal business community. We’re looking at further development of security products around Drupal and enhancing our member and volunteer programs, and also looking at diversity, equity and inclusion programming. So, those are all things we’re committed to. COVID or not, that we’re going to create and push out to the community, and not only for the community itself, but to make Drupal an even stronger product.

IVAN: Rock on.

TIM: Anybody out there who’s listening who represents an end-user organization of Drupal, understand that you’re part of our community, come join us. Come participate with us. Find ways to get involved. You can reach out to us at the Association, or you can simply go to drupal.org and find the community where they are. But we’d love to bring you in closer and have you be part of the future of Drupal. So, we hope you’ll join us.

IVAN: Wonderful. Thank you so much, both of you, for spending your time with me today. It’s been a great pleasure talking with you.

HEATHER: Thank you for the opportunity. This was fun.

TIM: Yeah, thanks for having us. This was really great.

IVAN: Heather Rocker is the Global Executive Director of the Drupal Association, and Tim Lehnen is the Chief Technology Officer of the Drupal Association. You can find Heather on Twitter as @hsrocker and Tim is @hestenet. And I’m not sure that i said that right, but it’ll be in the show notes. [laughing] For more information about the Drupal Association, visit drupal.org/association, and don’t forget that you can make a contribution to the DA to sustain it through this pandemic and the devastating effects that COVID-19 is having. Just visit drupal.org/cares.

You’ve been listening to the TEN7 Podcast. Find us online at ten7.com/podcast. And if you have a second, do send us a message. We love hearing from you. Our email address is [email protected]. Until next time, this is Ivan Stegic. Thank you for listening.

May 20 2020
May 20

Peter OroszvariContinuing our short series of articles highlighting ways that the Drupal software and its community are building solutions to help combat the effect of COVID-19, today we hear from Peter Oroszvari of Cheppers. Here, he describes their project at the Mayor’s Office of the 15th District of Budapest, Hungary.

The coronavirus pandemic triggered a critical situation in Hungary that forced local government authorities to move fast in the digitalization of services. Cheppers, a Drupal-focused development company has already been working with local governments on e-government solutions, supporting authorities in their digital transformation. 

As the Hungarian government ordered restrictions on free movement in March 2020, organizing care for the elderly and persons in need became the responsibility of local authorities. The Mayor’s Office of Budapest’s 15th District called upon Cheppers to build a mobile application and website that serves as a platform for locals in difficult situations to ask for help from the Mayor’s Office, while supporting the Office in tracking requests filed through various platforms. A Drupal-based solution seemed fitting for three reasons:

  • A Drupal-based backend simultaneously provides content for various end points while operating as a suitable platform to store incoming requests. 
  • Compliance with personal data security measures is a key requirement in the public sector. As Drupal conforms to the OWASP standards, its application guarantees the prevention of hazards to citizens’ personal data. 
  • Fast response to the challenges triggered by the pandemic was essential. Thus speed was one of the main reasons we built the Covid Helper tool in Drupal: the website and the first version of the mobile app was ready in less than 3 weeks using Drupal Contribution and core functionalities. 

Covid Helper registered more than 100 requests and 1000 visitors per day right after its release. As the pandemic evolved, the District Mayor’s Office came back with a demand for extended functionalities: version 2 allows for the registration of volunteer helpers, reducing pressure on the District Mayor’s Office. 

screenshot

Due to the severe economic crisis triggered by the pandemic, many of the requests registered on the platform were applications for financial aid. This induced the digitalization of the financial aid application process in the District, which will be also available through the Covid Helper website. 

The District Mayor’s Office issued a marketing campaign informing citizens about the Covid Helper tool on city billboards and through an animated video.

Besides all the challenges, covid-19 does seem to have kicked off the digitalization process at government authorities and public services. Tools developed to solve the current situation may be the source of best practices to create an effective e-government system in the near future. 
 

May 20 2020
May 20

Drupal has witnessed a healthy growth over these years, with ample scope to expedite this growth. One way to achieve this is via a tool that makes the site creator’s life easy. A CMS platform should invariably be extremely user friendly and easy in maintaining as well as building. The wait is over! Cohesion DX8 is a site builder tool which allows a site maintainer/site configurator to create/maintain the site with low coding and more configuration.

Benefits of Cohesion 

  1. Low code 
  2. Highly configurable
  3. Easy maintainable
  4. Easily modifiable 
  5. Highly scalable
  6. Component-based driven
  7. Less developer dependent

Cohesion

Cohesion DX8 provides a contributed module and theme which needs to be installed in Drupal, quite similar to the way we install other modules and themes. However, to use this service, it is required to purchase a cohesion package that provides us with an API Key, Agency Key, Site ID, and an API Server URL which needs to be inserted in the Account Settings form.

Cohesion DX8

Here are the settings and key features of Cohesion DX8:

  1. Website Settings
  2. Style Settings
  3. Components
  4. Templates

Cohesion DX8 provides an in-site configuration form which takes care of your branding requirements. You can add your own branding elements like fonts, colours, icons, grid settings, SCSS variables, etc. directly onto the site. And there is absolutely no need to make any changes in the theme folder as well as the theme settings. Doesn’t this sound cool! Your basic frontend settings would be handy to you and you can modify it directly from the site without asking for help from a developer.

Website Settings

Cohesion DX8

Style Settings

It’s not over yet, with Cohesion DX8 you can create/modify styles of a site. Cohesion DX8 provides settings to update the base style or to create custom styles. 

Cohesion DX8

And this is how the default preview and configuration pane looks like.

[embedded content]

Now let’s understand what comes under Base styling and Custom styling

Base styling - Styling which is going to be consistent throughout the site, e.g., font-size of body. Font formatting of Headings, Style of a button, style of link, etc.

Custom styling - Styling which will be different for each instance or as a variation of base style. E.g., Big button, Small button, Read More Link, Consistent layout related styles (Padding Top & Bottom Large, Padding Top & Bottom Small), Social icons theming, etc.

Let’s look at the example of CTA link styling.

  • CTA style structure
    • Link styling
    • After pseudo-element styling
    • On hover pseudo-element styling
  • Style properties required for CTA link and those properties are added in the config form through properties button on the top right corner of the styling pane
  • Styling properties required for pseudo-element styling
  • Styling properties required for pseudo-element after hover

COHESION DX8

COHESION DX8

cohesion DX8

Component Builder

Now let’s introduce the coolest feature of the Cohesion Dx8 -  a Component Builder. Cohesion Dx8 follows a complete component-based development approach. So, what is the component-based development approach? 

Cohesion Dx8 provides a list of elements. By using these elements even simple and complex components can be created and be made configurable by creating a component form. The amazing part is that everything can be built by mere drag and drop. Doesn’t it sound super user friendly?

Let’s look at an example of a Hero Component and figure out which elements could be part of this component?  Let’s create a list of elements(atoms).

  • Hero Image
  • Hero Title
  • Hero Description
  • CTA button

Let’s consider the below-displayed hero component that we are trying to achieve.

Cohesion dx8

Based on the Hero component design, the hero component structure would look similar as described in the below image.

Cohesion DX8

A component will be created which will have the above-mentioned elements. But what about styling? This is the real beauty of Cohesion Dx8. It allows us to create a base style as well as a custom style and those can be appended to the component. Doesn’t it sound fascinating?

Here would like to take you back to the styling part of the section where we have styled CTA link. Now, here in the above component CTA link element can directly assign the style which has been created under custom style. And as per image, styling can be appended to CTA Link element.

COHESION DX8

Layout

There are multiple ways to create different layouts. Here, with Cohesion DX8, the layout can be defined by a Layout Category component and also component dropzone element can be provided to add other components. 

Does it mean? Woah! Yes, it means nesting use of the component is also possible. I won’t provide the screenshot for this example right now.

Template

There are four main templates:

  • Master Template
  • Content Template
  • Views Template
  • Menu Template

The template names clearly state the use of each template, but, I am sure you must have some questions related to master templates. 

What will it hold? The thumb rule is, this template should be least modifiable, means, it should not be updated frequently. We can ensure this by using only consistent section/components/regions added to it.

I hope this blog was helpful to understand the basic outline of Cohesion Dx8. Stay tuned! We have an upcoming blog that will talk about the advanced usage of templates. 

May 20 2020
May 20

I recently finished porting this website from a static site generator to Drupal 8, meaning that this site has now been powered by three different major versions of Drupal (6, 7 and 8) as well as by two static site generators since it was first launched in early 2010.

The majority of the content was imported using migrations from JSON feeds that I created. This included:

  • Blog tags
  • Blog posts
  • Talks
  • Redirects

In some follow-up posts, I'll be looking at each migration separately, describing any issues and look at how it was used to import its respective content.

I'll update this post with the links to the follow-up posts, and they are also available from the blog series' page.

May 19 2020
May 19

How amazing does it feel when you walk into a coffee shop and the barista greets you by name and asks if you’d like the usual? Or when you meet someone you haven’t seen in a long time and they ask about some obscure and specific hobby you once mentioned you had?

These personalized experiences give you the warm and fuzzies. You typically come away from those interactions a fan of the place or person. Heck, if someone were to criticize them, you’d speak up that that's not your experience. And you wouldn’t hesitate to recommend that place or person to others.

At an event a few years ago, I noticed someone who seemed a little hesitant. I introduced myself and invited them to join me at my table, and we chatted a little. We never spoke much after that. But on multiple occasions over the past few years, that person has given me a glowing reference when I came up in conversation. 

Personalization makes us feel valued and understood. And that's how you want your customers to feel. Because if they do, they will buy more and advocate for your brand.

Personalized Marketing Options to Consider

Broadly speaking, there are two ways to do web personalization: with real-time data or historical data.

Real-time data involves using location data to serve up a specific site, content, or offer. Here are a few examples:

  • Using device type or operating system to either manage how content is displayed or make assumptions on product needs
  • Using traffic source to tailor content (i.e., looking at when and what the user came from)
  • Basing promotions on products or services that have proven popular with others

Historical data goes deeper. This involves presenting personalized content, products, or offers based on users' previous interactions. You could look at factors like:

  • The number of orders they made
  • Their average order size
  • The total amount they spent
  • The products they looked at
  • The carts they abandoned
  • The time that has elapsed since their last transaction and/or visit

The options are as vast as the data you have collected. But through segmentation and rules, you can greatly increase the user's odds of converting.

Why You Need to Tread Carefully

Many consumers are becoming increasingly concerned about privacy and data management. You need to ensure that the personalization you supply is helping them in making a conversion decision and not simply showing them how much you know about them.

For instance, your barista asking if you fancy trying the new mocha latte (because they knew you had recently bought one from another brand) is much less creepy than being greeted with, "I heard you’re now into chocolate, so try this new mocha latte." The difference is small, but crucial.

Choose the Right Tools

With the overwhelming array of personalization options, it's important to work with an experienced team that can help guide you. At Acro, we love Drupal, and it can do many entry personalization functions within its platform (much more than most content management systems).

However, if you need to get very sophisticated, then you need a third-party platform. We love Acquia Lift. For features, usability and support, it is unparalleled. If you would like a personalized introduction to Acquia, hit me up and I’ll set you up, personally. 

The Bottom Line

Global research and advisory firm Gartner stated that the three key takeaways on personalization are:

  1. Consumers want to receive personalized help as they navigate the buying journey.
  2. Focusing solely on personalized recognition is potentially detrimental to a company’s commercial objectives.
  3. When it comes to help, consumers prioritize information, a simpler purchase process and saving time.1

Peronalization isn’t the ultimate goal. It’s another tool to achieve whatever your actual goal is, whether that be increased sales, increased order value, increased frequency or brand loyalty. Once you define what your goals are, you can explore if personalization will give the required ROI.

If you would like to have a conversation about your business goals and see if personalization is an appropriate tool for you, give me a call. And if not, if we ever meet out and about, you’re always welcome to sit at my table.

Click to contact one of our ecommerce consultants

1 - Source: Gartner, "Maximize the Impact of Personalization,” April 2019

May 19 2020
May 19

Bit.ly for Drupal 8 provides a rich API that other Drupal modules can use to access Bit.ly functionality. Today’s topic of discussion is on how we can integrate Bitly with Drupal 8 easily in just a few simple steps.

What are the first three reasons that come to your mind for shortening a URL? Here are mine –

  • To make more space for content to be posted on micro-blogging sites such as Twitter
  • To mask the original URL 
  • To simply reduce the length of a super-long, ugly URL

Bitly has been out go-to URL shortening service for a long time now and we love its efficacy and speed. For those of you who haven’t stumbled upon Bitly yet, Bitly is a link management platform that offers products and services on link shortening and more. It allows you to shorten URLs for your websites. 

bitly implementation in Drupal

Getting Started- Bitly Integration with Drupal 8

Bitly allows for easy integration with your Drupal 8 website. Since there are no stable modules to integrate Bitly in Drupal 8, we will learn about how to call the Bitly API and create forms to integrate it. Here are some steps to get you started with it -

Step 1 – First, you need to create a Bitly account. Go to https://bitly.com/ and create an account. You need to login to your Bitly account once you have created the account.

You will then see your Dashboard page.

Bitly Integration with Drupal

Step 2 - Next Click on top right side of the screen and go to ‘Profile Settings’

Profile settings


Go to Registered OAuth Applications -> Register New App -> Get Registration Code. 
It will send you an email for your mail id that you used to sign up.
 

Get Registration with bitly

Step 3 - Click on Complete Registration. It will take you to back to Bitly website where you have to add the below details -

complete registration


And Save this OAUTH App. Once saved, a ‘CLIENT ID’ and ‘CLIENT SECRET’ key will be generated as shown below.

OAUTH APP


Step 4 - Next, go to your browser and enter this Url :
https://bitly.com/oauth/authorize?client_id={YOUR_CLIENT_ID}&redirect_uri={YOUR_WEBSITE-URL}
Once you hit this Url, it will redirect to {YOUR_WEBSITE_URL}?code={YOUR_CODE} . Copy this code and paste it somewhere safe so it's not lost.

Step 5 – Next, you have to use POSTMAN to call the API or you can use the CURL command also. Learn more about how the Postman tool can help you with API development and testing.

The method will be POST, Url is https://api-ssl.bitly.com/oauth/access_token and parameters will be client_id, client_secret, code, redirect_uri.

Bilty API Development


When you hit this API, it will return the following –

access_token=TOKEN&login=BITLY_LOGIN&apiKey=BITLY_API_KEY
access_token - The OAuth access token for specified user
login - The end-user’s Bitly username
apiKey - The application key which will be used
This login and apiKey values should be stored and can be integrate with your Drupal modules.

Implementing the integration

Now let us learn to create a custom form for integrating with Bitly as there is no stable module for this in Drupal 8.

bitlyForm.php
<?php

namespace Drupal\bitly\Form;

use Drupal\Core\Form\ConfigFormBase;

use Drupal\Core\Form\FormStateInterface;

/**

* Class bitlyForm.

*

* @package Drupal\bitly\Form

*/
class bitlyForm extends ConfigFormBase {

 /**
  * {@inheritdoc}
  */
 protected function getEditableConfigNames() {
return ['bitly.shorten_url'];
}
 /**
  * {@inheritdoc}
  */
 public function getFormId() {
 return 'bitly_shorten_url_configuration_form';
 }
 /**
  * {@inheritdoc}
  */
 public function buildForm(array $form, FormStateInterface $form_state) {
  $config = $this->config('bitly.shorten_url');
   $form['configuration'] = [
     '#type' => 'fieldset',
     '#title' => $this->t('Configuration'),
   ];
   $form['configuration']['login_name'] = [
     '#type' => 'textfield',
     '#title' => $this->t('Login Name'),
     '#default_value' => $config->get('login_name'),
     '#required' => TRUE,
   ];
   $form['configuration']['app_key'] = [
     '#type' => 'textfield',
     '#title' => $this->t('Application Key'),
     '#default_value' => $config->get('app_key'),
     '#required' => TRUE,
   ];

   return parent::buildForm($form, $form_state);
 }
 /**
  * {@inheritdoc}
  */
 public function submitForm(array &$form, FormStateInterface $form_state) {
   $this->config('bitly.shorten_url')
     ->set('login_name', trim($form_state->getValue('login_name')))
     ->set('app_key', trim($form_state->getValue('app_key')))
     ->save();
   parent::submitForm($form, $form_state);
 }
}

Bitly-Integration-with-drupal-8

Add the Login name and Application Key that you have generated and stored previously.

Now, let’s create a function to integrate your Drupal website with Bitly.

/**

* Generate Shorten Url.

*

* @param string $url

*   The url.

* @param string $login

*   The login name.

* @param string $appKey

*   The api key.

*

* @return string

*   Returns bitly url.

*/

public static function makeBitlyUrl($url, $login, $appKey) {

 // Create the URL.

 $bitly = ‘http://api.bit.ly/shorten?version=2.0.1&longUrl=’. urlencode($url) . '&login=' . $login . '&apiKey=' . $appKey . '&format=xml';

 // Get the url

 // could also use cURL here.

 $response = file_get_contents($bitly);

 // Xml.

 $xml = simplexml_load_string($response);

 return 'https://bit.ly/' . $xml->results->nodeKeyVal->hash;

Let’s now call the makeBitlyUrl function to generate the Bitly Url.

$config = \Drupal::config(‘bitly.shorten_url');

$bitlyUrl = (string) makeBitlyUrl('https://www.example.com', $config->get('login_name'), $config->get('app_key'));

You will now get the integrated Bitly Url in the $bitlyUrl variable.

May 19 2020
May 19

Web accessibility helps to make the world wide web usable for everyone. Many of the most common accessibility issues making sites difficult or impossible to use in a non-traditional way can be easily fixed. 

Developers need to ensure that page markup does not contain duplicate IDs because many screen readers and assistive technologies use IDs within the page as landmarks for the user to easily parse the content.

The following hook modifies any exposed view filter to have aria labels on each form element as well as inserts the view name into the form element, form element label, form actions wrapper, and form submit button ID (e.g. edit-submit-[VIEW_NAME]-[VIEW_DISPLAY]).

The addition of aria-labels acts as an agnostic accessibility feature to inform the user the purpose of the element:

/**
* Implements hook_form_alter().
*/
function MYMODULE_form_alter(&$form, FormStateInterface &$form_state, $form_id) {
 // Add aria-labels to views exposed filters.
 if ($form_id === 'views_exposed_form' && strpos($form['#id'], '-block-') !== FALSE) {
   // Assumed structure (e.g. views_exposed_form_[view_name]_[block_name]).
   $exploded_form_id = explode('views_exposed_form_', str_replace('-', '_', $form['#id']));

   if (isset($exploded_form_id[1]) && !empty($exploded_form_id[1])) {
     // Get the view id.
     $view = explode('_block_', $exploded_form_id[1]);
     $view = isset($view[0]) ? $view[0] : '';

     if (!empty($view)) {
       // Get the view display id.
       $view_display = explode($view . '_', $exploded_form_id[1]);
       $view_display = $view_display[1];
       // Get the view display title.
       $view = Views::getView($view);
       $view->setDisplay($view_display);
       $clean_view_display_title = Html::getClass($view->getTitle());

       foreach ($form['#info'] as $info) {
         if (isset($form[$info['value']])) {
           $clean_info_value = Html::getClass($info['value']);

           // Add an aria-label to the form element.
           $form[$info['value']]['#attributes']['aria-label'] = $view->getTitle() . ' ' . trim($info['label'], ':');
           // Update the id on the form element and label.
           $form[$info['value']]['#id'] = 'edit-' . $clean_view_display_title . '-' . $clean_info_value;
         }
       }

       if (isset($form['actions'])) {
         $form['actions']['#id'] = 'edit-actions-' . $clean_view_display_title;

         // Update the id on the submit button.
         if (isset($form['actions']['submit'])) {
           $form['actions']['submit']['#id'] .= '-' . $clean_view_display_title;
         }
       }
     }
   }
 }
}

This second hook modifies any Table view display to prepend the view name and view display name to the table header ID attribute and corresponding table row header attribute (e.g. [VIEW_NAME]--[VIEW_DISPLAY]--[EXISITNG_ID]):

/**
* Implements template_preprocess_views_view_table().
*/
function MYMODULE_preprocess_views_view_table(&$variables) {
 $view_name = Html::getClass($variables['view']->id());
 $view_display = Html::getClass($variables['view']->getDisplay()->display['id']);
 $id_prefix = $view_name . '--' . $view_display . '--';

 // Update each table header 'id' to be
 // prepended with [VIEW_NAME]--[VIEW_DISPLAY]--.
 foreach ($variables['header'] as $header_key => $header) {
   if (
     isset($header['attributes']) &&
     isset($header['attributes']->storage()['id'])
   ) {
     $variables['header'][$header_key]['attributes']->setAttribute('id', $id_prefix . $header['attributes']->storage()['id']);
   }
 }

 // Update each row 'headers' to be
 // prepended with [VIEW_NAME]--[VIEW_DISPLAY]--.
 foreach ($variables['rows'] as $row_key => $row) {
   if (isset($row['columns']) && !empty($row['columns'])) {
     foreach ($row['columns'] as $column_key => $column) {
       if (
         isset($column['attributes']) &&
         isset($column['attributes']->storage()['headers'])
       ) {
         $variables['rows'][$row_key]['columns'][$column_key]['attributes']->setAttribute('headers', $id_prefix . $column['attributes']->storage()['headers']);
       }
     }
   }
 }
}

Comment below for other ideas, or if you need help using these. 
 

May 19 2020
May 19

Hi friends. I’m very excited about DrupalSpoons, and would love you to give it a try. DrupalSpoons is a model and a movement. It shows how great development for Drupal Contrib modules can be. DrupalSpoons is a particular configuration of groups and projects built at Gitlab.com. DrupalSpoons offers Issues, Merge Requests (same as PRs), and CI to Contrib projects. It uses zero custom code (except for the issue migration), since I have no special access to gitlab.com.

Please read its README.md and click through the many links there. There you will learn the goals of the project, and more about its implementation. Devel and KeyCDN modules are now developed on DrupalSpoons. For example, observe that all of Devel’s open issues were migrated.

If you maintain a Contrib module, please consider moving it to DrupalSpoons. If you are a contributor, open a “Move to DrupalSpoons” issue for your favorite module. We can be done with rolling and re-rolling patches like its 1999. If we get enough momentum, I’m hoping that the DA will adopt a similar approach for its Gitlab instance and all projects can move back to git.drupalcode.org.

If you like my proposal, please retweet and join! I led prior movements in Drupal like groups.drupal.org and #D7CX pledge, and Drupal Code of Conduct. These movements only succeed with early vocal support.

To discuss this blog post and DrupalSpoons in general, lets use this issue or #drupalspoons on Drupal Slack. Please bring your most positive self :)

P.S. I never set out to build a Drupal project platform. A Devel co-maintainer asked me to fix our Travis tests. I did so on Gitlab.com and it Corona-spiralled from there. “If you wish to make an apple pie from scratch, you must first invent the universe” – Carl Sagan.

Devel issues

May 18 2020
May 18

You Might Also Like

This past Friday, the Olivero project reached a major milestone and tagged our first alpha release. You can download it on the Olivero project page. This release marks a point in time where the code is stable(ish!), looks good amazing, and is ready for additional testing!

What is Olivero?

Olivero is a new theme that is slated to make it into Drupal core in version 9.1 as the new default theme (replacing Bartik). It’s named after Rachel Olivero, who was a valued community member and accessibility advocate. 

About this release

This release has been a long time coming (read about the origin here) and has countless hours from dedicated volunteers poured into it with love. 

This release is not perfect, in fact, we’ve stated that “perfect is the enemy of good” for our alpha releases! That being said, we’ve done extensive testing with various devices, and browsers (yes — this theme supports Internet Explorer 11), and have done lots of accessibility work, although more still needs to be done!

You get a feature! You get a feature! Everyone gets a feature!

Well… almost. Besides cross browser and accessibility work, we’ve included some common features in this initial release.

  • Dropdown menu support — this is self-explanatory, but until Drupal 9.1, core themes did not support multi-level menus. 
  • Option for “always-on” mobile navigation — This is intended for the use case where the page has more top-level menu items than can fit within the header.
  • Background color options for site branding — You can change the site branding (logo) background to suit your needs. The current options are white, gray, and blue (which is the default). 

As of this release, we’re not including support for dark mode or changing the color of the theme (via color module, or anything else). However, this is on the horizon (likely after the initial core inclusion). 

How you can help

We’re at the point now where we can use some real-world testing. Please find things that break, we know they’re there!

For example, I loaded up Lullabot.com with the new theme and discovered various default styling that can be tightened up (e.g., links within headers).


We’re also at the point where we can use additional accessibility testing. Please fire up your screen readers, and decrease (or increase) your contrast and take a look!

As with all free open source projects, please take a look at the issue queue to make sure that the issue isn’t already created.

Tugboat helps save the day!

We also want to give out a huge shoutout to the Tugboat team. If you aren’t familiar with Tugboat,  it’s a pull request builder that generates live, working websites from every PR, branch or tag.

Through the Tugboat service, we worked to set up a Drupal multisite install that has deploy previews with content, without content, and using the minimal profile (note this is currently broken). 

Check out the Tugboat preview here! Note that the “working” status of this Tugboat preview will be in flux, as we commit code, rebuild the preview, etc.

Next steps

We’re off to the races! The next step is incremental alpha releases (either weekly or biweekly). We’re also going to make a list of features that are necessary to tag our first beta and work toward that. 

We hope to create our first Drupal core path in a month or so. This will give core committers the opportunity to put an eye on the codebase, so it can be included in version 9.1. We’re aiming to get this committed into core in late July-ish.

Thank you, thank you, thank you!

We have so many people helping out, and we wouldn’t be here without them. Here is the full list of committers (16 as of today), and this does not even count the people who are doing testing, etc! 
 

Mike Herchel

Thumbnail

A senior front-end developer, Mike is also a lead of the Drupal 9 core "Olivero" theme initiative, organizer for Florida DrupalCamp, maintainer for the Drupal Quicklink module, and an expert hammocker

Putra Bonaccorsi

Thumbnail

Putra Bonaccorsi is a Senior Front-end Developer with a flair for creative uses of CMS and a dedication to finding unique solutions to tough problems.

May 18 2020
May 18

Of all the discussions in the Drupal community, few have generated such a proliferation of blog posts and conference sessions as decoupled Drupal, which is also the subject of a 2019 book and an annual New York conference—and has its share of risks and rewards. But one of the most pressing concerns for Drupal is how we can ensure a future for our open-source content management system (CMS) that doesn't relegate it to the status of a replaceable content repository. In short, we have to reinvent Drupal to provide not only the optimal back-end experience for developers, but also a front end that ensures Drupal's continued longevity for years to come.

A few months ago, Fabian Franz (Senior Technical Architect and Performance Lead at Tag1 Consulting) offered up an inspirational session that presents a potential vision for Drupal's front-end future that includes Web Components and reactivity in the mix. In Fabian's perspective, by adopting some of the key ideas that have made popular JavaScript frameworks famous among front-end developers, we can ensure Drupal's survival for years to come.

In this multi-part blog series that covers Fabian's session in detail from start to finish, we summarize some of the key ideas that could promise an exciting vision not only for the front-end developer experience of Drupal but also for the user experience all Drupal developers have to offer their customers. In this fifth installment in the series, we continue our analysis of some of the previous solutions we examined and consider some of the newfangled approaches made possible by this evolution in Drupal.

The "unicorn dream"

Before we get started, I strongly recommend referring back to the first, second, third, and fourth installments of this blog series if you have not already. They cover essential background information and insight into all of the key components that constitute the vision that Fabian describes. Key concepts to understand include Drupal's render pipeline, virtual DOMs in React and Vue, the growing Twig ecosystem, universal data stores, and how reactivity can be enabled in Drupal.

One of the final questions Fabian asks in his presentation is about the promise unleashed by the completion of work to enable shared rendering in Drupal, as well as reactivity and offline-enabled functionality. During his talk, Fabian recalls a discussion he had at DrupalCon Los Angeles with community members about what he calls the unicorn dream: an as-yet unfulfilled vision to enable the implementation of a Drupal site front end with nothing more than a single index.html file.

Slots

Fabian argues that the component-driven approach that we have outlined in this blog series makes this unicorn dream possible thanks to slots in Web Components. Because React, Vue, and Twig all have slots as part of their approaches to componentization, this possibility becomes more possible than ever before. Front-end developers can insert repeatable blocks with little overhead while still benefiting from configuration set by editors who don't touch a single line of code but that affects rendered output. Developers can extend said block rather than overriding the block.

Consider, for instance, the following example that illustrates leveraging an attribute to override the title of a block:

    <sidebar type="left">
      <block slot="header" id="views:recent_content">
        <h2 slot="title">I override the title</h2>
      </block>
    </sidebar>

When Fabian attempted to do this with pure Twig, he acknowledges that the complexity quickly became prohibitive to proceed, and the prototype never reached core-readiness. However, thanks to this approach using Web Components slots, one could create plugins for modern editors that would simply use and configure custom elements. Among editors that would support this hypothetical scenario are heavyweights like CKEditor 5, ProseMirror (which Tag1 recently selected as part of a recent evaluation of rich-text editors), and Quip.

Developer experience improvements

This means that we as developers no longer have the need to convert the display of tokens through a variety of complex approaches. Instead, we can simply render HTML and directly output the configured component; Drupal will handle the rest:

    <drupal-image id="123" />

Moreover, leveraging BigPipe placeholders with default content finally becomes simple thanks to this approach, argues Fabian. We can simply place default content within the component, and once the content arrives, it becomes available for use:

    <block id="views:recent_content" drupal-placeholder="bigpipe">
      I am some default content!
    </block>

In this way, we can take advantage of our existing work implementing BigPipe in Drupal 8 rather than resorting to other JavaScript to resolve this problem for us.

Performance improvements

Finally, some of the most important advancements we can make come in the area of performance. For front-end developers who need to serve the ever-heightening demands of customers needing the most interactive and reactive user experience possible, performance is perennially a paramount consideration. When using a universal data store, performance can be improved drastically, particularly when the store is utilized for as many data requirements as possible.

We can simply update the real-time key-value store, even if this happens to solely be located on Drupal. As Fabian argues, a data-driven mindset makes the problem of shared rendering and componentization in Drupal's front end much simpler to confront. Developers, contends Fabian, can export both the data and template to a service such as Amazon S3 and proceed to load the component on an entirely different microsite, thus yielding benefits not only for a single site but for a collection of sites all relying on the same unified component, such as &lt;my-company-nav />.

Such an approach would mean that this company-wide navigation component would always be active on all sites requiring that component, simplifying the codebase across a variety of disparate technologies.

Editorial experience improvements

Nonetheless, perhaps some of the most intriguing benefits come from improvements to the editorial experience and advancements in what becomes possible despite the separation of concerns. One of the chief complaints about decoupled Drupal architectures, and indeed one of its most formidable disadvantages, is the loss of crucial in-context functionality that editors frequently rely on on a daily basis such as contextual links and in-place editing.

With Fabian's approach, the dream that formerly seemed utterly impossible of achieving contextual administrative interfaces within a decoupled Drupal front end become not only possible but realistic. We can keep key components of Drupal's contextual user interface such as contextual links as part of the data tree rather than admitting to our customers that such functionality would need to vanish in a scenario enabling greater reactivity and interactivity for users.

After all, one of the key critiques of decoupled Drupal and JavaScript approaches paired with Drupal, as I cover in my book Decoupled Drupal in Practice, is the lack of support for contextual interfaces and live preview, though I've presented on how Gatsby can mitigate some of these issues. Not only does this solution allow for contextual interfaces like contextual links to remain intact; it also means that solutions like progressive decoupling also become much more feasible.

Moreover, one of the key benefits of Fabian's approach is Drupal's capacity to remain agnostic to front-end technologies, which guarantees that Drupal is never coupled to a framework that could become obsolete in only a few years, without having to reinvent the wheel or create a Drupal-native JavaScript framework. And one of the key defenses of Fabian's vision is this rousing notion: We can potentially enable single-page applications with Drupal without having to write a single line of JavaScript.

Outstanding questions

Despite the rousing finish to Fabian's session, pertinent questions and concerns remain about the viability of his approach that were borne out during the Q&A session following the session. One member of the audience cited the large number of examples written in Vue and asked whether other front-end technologies could truly be used successfully to implement the pattern that Fabian prescribes. Fabian responded by stating that some work will be necessary to implement this in the framework's own virtual DOM, but in general the approach is possible, as long as a customizable render() function is available.

Another member of the audience asked how Drupal core needs to evolve in order to enable the sort of future Fabian describes. Fabian answered by recommending that more areas in Drupal responsible for rendering should be converted to lazy builders. This is because once no dependencies in the render tree are present, conversion to a component tree would be much simpler. Fabian also cited the need for a hook that would traverse the DOM to discover custom components after each rendering of the Twig template. Thus, the main difference would be writing HTML in lieu of a declaration in Twig such as {% include menu-item %}.

Conclusion

In this fifth and final installment of our multi-part blog series about a visionary future for Drupal's front end, we examined Fabian's rousing DrupalCon Amsterdam session to discuss some of the benefits that reactivity and offline-first approaches could have in Drupal, as well as a framework-agnostic front-end vision for components that potentially extends Drupal's longevity for many years to come. For more information about these concepts, please watch Fabian's talk and follow our in-house Tag1 Team Talks for discussion about this fascinating subject.

Special thanks to Fabian Franz and Michael Meyers for their feedback during the writing process.

Photo by Stephen Leonardi on Unsplash

May 18 2020
May 18

The Bibliography & Citation project (aka BibCite) is developed and maintained by ADCI Solutions and helps to organize and save bibliographic data about the content ranging from web pages to books and scientific research works. The project also helps to design citation of sources according to thousands of standards that have been accepted at different times in different organizations. 

As we can tell from the drupal.org statistics, at the time of the publication of this article BibCite is used on more than 281 websites. Its solutions are very specific, therefore each use case is highly likely to be a conscious one, and we as project`s creators appreciate it a lot. 

We tend to think that submitted issues and concerns about the module’s performance are legit indicators of BibCite`s success and demand. So, we have hundreds of issues to discuss. We decided to contact users to gather first-hand information about organizations they work in and the problems they solve using BibCite. 

We would like to thank our respondents and co-authors of this article.

Ricardo Marcelino, Omibee

Omibee is a Drupal agency that works with organizations such as research centers to help them promote and manage their activities.

Based on that experience, we developed Omibee Research, a prebuilt Drupal installation that enables research centers and institutes to have their own online platform with low entry effort.

Omibee Research can be fully customized according to specific needs; features and modules that are frequently used in this field are already included into its core: scientific activity management, research groups collaboration, grant, and annual reports management, etc. The core package includes Bibliography & Citation along with several other modules, preset entities, integrations, and a specifically designed theme.

The product is free to download and has the same license as Drupal (GPL v2), a theme and several ways to import information. The paid services we provide for this product focus on installation, customization and appearance.

There are currently around 10 centers in Portugal using Omibee Research. A few examples: 

May 18 2020
May 18

We recently introduced the concept of digital experience frameworks as the essential tools for creating and managing digital experiences. That blog post covered the basics of DXF: what’s meant by the term, some different types of DXF, and how to choose the right ones for your needs, supported by a short look into the choices for Agiledrop’s own suite of DXF.

This post will then focus more on the advantages of open-source digital experience frameworks and how they can be utilized to streamline operations and drive growth for your business. 

We’ll discuss the main reasons for opting for open-source DXF rather than custom development or proprietary tools, and take a look at the benefits of using them, both for your products/services as well as for your internal operations. 

How can you drive business growth with open-source digital experience frameworks?

In the experience economy, websites are just one of the numerous channels with which your customers interact with your business. In order to truly drive business growth, you’ll want to take advantage of all available channels where your target audience spends their time (and money!).

It’s true that with custom development, you’ll get all the customizability you desire and won’t be constrained with certain limitations of specific and already established DXF. However, custom development, especially in the multichannel digital landscape, is not only much more costly, but also much much more time consuming than relying on open-source DXF.

Just think of it - while you may achieve more functionality with custom development, the question arises whether the custom code will be completed at a time when this functionality is still relevant. Chances are high that this won’t be the case.

With SaaS solutions for creating digital experiences, the story is a bit different. They are incredibly time- and resource-efficient, but that’s also reflected in the budget. 

For big companies with a reasonable budget, it might make sense to rely on established SaaS providers - but what about small to medium-sized businesses that don’t have the luxury to afford a premium subscription to, say, Salesforce?

Furthermore, while initial development is faster, the SaaS still likely has certain limitations which can’t be dealt with as flexibly as with a digital experience framework. Plus, if you ever decide to migrate from a SaaS to another solution, you’ll have a very hard time getting all your data - it won’t, technically, be yours.

Luckily, there are a lot of really good open-source solutions - this is basically free software, supported and vetted by a community of experts (with frameworks such as WordPress or React, for example, these communities are downright huge). 

There are 2 crucial things to take into account here:

  • Vetting by experts guarantees a very high level of security. This is especially true in Angular and Drupal: the former is supported by Google, while the latter is renowned for being the most secure open-source CMS and as such a favorite of governments, nonprofits and similar organizations.
  • Wide range of customizable options makes it easier to do personalization well, which contributes to a better customer experience, with higher conversion and lower bounce rates.

All three digital experience frameworks which we utilize at Agiledrop satisfy these two criteria. As the two leading CMS with huge communities backing them, WordPress and Drupal are able to respond efficiently to the ever-changing market demands, both of them introducing sought-after features while allowing for better and better integration with other technologies. 

Both of them can also be used as “headless” or “decoupled” content management systems, relying on a front-end framework such as Angular or React for the presentation of that content.

While both of them offer out-of-the-box support for React, they can function with basically any framework. There have been a few articles recently on using WordPress with Vue, and one of our developers has been working on a project that uses Vue in combination with Drupal. 

Our front-end framework of choice, however, is the TypeScript-based Angular, due to its enterprise capabilities. These especially make it a perfect fit with Drupal, which is also predominantly used for bigger, enterprise platforms. 

Angular is developed and maintained by leading tech company Google, and the TypeScript language by another tech giant, Microsoft. On top of that, the framework’s regular release cycle guarantees constant additions and optimizations to functionality and security. 

All three frameworks provide enough out-of-the-box features, as well as all the plugins, modules and other tools contributed by the community, that you can significantly cut down on costs with them, as you’ll require less custom development to achieve the same functionality. 

What’s more, to cater to the recent explosion of digital channels, they also come with excellent mobile support, as well as the ability to integrate with any kind of channel, allowing your business to leverage all the channels it needs to, from the web to IoT. 

In addition to powering all sorts of digital experiences for your audiences, open-source DXF are also the ideal tools for all of your internal operations, from WebOps to project and resource management. 

WordPress and especially Drupal are perfect for internal platforms where you need good content management capabilities, media handling and well-defined permissions and user roles. 

Frameworks such as Angular or React are then suited towards more specific use cases - at Agiledrop, we recently revamped our resource management dashboards which now utilize Angular, for example. And, as our project managers testify, their day-to-day work has been greatly facilitated thanks to this upgrade!

So, by providing a great experience for both your users and customers, as well as your employees, open-source digital experience frameworks are a cost-effective and future-proof solution for establishing and scaling your digital presence. Leveraging them allows for more innovation and flexibility, enabling you to better tailor your digital experiences to the needs of your audiences.

Conclusion

To sum up, open-source digital experience frameworks such as Drupal, WordPress and Angular can be used to power any kind of digital experience, from products to operations, from web to mobile to physical digital display.

They are by their very nature future-proof enough to guarantee business relevance a few years down the line when new trends emerge, allowing you to scale and grow without having to worry about migrating your entire codebase every few years, or losing any user data. 

This is only enhanced with the frameworks’ commitment to backward compatibility, which will make upgrades between future versions even easier. 

If you’re looking for the right suite of digital experience frameworks for your next project, and proven engineers versed in those frameworks, reach out to us and we’ll craft a team with the perfect skill-set for your needs.

May 18 2020
May 18

As you may have heard, Drupal 9 porting day a couple weeks ago was a huge success! Gábor Hojtsy wrote up a great summary on the event including all the money that was raised for the Drupal Association. And, you can read my porting day recap as well. Thanks again to all who helped out.

The April porting day was so successful that Surabhi Gokte and Gabriele Maira (gambry) encouraged Gábor to organize a repeat performance and, like magic, we have Drupal 9 porting weekend coming May 22 and 23. This is scheduled during the time we had hoped to contribute at DrupalCon Minneapolis. Now we'll join each other virtually in a few days to make Drupal even better.

The goal for Drupal 9 porting weekend is to make more Drupal 8 contributed projects (modules, themes, and distributions) compatible with Drupal 9. As of May 16, 2020, there are 1,617 out of 8,982 projects that already work on Drupal 9. So, during the porting weekend, we'll work on the 7,365 that don't. While that might seem like a daunting number, about half of those (3,405) likely only need a one-line change to make the project Drupal 9 compatible!

There is a wonderful effort underway right now to automate Drupal 9 compatibility issue and patch creation for contributed projects. Even with this effort, we still need your help during porting weekend. We hope you can participate!


Image credit: Aaron Deutsch

I've listed some useful Drupal 9 porting resources you can review and information about collaborating in Slack during the event. I've also added specific sections for preparation depending on the type of contribution you are hoping to do:

There are a lot of Drupal 9 resources, but here are some that are particularly helpful for preparing for patch weekend:

  1. Drupal 9 readiness (#d9readiness) channel on Slack
  2. Drupal 9 compatibility contribution quickstart guide
  3. Drupal 9 Deprecation Status
  4. Drupal 9 compatibility ContribKanban board
  5. Drupal 9 porting weekend ContribKanban board (to be filled in :)
  6. Upgrade Status
  7. drupal-rector
  8. Upgrade Rector
  9. Running PHPUnit tests
  10. simplytest.me
  11. dreditor Chrome browser plugin
  12. Drupal 9 porting day recap
  13. How to prepare for Drupal 9 Porting Weekend
  14. Drupal 9: Status, Resources, and Ways to Contribute

We'll be collaborating in the Drupal 9 readiness (#d9readiness) channel on Slack. If you don’t have access to Drupal Slack click here to get an invite.

When you are ready to join the porting weekend, announce yourself in the Slack channel with something like "I'm here to contribute and will be helping for the next X hours. [insert what you are hoping to do or if you need help here]", e.g.

  1. I will be working on my personal Foobar module and don't need any help but will post status updates here.
  2. I will be working on my personal Foobar module and would like help reviewing/testing.
  3. I will be finding my own issues to work on and will post them here as I work on them so others can collaborate.
  4. I don't have an issue I'm working on but am open to creating patches.
  5. I don't have an issue I'm working on but am open to reviewing/testing patches.
  6. I'm not sure what to help with and need guidance.

We will be using Slack threads extensively during porting weekend. Each project or issue that is being worked on should ideally have a Slack thread associated with it in the channel. Also, if you are responding to questions in the channel, please respond via a thread unless the answer is a simple yes/no type response that won't have other people chiming in. It's best to err on the side of creating threads in order to keep the "chatter" organized so that it's easier for people to understand what's happening and being worked on.

There will be mentors available to help match people with projects and issues. The mentors are listed on the Drupal 9 porting weekend event page. If you have questions, please do not send direct messages to the mentors unless there is a Drupal Code of Conduct issue that you need help with. You can send questions directly in the #d9readiness channel. You don't have to be a mentor to answer questions. If you know the answer and have time to respond, please do so.

Do you want to help out during porting weekend but don't want to think about it until then?

No worries! Show up in the #d9readiness Slack channel and announce your arrival along with what you'd like to help with. If you don't know how to help, that's okay too. The mentors can find something for you. :)

Do you like the idea of helping but haven't done it before and you're not sure you'd like to participate?

No pressure! Join the #d9readiness Slack channel and watch in real time as people contribute together. It's okay to just hang out and see how it happens. You won't be forced to do anything but, who knows, maybe you'll change your mind and jump in after all. :)

Note: If you are interested in livestreaming the event on Twitch.tv or similar, let us know via the Slack channel. Thanks to Ofer Shaal for this great idea!

Have you prepared any websites or contributed projects for Drupal 9 already? Or helped with Drupal 9 compatibility issues in the issue queues?

Nice! We could use your guidance. If you are up for mentoring at this event, contact Gábor Hojtsy and let him know what days and times (with time zone) you can cover. Even if you can only help for an hour or two, that's okay! Ideally, we'd love to get 1 to 2 people covering all times across all time zones over the 2 days. You can check the current coverage on the Drupal 9 porting weekend event page.

After you sign up, make sure to join the #d9readiness Slack channel and arrive during your planned time. If there are other mentors there already, check in with them to see if they need any help with anything. Otherwise, scroll backwards in the Slack channel to catch up on what's been happening and if anyone has asked for help and didn't get a response.

How you mentor others will depend on what they need help with. Someone might need help finding an issue or project to work on. Another might have a technical question when reviewing a patch. If you are worried you might not know how to answer all the questions, it's okay! If you don't know the answer, just let them know and, if possible, see if someone else in the channel knows the answer. This is how we learn together.

If time allows, we hope to have an up-to-date list of issues to start with at the beginning. Stay tuned in the Slack channel for more information about this.

Are you good at searching the issue queues?

Searching the issue queues for existing issues is a very valuable skill that should not be underrated. Sometimes we might forget to check if there is already an issue for our Drupal 9 compatibility problem and create a new one and we end up with duplicates. It happens to the best of us. I've done it myself!

Maybe you aren't up for doing any issue patching, reviewing, or testing but would be happy to look for existing issues or see if issues are duplicates and close out the extras. We'd love that type of help! If you would like to focus on this aspect of contribution, here are some tips:

Check the Drupal 9 plan of the project

A thousand projects set their Drupal 9 plans up for their project pages. Project maintainers can do this by editing their project manually. If a Drupal 9 plan is provided, and it does not say the project is Drupal 9 compatible already, it would be the best starting point for finding the related issues. There still may be other issues that need triage though.

Searching the issue queues

If there was no Drupal 9 plan or even if there was a Drupal 9 plan, looking for other issues may turn up things you can clean up. You'll want to use the "Advanced search" when searching the queue and make sure to look for all issues rather than just open issues. I've made the mistake before where I was only looking at open issues and missed ones that were fixed but closed.

Keep in mind that some issues are tagged with "Drupal 9 compatibility" but not all are. In some cases, issues won't be tagged at all. There is an old tag called "Drupal 9 readiness" that was mistakenly used. If you find relevant issues that aren't tagged with "Drupal 9 compatibility", you can add the tag as you come across them. Only remove the "Drupal 9 readiness" tag if the issue is tagged with "Drupal 9 compatibility".

The issue titles aren't consistent so you'll need to search for various keywords within a project's issue queue, e.g. "drupal 9", "compatibility", "deprecated", "deprecation", "port", "update", "readiness", "core_version_requirement". Searching for these types of keywords using the "Advanced search" should help you find most, if not all, relevant issues.

If you need a refresher on the issue status codes, the "Status settings of issues" documentation is helpful. For the porting weekend, it would be good to work on issues with "Active", "Needs work", and "Needs review" statuses. You can also double check that the "Reviewed & tested by the community" (RTBC) issues were actually reviewed and tested by someone before moving to the RTBC status. The person adding the patch should not set the issue status to RTBC themselves.

What do these issues look like?

It's good to be familiar with what these Drupal 9 compatibility issues typically look like. Here are some examples with their current status as of May 16, 2020:

  1. Info.yml file core_version_requirement changes
  2. Deprecations
  3. Miscellaneous

What issues can be closed?

It's important to only close issues if you know they are duplicates or are irrelevant. If you find more than one issue where they are for the same thing (e.g. updating the info.yml file), then you'll have to assess which, if any, should be closed. This is a judgment call that's handled on a case-by-case basis.

Example 1: Both issue 1 and issue 2 are for info.yml file changes. Neither have had any work on them or any comments. In this case, I'd keep the first issue and close the second as a duplicate and specify the first issue in the "related issue" field on the second issue.

Example 2: Issue 2 had work done on it and has a patch and issue 1 doesn't have any work done yet. In this case, I'd keep the second issue and close the first and specify the first one in the "related issue" field of the second issue.

Example 3: Both issue 1 and issue 2 have had work done. This one is trickier. If it's obvious who did the work first, I'd close out the later issue and add the "related issue" to the other one. If it's not obvious which should be closed, I'd add a comment to both issues and set both of them up to be related to each other.

Example 4: This is a scenario that happened to me recently. Issue 1 was for the info.yml file and issue 2 was for dealing with the jQuery library dependency. Issue 1 had a patch and was RTBC. Issue 2 eventually added the info.yml file fix into the patch for the jQuery dependency changes. This made issue 1 a duplicate so it was closed. The person who did the patch for issue 1 was given an issue credit on issue 2 even though they didn't work directly on that issue. (Issue credits can only be assigned by project maintainers, so when working on issues of projects you don't maintain, please leave a note suggesting to add the appropriate credit for the issues you closed).

When should issues be created?

If it's clear from searching the project's issue queues that there are no existing issues for Drupal 9 compatibility, the next step is to double check using the Upgrade Status module. This can be done using simplytest.me or your local machine.

If it's a module, you would enable the module you want to check and enable the Upgrade Status module. Then you would check the Upgrade Status page for the module's Drupal 9 compatibility info. Ideally, you would check the module's most recent release as well as the module's dev version. This is because it's pretty common for compatibility fixes to be in the dev version but not in an official release yet.

It is useful to have the dreditor Chrome browser plugin when creating issues so that you can follow the issue formatting guidelines. But, don't let this keep you from creating issues. You can look at this issue example for formatting.

Please tag all Drupal 9 compatibility issues with the tag "Drupal 9 compatibility" and, if you are working on it during the porting weekend also tag it with "Drupal 9 porting weekend". Please do not tag it with outdated tags like:

  • "D9 readiness",
  • "Drupal 9 readiness",
  • "Drupal 9",
  • "D9 update",

or create new tags. It is difficult to find issues when lots of different tags are used. Other tags that may be relevant to add are "Novice", "Needs tests", "Needs manual testing", "Needs reroll", and "Needs issue summary update".

Are you a developer interested in creating or updating code patches?

For some projects there are already patches ready for review and testing but, for others, new patches need to be created manually or using the drupal-rector utility or the Upgrade Rector module.

Note: It is very important to check the issue queue first to make sure you are not creating duplicate patches.

Using a local development environment

To create and update code patches locally, you have a number of options. I'm agnostic on local development tools and have used LAMP, MAMP, MAMP PRO, Lando, and DDEV at one time or another. I've known others who've successfully used Docksal and WAMP.

Pick your favorite or try something new. If you want to be more efficient during the porting weekend, I highly recommend you set up your local environment a few days beforehand. You'll want to make sure you know how to "blow away" your testing site easily and recreate it.

Generating patch files

If you are new to creating patches for Drupal projects, I highly recommend scanning the Advanced patch contributor guide. Since I don't create patches regularly, this is where I go to refresh my memory every time I make one.

For additional information for creating patches manually or using Drupal Rector, Tsegaselassie Tadesse (tsega) wrote a great post for the event: "How to prepare for Drupal 9 Porting Weekend".

Are you a developer who understands Drupal coding standards and has an eye for detail?

For every patch that gets committed, it's best practice for someone who didn't write the patch to review the code. Code patches might be simple, one-line changes or complex changes that span many files.

The patches we are focused on for the porting weekend will be mostly deprecation patches and info.yml file patches. Sometimes these are combined into one issue and sometimes they are split out. You can review some example issues above. For the info.yml file patches, these are trivial to code review. Ideally, someone should test the patch as well before marking these issues RTBC.

For reviewing deprecation patches, you'll likely need to check the change record for the deprecation to see if the code is updated properly. Some of these are pretty straight forward such as replacing drupal_set_message with the Messenger service while some will be more involved like handling the removal of jQuery UI from Drupal core.

If the changes look good and you have time to successfully test the patch as well, the issue can be marked RTBC. If you review it but don't test it, add a comment with your notes and make it clear that it still needs manual testing and add the "Needs manual testing" tag. If the patch needs changes, add your comment with feedback and move the issue back to "Needs work".

When doing code reviews, it's very useful to use the dreditor Chrome browser plugin". This will provide a UI for reviewing the code as well as some shortcuts when editing your comment.

Do you like testing things?

Manual testing is a vital part of fixing issues. For each project that's made Drupal 9 compatible, we need people to try out the updates to make sure they don't break anything. How you test depends on the project. Some will be easy to test and some won't be. Ideally, you'll need to be familiar with the contributed project features to test properly though, for simpler projects, looking through the project page and README file might be enough to get you going.

Testing using simplytest.me

In many cases, you can test using simplytest.me. If you haven't used this wonderful tool, you've been missing out! There are times when I don't want to install a site locally but want to contribute by testing a patch. This is very common for me right now because my laptop is almost out of disk space. ;) But, it could be that you are on a computer that doesn't have a development environment set up or you just don't want to set one up for whatever reason.

If you'll be using simplytest.me, I highly recommend installing the dreditor Chrome browser plugin so that when you see patches in the issue queue, you'll see a SIMPLYTEST.ME button. Click that and it will open a new tab with the relevant project and patch. You don't have to install the plugin though; you can go directly to simplytest.me and choose the project and add the link to the patch.

Note, at the time of writing, simplytest.me is working for testing Drupal 8 versions but not Drupal 9. For contributed projects that are sticking with a Drupal 8 version and making that version Drupal 9 compatible, then you can test the Drupal 8 version on simplytest.me. For projects that are making a Drupal 9 version, then you'll need to test locally. If you are able to help with updating simplytest.me for Drupal 9 support, please contact Adam Bergstein (@nerdstein) in the #simplytestme Slack channel.

Side note: When testing core patches, something to double check is that you are testing the correct version. The version selected automatically on simplytest.me is the same as the version on the issue. This isn't always the version for the patch you are testing. This is not a problem with contributed project issues as long as the version on the issue is correct.

Testing with a local development environment

If you want to test locally, you have a number of local development options. One advantage of local testing compared to simplytest.me is that it's usually faster to spin up and refresh your site in between testing different patches. With local testing, you can also test what happens when you are on an older version of the project and update the code with composer.

Reporting your results

As you manually test a project's features, it's good to take screenshots of key things as you go so that you can upload a select number in your comment. You don't have to take tons of screenshots, but you especially want to screenshot any bugs you find during testing and also copy any error text you encounter.

When you are done testing, it is very helpful to explain your steps in a bulleted list. For example, here's a Smart Trim issue comment I added with steps to reproduce and screenshots. Bonus points if you add the testing instructions to the issue summary so it's easier for others (and yourself!) to find it later.

Please add information about your testing to your issue comment instead of a "works for me" type comment. It is much more helpful to know what you tested, if it worked as expected or not, error text if available, and select screenshots showing it working or not working.

Thanks!

Big thanks to Gábor Hojtsy and Ofer Shaal for reviewing and fine-tuning this post. It takes a village to make Drupal its best! We hope you join us for Drupal 9 porting weekend, no matter how you'd like to participate.


Image credit: Aaron Deutsch

p.s. Apologies, my old website is still on Drupal 6 and looks particularly bad on mobile. I've only started posting here again after many years and I've been very busy reviewing Drupal 9 patches and surviving a pandemic. :) Please ignore the cobbler's old shoes for now, thanks!

May 17 2020
May 17

We missed a week, but we're back with a super-sized retro episode where we talk with two of the original DrupalEasy podcast hosts! First, Andrew Riley drops by to cover some recent Drupal news and make some module picks-of-the week (including a Drupal logo memory game!) Then, Mike speaks with Ryan Price about feature flags - it's not a module, not a service, but rather a design pattern. Finally, Chris Weber also has some new change records for us.

URLs mentioned

The Change Notice

DrupalEasy News

Sponsors

Subscribe

Subscribe to our podcast on iTunes, Google Play or Miro. Listen to our podcast on Stitcher.

If you'd like to leave us a voicemail, call 321-396-2340. Please keep in mind that we might play your voicemail during one of our future podcasts. Feel free to call in with suggestions, rants, questions, or corrections. If you'd rather just send us an email, please use our contact page.

May 17 2020
May 17
Congratulations image for DCO graduates

Last week, the 15th semester of Drupal Career Online concluded, and we're proud to announce 10 new graduates of the program! Congrats to Aida, Ashley, Avery, Carla, Jada, Kim, Matt, Micah, Tonderlier, and Tyler!

Drupal Career Online is a 12-week, live-instructor, online Drupal training program designed to teach best practices and sound fundamentals for Drupal developers. 

The course includes not only (virtual) classroom instruction, but also a number of other experiences designed to provide students with various opportunities to learn and practice the material. 

  • Community mentors - each student is (optionally) introduced a volunteer Drupal community mentor. The mentor and student decide how best to work together to achieve the student's goals. Thanks so much to this semester's mentor volunteers: Ofer, Doug, Adam, Philip, Andy, Brian, Albert, and Corey.
  • Office hours - each week during the 12-week class, in addition to 7 hours of classroom time, there are 4 additional (optional) office hours. These operate much like traditional college office hours; we open a Zoom room, student show up and ask questions, or just hang out and listen in on others. 
  • Screencasts - in addition to dedicated, produced screencasts for each lesson, every classroom period (all 3.5 hours) is recorded and provided to students as raw video. This way, if they have to miss class for any reason, they can watch the recording. Many students who attend class also take advantage of these videos to rewatch portions of class that they need additional practice with. 
  • Weekly activity reports and evaluations - both the students and the instructor provides weekly feedback. This allows us to ensure that each student is getting exactly what they need to succeed in the DCO. 

While the DCO has been around for over 6 years, that doesn't mean that our curriculum is stale. In fact, just the opposite - every semester, the curriculum is updated with the latest best practices. In the Spring 2020 semester, for example, lessons were updated to include the new drupal/recommended-project Composer template, our module development lesson was updated to avoid Drupal 9 deprecations, our class project was updated, and best practice layout tools were update (with more of an emphasis on Layout Builder). These ongoing curriculum iterations ensure our graduates are learning current best practices!

Perhaps the most important aspect of the DCO is the fact that our alumni have access to weekly, office hours - each and every week throughout the year. These office hours provide an opportunity for alumni to re-connect, ask questions when they get stuck, and sometimes just lurk to hear what others are asking about. We feel that it provides a level of comfort to our alumni - that we are as invested in their future as they are.

The next semester of Drupal Career Online begins August 31. Interested in learning more about it? Come to one of our free, 1-hour Taste of Drupal webinars where we'll tell you all about the DCO and you can ask any questions you may have. 

May 17 2020
May 17
May 17, 2020 Drupal

I would like to stay up to date on all available open source / 'contrib' Drupal modules. 'There is a module for that', this applies to many use cases within Drupal; a deadly sin to build something that already exists, or is partially available. We keep track of the latest module releases every month, including what we noticed about module updates in the past month:

1. Clientside Validation

The Form API from Drupal is very comprehensive: neatly building, formatting and developing forms, in the broadest sense of the word, are interwoven into the system. There is no clientside validation as standard, simply put: that as soon as a visitor enters a 'form element' (for example his first name), that field is immediately validated. And not just after clicking on the 'Save' button.

https://www.drupal.org/project/clientside_validation

2. Forms Steps

Giving enough attention to forms on your website is essential; these are often a conversion point and you want nothing to stand in the way. A multi-step form can increase your conversion rate by 300%. With this module you can easily create such a form in Drupal.

https://www.drupal.org/project/forms_steps

3. Better Search Block

You can make the standard Drupal search box beautiful by overriding using Twig templates. But if you want a less technical approach, this module could help: it offers some configuration options such as:

  • Making some layout elements adjustable
  • Making the placeholder text adjustable
  • Mini animations as soon as a visitor clicks in the box.

https://www.drupal.org/project/better_search

4. Multiple Registration

A powerful permissions and roles system is embedded in the Drupal core, but offers only one registration page for website visitors as standard. If you want different registration pages on your website, for different roles (for example, customers and suppliers), give this module a try.

https://www.drupal.org/project/multiple_registration

5. Simple XML sitemap

An XML sitemap is essential for your website SEO. There are several Drupal modules that generate this XML sitemap for you, but this one seems to be the most popular with nearly 45,000 installs. This also supports the latest Google standards, regarding multilingual content.
Googlebots will thank you later.

https://www.drupal.org/project/simple_sitemap

6. Advanced Text Formatter

Within the Drupal core you can set according to which View mode an entered text field can be shown to the website visitor, for example 'default', 'teaser' or 'trimmed'. If you want more control over the way in which the entered text is displayed, install this module so that you can configure by field:

  • Automatically cut text on a certain number of characters.
  • Adding an ellipsis (...) as soon as a sentence is truncated.
  • Always cancel on whole word.
  • Tokens for adding automatically dynamic information.
  • Allow certain html tags.
  • Apply specific Text Format.

https://www.drupal.org/project/advanced_text_formatter

7. Menu Item Extras

Do you want to add extra fields to menu items? Install this popular module. You can see it as 'Fieldable menus', so you can store and display all kinds of extra information with a menu item.

https://www.drupal.org/project/menu_item_extras

8. Visitors

Don't want to give away all your data to Google? Or do you run Drupal as a social intranet with private data? Then you can install this module to generate statistics. It gives reports about the visitors to your website, in diagrams and other textual statistics. Some of the available reports:

  • Pages that have recently been visited
  • Pages that are often visited
  • Page visitors per month / week / day
  • Total number of visitors
  • Number of unique visitors
  • Number of registered users
  • Visitors by country, city
  • Number of visits per page per city

For the complete list, check the module page:

https://www.drupal.org/project/visitors

9. Geofield Map

Easily create beautiful maps using this Drupal module, it is built on the popular Geofield module and works in both the frontend and the backend with interactive maps makes management easy for content managers. The 2.x version even supports custom markers and images, based on dynamic data from that folder. Watch a live demo here.

https://www.drupal.org/project/geofield_map

10. Views Bulk Operations (VBO)

https://www.drupal.org/project/views_bulk_operations

This module has been around for a long time, but recently received another update. Using Views you can configure Drupal content lists in the broadest sense of the word: you can make a list of basically everything that lives in Drupal with it - from simple blog overviews to complex search pages with facets integrated in Solr.

This module expands Views with the possibility of having an action on all items in such a list: a 'bulk operation' as an extension of this limited function of the Drupal core.

An example is bulk editing of a selection of nodes. Exporting data to excel or csv is also possible via this additional module.

11. Monolog

Drupal core has a good log, in which you can find notifications, warnings and errors. But sometimes you need more reporting: this module offers integration of the Monolog library- "Logging for PHP". It integrates with Drupal Watchdog: the core log, so the module works with the Drupal core and contrib / open source modules.

https://www.drupal.org/project/monolog

12. Field Defaults

You can configure your content model in Drupal using content types and fields. After / during this configuration you build your website, after which you will fill it with content. Sometimes the content manager discovers after a while that an extra field is needed (for example an 'Intro Text'). You can easily add that field in Drupal, but with all existing content items that field is empty. This module comes in handy: as soon as you create a new field, it can automatically supplement all existing content with a chosen default value for that field.

https://www.drupal.org/project/field_defaults

13. Allow site iframing

For security reasons a website may not load within an i-frame, the Drupal core prohibits that by default. If you want to bypass this intentionally, this mini module offers the solution.

https://www.drupal.org/project/allow_iframed_site

14. Upgrade Status

A module mentioned in the Drupal Keynote by leader Dries Buytaert in the past DrupalCon. Specific for Drupal 8 installations: this module scans all code and reports whether it contains 'deprecated code'. Simply put, that is code that no longer works in Drupal 9. To make it easy to upgrade to Drupal 9 at a later stage, it is important not to have a deprecated code anymore, this module provides a good insight into that. Also: if you use the correct IDE, it will immediately indicate inline with the code.

View this directly in the Driesnote

https://www.drupal.org/project/upgrade_status

15. Views Bulk Edit

An addition to the Views Bulk Operations module: provides bulk updating of 'entity values': for example, filled-in text fields in content item, or categorization using Taxonomy

https://www.drupal.org/project/views_bulk_edit

16. Mobile Device Detection

Nowadays the responsive layout of your website is determined in the frontend: the html / css / js determines what it will look like on a certain screen format and also determines whether certain blocks are visible or not.

If you want to catch this on the basis of the website visitor's device, then take a look at this module. Depending on the device, you may or may not have certain Drupal blocks displayed to the website visitor, based on the device.

https://www.drupal.org/project/mobile_device_detection

17. Quick Link

Traced as a result of this blog: this module offers an implementation of the Quicklink library from Google Chrome Lab for Drupal. Quicklink is a lightweight JavaScript library (compressed less than 1 kb) that enables faster consecutive page loads by following in-viewport links.

How Quicklink works
Quicklink makes attempts to speed up navigation to subsequent pages. It:

  • Detects links within the viewport (using Intersection Observer)
  • Wait until the browser is inactive (with requestIdleCallback)
  • Checks whether the user has a slow connection.
  • Prefix of URLs to the links (using
    or XHR).

Under construction
The module has just been released and is currently under heavy construction, but absolutely one to watch.

https://www.drupal.org/project/quicklink

18. Freelinking

A 'looser' way for content managers to create links. By default you must enter a 'hard' link to a page, but after installing this Drupal module you can also use, for example, the page title, in which case you enter: [[nodetitle: Title of the Page]].

This module automatically turns this into a working link.

https://www.drupal.org/project/freelinking

19. Hook Event Dispatcher

There are several articles about why you have Drupal events or Drupal hooks They are both in Drupal 8, hooks are from the legacy era (Drupal 7 and earlier) and events originate from the Symfony framework which Drupal 8 is built on. The creator of this module believes that the hook system is outdated, but that is an ongoing discussion.

Anyway, this module ensures that Drupal dispatches some hooks as events, so that those hooks can be implemented as events. Because that way of implementation would be better. Among other things, it is about:

  • Entity hooks
  • Form hooks
  • Preprocess hooks

https://www.drupal.org/project/hook_event_dispatcher

20. Modules weight

Drupal executes code in modules on order of weights of modules. The module with the highest or lowest weight is executed first. As a result, it is possible that a certain code can overwrite each other because they have the same type of application. It is not possible to set which code has priority, so with the help of setting the module weight.

In the 'early Drupal 7 days' we did this by hand: directly adjust the values of the weights in the database, now there is a module for which you can simply configure this, nice:

https://www.drupal.org/project/modules_weight

Wrap up

That's it, for this month then. Hopefully you are well informed about the latest module releases and you will care a lot because 'there is a module for that'. For another xx cool Drupal modules - stay tuned next month!

May 15 2020
May 15

There is a lot of excitement in the Drupal community about the release of Drupal 9. In particular, one of the most appealing elements is how the transition to Drupal 9 promises to be the easiest major upgrade in more than a decade.

In reminiscing with other community members about some painful upgrades from long ago, it got me thinking about how the nature of the majority of Drupal modules has changed.

Early Days - Modules as Solutions

My first big Drupal project was using the 4.6 version of core. One of the things I remember was the way many of the modules available tried to anticipate a particular use case and provide a “solution” -- essentially an attempt at a fully-formed (if configurable) way to make Drupal meet a set of needs. 

An example of this is the Job Search module I helped to maintain for a time. It had a preconfigured relationship between jobs and resumes, and permissions associated with different actions you would expect users to take: post jobs, apply for jobs, and so on.

There were frequent requests from users who wanted it to work just a little differently from how it was made. Sometimes these changes got incorporated back into the module, but sometimes they remained a special case - a customization that was really only useful in the context of their site. That started to change with the rise in popularity of toolsets and modules like CCK, which were more about making Drupal more flexible so it can be quickly customized to meet a very specific set of needs.

Rise of the Toolsets

What we’ve seen since that time is an increasingly powerful set of modules that extend the capabilities of Drupal, but leave it up to the site builder to decide how these capabilities should be applied. Image API, Responsive Images, Metatags, and many more are examples of modules that gave Drupal important new abilities, but without any recommended starting point on how they should be used.

Even a tool like Features was built to help make those configuration decisions portable between sites or environments on the same site. But increasingly all decisions on how these should be set up fell entirely on the site builder. Which was fine for those of us used to Drupal (or fortunate enough to work among an experienced team of Drupal experts) but more daunting for someone trying to put together a simple site.

In that time we’ve seen Drupal become the CMS of choice for governments, record labels, and major universities, but we’ve seen competitors slowly take over niches where Drupal used to be popular, such as startups and charities. Having to build from scratch can be less attractive for an organization with limited resources, so it’s understandable they’d be tempted to go an easier route, if available.

A Middle Way

Distributions have been one attempt at addressing this problem, such as the popular Commerce Kickstart, which helped to install a ready-to-use e-commerce site. The challenge we’ve seen in using distributions is that they’re complex to maintain, so often you’re not able to use the latest versions of core or popular contrib modules. Or when it comes time to upgrade, it has built-in assumptions about what’s installed, which can make it more complex to upgrade the component pieces. And finally, a distribution is typically only an option when you’re starting to build (or potentially re-build) a site, not for adding incremental functionality.

One of the exciting features Drupal introduced in version 8 was configuration management.  

In addition, Drupal Console gives us an easy way to export individual elements: a content type, a view, and related dependencies. At Digital Echidna we’ve been experimenting with using these to create modules that are effectively just sets of related configuration meant to be a starting point to help us quickly address a particular use case: a locations map, an events calendar, and yes, even a jobs board.

smart date logoSmart Date Module

Now, I’ve adapted this approach to help anyone interested in using (or even just trying out) the Smart Date module I’ve mentioned many times in this blog. It’s easy to install the Smart Date Starter Kit and it will give you a functional (if basic) Event content type and a view with displays to show upcoming and past events. 

It isn’t preconfigured for recurring events (since not every site needs that) but if you want to add that, it’s as simple as installing the Smart Date Recurring submodule and then updating the configuration of the “When” field to allow recurring events. That’s it! The view has already been set up to properly aggregate events with multiple events.

If you also need your events to show in a calendar, you can use the Smart Date Calendar Kit. Installing it via composer gives you all the dependencies (including Smart Date and Fullcalendar View) plus everything described above in the starter kit. The calendar is connected to the list views as navigation tabs, so it should be a robust starting point to manage events on your site.

Both of these are just an initial set of configurations so you can add as much additional complexity as necessary to suit the specific needs of your site. And we’ve tried to build in some admin experience best practices, such as built-in administrative links to add content, so it’s intuitive to maintain out of the box. 

I hope you’ll try them out and post an issue if you think there are ways these could be made even better.

Future Considerations

The recent Drupal business survey posted by Dries hints that there may be similar conversations already happening elsewhere in the community, so it will be interesting to see the results when they’re announced at DrupalCon Global in July. It’s yet another reason to be excited about Drupal 9, and the future direction for this platform. With all kinds of innovations happening each and every day, it is an exciting era in the history of Drupal. 

May 15 2020
May 15

The editorial experience becomes more and more important for each CMS. Users want more control but easier interfaces. In Drupal, one of the biggest and most popular OpenSource CMSes on the market, the search for the best experience continues until today. Various approaches are tested by the community and with each edition, some new approaches are investigated and some are abandoned. From the perspective of a Drupal agency, it is quite interesting to watch this process unfold.

Let’s explore how Drupal editorial experience got to where it is today and where it is heading.

Drupal beginnings

Initially, Drupal pages were built on nodes. Think of a node as an article or page in a typical CMS. A node had a Title and a Body. You titled the node and inserted all the content in one big text field. Typically people would type in the body field the content of the page - this would be mostly text, but you could stick anything you like in there (HTML, images etc) Quite quickly people incorporated WYSIWYG editors into the body (CKEditor, TinyMCE and other ones were integrated as community-contributed modules). You could now author a quite complex page without knowledge of HTML.

The WYSIWYG’s were so popular, that in Drupal 7 CKEditor was added into Drupal core.

On the database side, everything  was still quite simple. A node table with title and an additional table for the body. That is how Wordpress stayed pretty much till today. In Drupal however, the evolution continued. 

Drupal 6 - the domination of CCK & templating

At the time of Drupal 5, an initially small module was created, which in Drupal 6 completely changed the rules of the game (the Content Construction Kit module, aka. CCK).

CCK was a contributed module which allowed to add additional fields to nodes. This does not sound too exciting, but it was. The absolutely brilliant CCK module allowed users to add various fields (number, text, bool, select etc) and it was creating a separate database table for each field. The table field was matching what you wanted to store in it (A decimal, a float, a varchar, a text etc). On top of that, it was adding the field to the default content form. 

This was magnificent because you could create a form with multiple fields and then display the data in a template pre-built by the developer (an image on the right, stats on the left, long tests at the bottom -- that sort of thing). This is how one was building pages in Drupal. The editor did not have to ‘design’ the layout in WYSIWYG anymore. You could just fill in a form with fields and the template took care of the rest. 

Moreover, you could now query in SQL for particular nodes by the field content. Eg. if you created a City node type and added a population decimal field to it, you could search for all cities with a population larger or smaller than a set amount. 

Very quickly after CCK, another module was created - the Views module. Views allowed users to build the queries in the admin interface. You could now create a list of cities ordered by population with a title and a teaser and some other data without the need to code anything. This was a massive breakthrough which allowed developers to create very compelling websites without writing a line of code. 

CCK was so popular that is was incorporated into Drupal in version 7 and Views followed in Drupal 8.

This is how Drupal websites were built for quite a while. Many are still built like this today.

Drupal 7 - First attempts at page layouts 

From Drupal 7 fields were considered a standard. Templating, however, was not sufficient for the community and clients. Drupal developers began searching for solutions to allow more control over the content display with just the UI.

The main reason for the search efforts is the way websites began to be built. The knowledge that an additional click reduces the chance the customer will get to the content was propagating. The approach of having a sidebar and dividing information into pages was no longer interesting. Long scrollable pages were born.

The advent of long landing pages with content in sections began somewhere in 2010. It was, however, the mobile that effectively killed the sidebar. You just could not fit a submenu in a sidebar on mobile. You now had to stick everything on one long scrollable page with multiple sections (scrolling on mobile is much easier than clicking links). And each section had to be interesting, compelling and different.

Drupal developers started to search for solutions on how to allow the editors to create sections on pages easier.

The initial solutions were:

  • Panelizer - a module based on another one (Panels) which was effectively taking over the node display. Instead of just fields, you could now design your page to include blocks, fields, static images, views and various other elements Drupal renders. Editors could override “the default’ predefined layout on a node by node basis. The solution was great and got a lot of traction in the Drupal world.
  • Paragraphs - a bit late to the party on Drupal 7, paragraphs nonetheless made a splash. It started to gain popularity very quickly. The main reason for that was that it was bridging the 2 worlds: drupal form building experience and freedom to add blocks while maintaining ease of use for the editors, which the above solutions did not have. 
  • Context - Context a more general module, which gave users a mechanism for well - acting on contexts (eg what page you are on, what user or role you are etc. ) Using these conditions, one could add reactions (eg. show this block, set this setting). Context was very widely used for a while to arrange blocks on pages. If I am on this page, I want to see these blocks. The downside was you managed the layouts from a central location, needed admin privileges to manage the layouts and the UI was not straightforward. Not suitable for large websites.
  • Blockreference - a simple yet powerful module which allows referencing blocks from a node and effectively stacks them one over the other. This solution did not get a lot of traction.


Current state in Drupal 8 and onwards

Drupal 8, being a very big re-write of Drupal has evened out the playing field a little, allowing the community to vote again on what it thinks should be the approach to building pages. 

Blockreference did not get a D8 version, mostly because entityreference module was now in Drupal 8 core and blocks became references. One could theoretically build pages like this using what Drupal gives out of the box, but that did not catch on.

Context did not manage to gather a lot of usages in D8 and until today does not have a stable release.

Paragraphs - initial winner

The paragraphs module came out as a clear winner. It was stable very quickly and became the de-facto standard in Drupal 8 for over a year. With over 140k installations it now runs one-third of all the drupal websites. It is also worth mentioning that popular Drupal distributions created on Drupal 8 chose paragraphs as the base of their content editing experience. These would be in particular Thunder - distro for publishing houses and Droopler - for building corporate websites. 

Here is an overview of how paragraphs work in Drupal 8. A lot of work is also being done to further improve the editorial experience in the Experimental widget.

Panelizer moved to the core (became Layout Builder)

Panelizer took a different road. It lingered on behind paragraphs in term of the number of installs but because of its popularity in D7 work was underway to migrate it into Drupal core (just as CCK in d7). It was however only in Drupal 8.5 that Layout Builder became available (as an experimental module). At Drupal 7.8 it became stable. 

Layout Builder offers great flexibility and great promise, but the UI even as of writing still has a long way to go to be self-explanatory (one needs a bit of training as many things are not obvious). Also, there is no clear “best practice” as to how to manage content now and what should be composing the pages. Integrations are also lagging, most importantly with search modules. 

Currently, there is no clear winner and best practice is not established yet. There is the paragraphs module with 100k installations, multiple integrations and a clear UI. On the other hand, there is the Layout Builder which is in Drupal core, what is an incredible strength. 

Still, though there are many modules which did not stand the test of time and were removed from the core.

Gutenberg (a WordPress editor)

Last but not least there is the Gutenberg project. It is the newest of the interesting editors in Drupal. It was ported from Wordpress where it is the main editor.

Gutenberg is a React-based editor which takes over the whole editing experience giving the user a WYSIWYG like an experience. It differs in approach to Paragraphs and Layout Builder in that it does not store the layout or entities in the database, but it stores the generated HTML. You create the content with a WYSIWYG editor and the resulting HTML is saved. This makes it a true WYSIWYG readability of the content for machines (automatic updates or migrations of such content may be troublesome). Nonetheless, it continues to be integrated into Drupal better and better. With 900 or so installs it is by no means comparable to the two above but the speed of adoption is impressive. Check out a quick overview of Gutenberg in Drupal.

As you can see, there is no clear winner. Drupal community is still testing various approaches to building websites and empowering the editors. On the one hand, this is fantastic because competition helps the best solution win. On the other, the efforts of developers are spread over multiple various approaches, making progress slower. What is best? I do not know.


 

May 15 2020
May 15

Drupal 8 comes with a Diff component in core. It's mainly used for showing changes to configuration or content revisions. However, it can be used in other ways too. Here are some quick steps to show how to use the Diff component in your custom forms or controllers.

One way Drupal core uses the Diff component is to show the difference between 'Active' and 'Staged' config. See \Drupal\Core\Config\ConfigManager::diff for more details.

Recently, I was building a form where I had to show the diff between two versions of an entity. The Diff component is designed as a stand-alone component that can be used to show the diff between any two arrays or strings. So why not use that in our own forms?

Here's a quick example:

use Drupal\Component\Diff\Diff;
use Drupal\Core\Serialization\Yaml;

    $diffFormatter = \Drupal::service('diff.formatter');
    $from = explode("\n", Yaml::encode($current->toArray()));
    $to = explode("\n", Yaml::encode($revision->toArray()));
    $diff = new Diff($from, $to);
    $diffFormatter->show_header = FALSE;
    // Add the CSS for the inline diff.
    $form['#attached']['library'][] = 'system/diff';

    $form['diff'] = [
      '#type' => 'table',
      '#attributes' => [
        'class' => ['diff'],
      ],
      '#header' => [
        ['data' => t('From'), 'colspan' => '2'],
        ['data' => t('To'), 'colspan' => '2'],
      ],
      '#rows' => $diffFormatter->format($diff),
    ];

I hope this helps. Let me know how you have used the Diff component in your project in the comments!

Photo of Jibran Ijaz

Posted by Jibran Ijaz
Senior Drupal Developer

Dated 15 May 2020

May 15 2020
May 15

Matt and Mike talk with Putra Bonaccorsi and host Mike Herchel about Drupal 9's new front-end theme, and its past, present, and future. 

May 14 2020
May 14

Mediacurrent designer Becky Cierpich recently discussed the UX choices and persuasive techniques used in designing Area Alert, our open source emergency site. Our VP of Technical Operations, Jay Callicott, also discussed the beta release of the distribution and how Mediacurrent has worked with Pantheon to provide a free public upstream and 90 days of free hosting for qualifying organizations looking to develop the site quickly and efficiently for their needs. 

This week, I’m excited to dive into the navigation choices we made for the distribution and how this can be best utilized when you are creating your site.

The Psychology Behind Our Navigation Design Choices

When you think about all of the information your site users need to get through the crisis at hand, you may be thinking about the emergency at hand and the people’s lives at stake. An intuitive navigation and establishing effective communication patterns may not be top of mind right away. However, your navigation should be a major factor into how your site is set up. 

We can empathize with this need and created a navigation on Area Alert that is framed around what your users are looking for when they enter your site; namely, they are focused on fulfilling immediate physiological needs (such as access to food or shelter) one might find in Maslow’s hierarchy of needs. We created a navigation that would meet the basic requirements someone might search for in a crisis.

Along with the design patterns chosen, the navigation follows a Z-shaped pattern in that we utilize negative space to the left of the logo and around the search bar to give breathing room to the top part of the site. As the Gestalt principles in design highlight, negative space can be used to improve composition, which is what informed us to allow for space between elements in the navigation. We followed that with topics most important to users based on reviewing information about past widespread emergencies. For instance, we included sections like Urgent Help after learning about how the public had limited access to information when Hurricane Harvey disrupted typical emergency communication methods in 2017.

Arrows in the navigation are expected visual cues and indicate subpages for the main topics to guide the user to find information most relevant to them. Users who are looking for information regarding a crisis are already in a heightened sensitive state, and ensuring that even the smallest elements of your design align with the expectations is critical in a reassuring experience.

Our Top-Level Navigation Topics

The top-level navigation topics reflect some of the most pressing needs related to the current crisis, especially in terms of public health. We felt it was important to leave space for people to self-select and choose a bucket of topics most important to them because at any given time they may be in various levels of need or explore topics based on different aspects of their lives. A working parent who has a young child may want to explore topics relevant to their child’s virtual learning one day, but the next may want information about how the current crisis impacts their job. 

We also employed digital psychology methods when thinking about the main ideas in our navigation—namely the Fogg Behavior Model. The model focuses on: 

  • Motivation - desire or willingness to do something

  • Ability - possessing the means to do something
  • And a trigger that compels us to take action

In order to understand users’ immediate needs and motivations, we reviewed several government sites, live press conferences, and user comments across social media to identify four main reasons for looking for content:

  • Urgency - Users may have been in a time of need or loss with no time to click around
  • General fact-finding - Users who went this route were typically validating something specific they heard about

  • Timeliness - Users may feel nervous and want to be informed on the latest

  • Authorative/Procedural - Users may be in a position of responsibility looking for guidelines and procedures relevant for their needs (e.g. an employer looking for guidelines relevant to his industry)


In general, we find that people using the site are likely highly motivated to find some of the top-level information, such as Urgent Help. In choosing this and other high-level topics in our main navigation, we have lowered the barrier of entry for users to take action through a consistent layout and sensible categorization of information. 

“Resources For” Dropdown

We chose the personas (Residents, Employees, Employers, and Students) in the Resources dropdown section because our research indicated these users would be the likely ones looking for information. 

In the current COVID-19 crisis, for instance, we know that many people have concerns about their employment situation and may want to know more about their rights. Employers are also an identified site visitor because they may be looking for information about how to keep their employees safe and this information may not be readily available from other sources. 

We also recognize that some people may fit multiple categories. For example, a parent may want to navigate to Residents resources for some topics to better understand overall community issues and to Students resources at other times for topics that impact their child’s education.

Public Health

In the current COVID-19 crisis, public health has been a major issue that site visitors are interested in learning about for their local area. Since mandates vary by locale and are being updated frequently, users may need a place to validate information they may have heard from family or on other channels. 

We developed the navigation to work fluidly based on the emergency at hand, with our current COVID-19 pandemic in the forefront of our thoughts. In other situations, this section may be a navigation item that can be customized to fit other needs for a particular emergency issue. 

All News

As a main level navigation, All News provides users access to timely news content that impacts everyone. We determined this was a necessary navigation item because as much as people may want to self-select, they may also wish to catch up on information quickly without often returning to the site. Adding All News into the navigation allows them to look at information quickly in one set area.

Urgent Help

Like All News, Urgent Help was developed with all personas in mind. We understand that people may be seeking information quickly, potentially experiencing loss or distress with little time or patience. They may not know where to start right away when they have an immediate need and this gives them a quick starting point. And just like the Public Health section, subtopics as part of Urgent Help may change depending on the particular emergency issue being faced at the time. 

We created Area Alert to be versatile, and content editors will be happy to know that if they wish, they can use other components, such as the accordion from the FAQ page, to make their Urgent Help page a quick resource with answers to questions users may have answered right away.

User-Focused Navigation Designed with You in Mind

Mediacurrent, a long-time contributor to open source, is committed to creating community-focused solutions to emergency situations, such as the COVID-19 pandemic currently happening worldwide. We would love to help you with setup or walk you through the demo so it works how you’re expecting when you use it. Likewise, we encourage you to use this navigation strategy as a resource as you develop your emergency management website. In the spirit of open source, we hope this information can prove useful for those seeking direction.

We aspire to help both organizations and municipalities seeking ways to help their communities in any way we can, so please contact us to answer any questions you may have regarding Area Alert.

May 14 2020
May 14

Harish R Rao portraitContinuing our short series of articles highlighting ways that the Drupal software and its community are building solutions to help combat the effect of COVID-19, today we hear from Harish R. Rao of Interpersonal Frequency. Here, he describes their project at San Mateo County.

Under normal circumstances, a client asking for a new website “today” might seem laughable. But in the age of COVID-19, a quick turnaround on a new site could literally be a matter of life and death. In mid-March, San Mateo County, California reached out to the Interpersonal Frequency (I.F.) Solutions & Support team because their county, home to roughly 750,000 residents, had been one of the first in the U.S. to adopt a shelter-in-place order. The traffic on their county website had more than quintupled, and their current homepage was not working to convey vital and quickly evolving information in simple and accessible ways. 

Fortunately, San Mateo’s Drupal site was well-suited to the challenge. We knew we had the foundation for a solution, equipped to handle even a surge of visitors and able to support the rapid deployment of new content templates. 

We knew that our company was well-suited to the challenge, as well. Having collected aggregated analytics data and best practices from other civil emergencies, we understood the essentials needed, and we had clear indications of an urgent public need for COVID-19-related responses from municipal digital infrastructure. I.F. assembled a team of seven experts in content, user experience, and Drupal development. The team dove in to solve the specifics with the goal of supporting San Mateo’s residents and County staff as efficiently and effectively as possible. 

screenshot of the websiteOur team worked with the client to marry best practices with their specific needs, such as clearly communicating and providing access to the public services still available online and breaking down information silos between government departments. We identified priorities and set out to provide a one-stop-shop for local COVID-19 updates that would be accessible, mobile-responsive, user-centered, and easy to maintain and update. We also set out to create a solution that could launch and assist the public even as the county was still developing new interior pages and that could morph to support new priorities as the situation evolved. We needed a site that would work now, next week, next month, and beyond. 

Drupal allowed us to address all of these goals. After a near round-the-clock effort over six days -- including a weekend -- we deployed. The design launched as a system of content cards that could be rearranged and repurposed as needed. It was purposely mobile-forward and flexible. The county has continued to shape and adjust the site as the situation and their priorities evolve, and you can see the latest iteration at SMCgov.org
 

May 14 2020
May 14
May 14, 2020 Drupal

Generically speaking, there are two kinds of files, when you manage a website- or app: public or private. Technically speaking you will have to decide how your content management system will manage those files and how to apply the correct security on them. This depends on the kind of services you are providing with your website- or app.

Public files

These are primarily used by websites with public content, with nobody logging in (except for content managers and admins) and which are mainly used to provide information regarding products and/ or services.

Private files

These are primarily used in case of a web application such as:

  • Social intranet;
  • Online community;
  • Chat application.

For the last one you’d like all files being uploaded by a user not to be visible for just everybody – and you’ll have to design your system accordingly.

Private and public files in Drupal

Drupal contains an extensive file management system which can facilitate public and private files. You can reach the settings via the configuration screen:

As soon as you click on the File system the details will appear:

  1. Directory where the public files are being saved.
  2. The absolute URL which is put in front of all public files
  3. Directory where the private files are being saved, in this case not activated yet.
  4. Standard way how a file can be downloaded, as soon as the private files directory has been set up, you’re also able to opt for private.
  5. Time before temporary/ orphaned files will be removed permanently. This concerns all files with status 0 in the database.

Activate Private files in Drupal.

The above is a standard installation, with the files set on public. But as described, you might want to protect your files, making them accessible to users with the right permission only – instead of the whole, anonymous world. This is how to do it:

Configure the private files directory in settings.php:

In this case you opt for ../files. Makes sure this directory is outside the webroot, otherwise there might be a chance that your private files are publicly available anyway. If you empty your caches after that (Flush all caches) you can pick you pick private files as default download method:

  1. The path as set in settings.php
  2. Adjust the /tmp directory, ensuring temporary files to also be protected.
  3. Set private files as default download method.

Now, Drupal is configured to treat all files as private: if visitors want to download a file, or want to look at an image for example, it will be via a Drupal system call and not by directly invoking the file by the browser. In that call Drupal decides whether the visitor concerned has permission to download the file.

Determining yourself whether someone is allowed to download a private file or not with the help of hook_file_download().

Currently, we are building a the chat for Lucius based on Drupal and NodeJS. This has group chats, in which files can be shared. Of course we only want people in the group concerned to be able to download the files from that group. For example, if you’re not in group A, it ought to be impossible to approach files in that group A.

File management

For more information, see the files manual.

This concerns a custom web-app, that’s why Drupal doesn’t have suitable permissions to sufficiently secure this. but no worries: hook_file_download() to the rescue, here is a code which we produced in our .module file:

Drupal recognizes the hook_file_download(),making sure it will invoke this function when someone is about to download a file via Drupal’s private file system.

What this code basically does:

  1. Checking who the current user is.
  2. Checking whether that user is in the channel to which the file has been uploaded.
  3. When the user is in the channel: loading file and returning file, making it available for the visitor concerned.
  4. When the user is not in the channel concerned: provides a not found.

Wrap up

Generically speaking, there are public and private files on the internet. Determine which file system you need, before you start producing an online platform, website or app. If you deploy Drupal, I hope that you can structure the files properly and securely with the information as provided above. Any questions? Let me know!

Image Credits

May 13 2020
May 13

As the global pandemic continues to spread — causing widespread sickness and death, restricting in-person human contact, creating additional responsibilities at home or financial hardships, or any of the countless other changes to daily life that have resulted in feelings such as fear, anger, boredom, or uncertainty — this virus has forced some of us to reassess our values and our place in the world. While the majority of us who participate in the Drupal community remain focused squarely on technical issues, others might find now is an especially good time to take a closer look at Drupal's Values and Principles. For those of us privileged enough to have the time and space to consider more philosophical questions, we can ask if Drupal's stated values (still) align with our values, or even consider the role of Drupal in our lives when the pandemic subsides.

This article — the first in a series of articles exploring Drupal's values and principles — considers Drupal's first principle, "impact gives purpose," which is one aspect of the first value, "prioritize impact." On one level, the first principle is merely practical. It concludes by prioritizing the "stakeholders" we should consider: "When faced with trade-offs, prioritize the needs of the people who create content (our largest user base) before the people who build sites (our second largest user base) before the people who develop Drupal (our smallest user base)." In its simplest form, this principle tells us that Drupal ranks the needs of content creators before the needs of the developers.

However, the first principle offers considerably more depth. While acknowledging the practical nature of the Drupal software, it calls on us to aspire to a higher goal: "When contributing to Drupal, the goal is often to optimize the project for personal needs ('scratching our own itch'), but it has to be bigger than that." Thus, Drupal is presented as much more than simply a good product.

The phrase "scratching our own itch" has become a platitude. It's everywhere. The Harvard Business Review called it "one of the most influential aphorisms in entrepreneurship." The phrase is well known among software developers in part because in his influential 1999 book, The Cathedral and the Bazaar, (the highly controversial) Eric S. Raymond wrote, "Every good work of software starts by scratching a developer's personal itch." In the Drupal community, however, we see ourselves as aspiring to much more. 

As the first principle states, "Slowly, focus shifted from writing the perfect code to growing the project, and amplifying Drupal's impact through better marketing, user experience, and more." 

Countless individuals and Drupal subgroups express their desire to impact people. For instance, the Drupal agency Palantir prioritizes impact that is "positive," "lasting," "thoughtful," and "deliberate." Over at ThinkShout, a Drupal agency that works "with courageous organizations that put people and the planet first," the "impact" they aspire to in their first core value "is driven by our sense of connectedness and desire to deliver meaningful, measurable results." Countless individuals and organizations in the Drupal community feel motivated by a sincere desire to positively "impact" other human beings.

Drupal's first principle is especially ambitious in describing the impact of the Drupal community: "Prioritizing impact means that every community member acts in the best interest of the project." It seems unlikely that "every community member" can or should make the Drupal project their top priority. Though it may be idealized, it's a worthy goal. We also must reiterate that people will necessarily begin with their own needs.

Contributions to the Drupal project should not come at personal expense. Imagine telling a single parent, who recently lost their job and wants to build a career with Drupal, to consistently act "in the best interest of the project." Change should come from individuals who have the capacity to help others. Part of why some of us contribute to Drupal is because we imagine another human being finding value in our work. We do not require those who benefit to give back. In this idealized form, we encourage people to participate, but we give with an open hand and no expectation of reciprocation. We contribute because we believe our actions have meaning. As the first principle states, "We derive meaning from our contributions when our work creates more value for others than it does for us."

When we look inward to examine our value systems, we probably do not want to find a heap of clichés, and phrases like "prioritize impact" and "create value for others" might sound rather cliché to some ears. In fact, on various lists of "business buzzwords," the word "impact" takes the top slot. The noun "impact" comes from the Latin impactus, which means "collision" or "striking one thing against another." The cultural and historical context of "impact" doesn't negate its usefulness, but if the real goal is to "derive meaning," it might be helpful to reconsider this principle in more human terms.

As previously noted, much of Drupal's first principle points toward bigger goals that extend beyond the conference room to a human-centered skill that good people work to cultivate: generosity. We seek to help others, both at home and in our careers. The business-friendly language in the first principle like, "maximize the impact the project can have on others," could, for at least some of us, be read as "practice generosity toward others." We seek to use Drupal for Good or even live in (with) Drutopia.

Thanks to Drupal and its community, some of us possess the fortunate capacity to help others. If that describes you, then consider in what ways you have the opportunity to be generous. Toni Morrison — the iconic writer, activist, and college professor who became the first African-American woman to win the Nobel Prize in Literature — used to tell her students:

"When you get these jobs that you have been so brilliantly trained for, remember that your real job is that if you are free, you need to free somebody else. If you have some power, then your job is to empower somebody else. This is not just a grab-bag candy game."

In this case, Morrison's inspirational words apply not just to students, but to countless people in the Drupal community. Many in our community have freedom and power. We have the opportunity to help others. Help other Drupalers. Help kids. Help the homeless. Help anyone in need. Maybe even help Drupal and give to #DrupalCares. If your actions produce positive results, keep going!

Ultimately, action matters more than language. Whether you feel motivated by the desire to make an impact, or you want to practice generosity, don't let up because the world has changed. Take another look at Drupal's Values & Principles and determine for yourself if they motivate you to action. This is not just a grab-bag candy game.

May 13 2020
May 13

Web accessibility is an inclusive design that ensures everyone can access your website, no matter their abilities. In the same way a ramp on the sidewalk makes sure someone in a wheelchair can get over the curb, having an alternative (alt) text on an image can make sure someone using a screen-reader can understand what the image conveys.

Types of Disabilities

Globally, 1 in 5 people have some form of a disability and someone's ability can change over time. For example, as adults age, they may lose some of their sight or hearing. A disability can also be temporary such as a broken arm or misplaced glasses. Sometimes the disability can be situational: someone on a busy subway who cannot hear the audio in a video would rather read captions, and someone by the pool in bright sunlight is in need of high contrast.  

Disabilities vary considerably. Some users with poor eyesight need high contrast and to increase the font size to access the content. Users who are blind need a screen-reader to access websites. Users who cannot hear need alternatives to access the audio content. Users with a mobility impairment may need to use voice activated commands or a mouse alternative such as a mouth-operated joystick to access the content. Users with epilepsy need to avoid quickly flashing content.   

How to Make Your Website Accessible

The best way to ensure your website is accessible is to provide multiple ways of accessing your content, such as alt text for images, captions for video and the ability to navigate with a keyboard instead of a mouse. Making sure the layout and structure of your website is logical, intuitive and simple to navigate can also make it easier to use for everyone.   

Why Web Accessibility Matters

Well, maybe now you're saying to yourself equal access sounds nice, but why should I care about web accessibility? This seems like an extra headache that is going to cost me money. Well, in fact, not caring about accessibility is going to cost you money. If your website is not accessible, you risk losing a significant portion of potential clients since 20% of the population will not be able to use your site. Second, the law mandates it.   

In the US, Title III of the Americans with Disabilities Act includes websites and now applies to any public-facing businesses and private businesses in 12 categories, including sales, entertainment, service establishments, recreation and more. A website which is deemed inaccessible to someone with a disability can be forced to immediately redesign the website and to pay monetary damages and the other party's attorney fees.   

In Canada, four provinces currently have web accessibility laws: Quebec, Manitoba, Nova Scotia and Ontario. The Accessibility for Ontarians with Disabilities Act (AODA) is the most comprehensive of the four, and aims to create a barrier-free Ontario by 2025. To this end, by 2021 all private and non-profit organizations with more than 50 employees and all public organizations must make their websites compliant with Web Content Accessibility Guidelines (WCAG). The federal government is looking to pass web accessibility guidelines in the near future with the aim of enforcing WCAG. We can expect Canadian federal web accessibility laws to be rolled out soon.   

With all this in mind, it makes sense to build accessibility into your website design and updates now before you are hastily forced to do so by new laws. Or, before you get sued. In 2019, the pizza giant Domino's famously lost a US Supreme Court Case (Domino's Pizza v. Guillermo Robles) by failing to make their website accessible to a blind man who used a screen reader to access their site and mobile app. And their brand will forever be remembered as the big bad pizza chain who went up against a blind man in court. And lost. Don't be Domino's. The damage to your brand alone is reason enough. 

Accessibility Is a Human Right

Web accessibility is a human rights issue. It is imperative that everyone can access the same services in society, no matter their abilities. Now more than ever, many essential services, such as banking, healthcare, utilities bills and education are moving online. The laws have been slow to catch up to the internet but as the internet becomes more and more integrated into our everyday lives, the courts are finally catching up. There is no time like the present to design a website with accessibility in mind, or to incorporate accessibility as you update your website. Also, it can just make it easier for everyone to navigate.   

We're happy to help get you there. Contact us if you want us to help make your website accessible, or take our Web Accessibility training.

May 13 2020
May 13

What is the day-to-day life of a Drupal core committer like? Besides squashing bugs and shepherding the Drupal project, the maintainers responsible for Drupal core are also constantly thinking of ways to improve the developer experience and upgrade process for novice and veteran Drupal users alike. With Drupal 9 coming just around the corner, and with no extended support planned for Drupal 8 thanks to a more seamless transition to the next major release, Drupal's core developers are hard at work building tools, approving patches, and readying Drupal 9 for its day in the spotlight. But Drupal 9 isn't the only version that requires upkeep and support—other members of the Drupal core team also ensure the continued longevity of earlier versions of Drupal like Drupal 7 as well.

The impending release of Drupal 9 has many developers scrambling to prepare their Drupal implementations and many module maintainers working hard to ensure their contributed plugins are Drupal 9-ready. Thanks to Gábor Hojtsy's offer of #DrupalCares contributions in return for Drupal 9-ready modules, there has been a dizzying acceleration in the growth of modules available as soon as Drupal 9 lands. In addition, the new Rector module allows for Drupal contributors to have access to a low-level assessment of what needs to change in their code to be fully equipped for the Drupal 9 launch.

In this inaugural episode of Core Confidential, the insider guide to Drupal core development and Tag1's new series, we dive into the day-to-day life of a core committer and what you need to know about Drupal 9 readiness with the help of Fabian Franz (VP of Software Engineering at Tag1), Michael Meyers (Managing Director at Tag1), and your host Preston So (Editor in Chief at Tag1 and author of Decoupled Drupal in Practice). Learn more about how Drupal's core team continues to support the Drupal project as it gets ready for the latest and greatest in Drupal 9, due to be released this summer for eager CMS practitioners worldwide.

[embedded content]

Links:

May 13 2020
May 13

Keeping a castle secure requires you to keep watch in every direction. The same applies to websites — protecting your “digital castle” involves many different aspects.

Luckily, Drupal website security is on a pretty high level, so you just need to follow its best practices. You can always count on our Drupal support & maintenance team for the task of improving website security and implementing the best website security measures like:

  • switching to HTTPS
  • applying Drupal security updates
  • bringing order to roles and permissions
  • blocking access to important files
  • installing security modules
  • and many more.

Our team can not only protect your website but also your budget from extra expenses thanks to our reasonable pricing and quick problem solving.

Today, we are taking a closer look at one of the practices to improve website security that is rarely described — website session timeout. Let’s see how this is done by the Automated Logout Drupal module.

How to improve website security with automated logout

You might have noticed that online banking applications show a countdown of your session time. This session time is usually very, very short.

Of course, not all apps or websites deal with this level of sensitive operations. So their session expiration time may vary. Still, if you want to improve website security, your site needs an automated logout.

The explanation is simple: this feature prevents hackers from intercepting a user’s session ID and intruding into your site. This makes it one of the website security basics that are used to improve the protection level.

  • According to OWASP (Open Web Application Security Project), insufficient session expiration increases session-based attacks. The shorter your website session is, the fewer opportunities you leave open to attackers. So you should keep a good balance between security and usability depending on the purpose of your website.

Website security features of the Automated Logout Drupal module

As part of the security measures for a website, the Automated Logout contributed module in Drupal allows site admins to specify the time of inactivity, so users are automatically logged out when it expires.

The module is very flexible in its settings. Among its features to improve website security are:

  • different session timeouts for different user roles
  • individual website session timeouts on a per-user basis
  • customized notifications about the upcoming logout
  • JS mechanisms to keep users logged-in when they have multiple tabs open or are working on a form
  • and more

How to work with the Automated Logout Drupal module to improve security

Let’s see the module in action. With the module installed and enabled, go to Configuration — People — Automated logout settings. Here are the key details to configure:

1) The main time settings

  • Set the timeout value in seconds (60 or longer). If role-based timeout is activated, this setting will not be used.
  • Set the maximum timeout in seconds. This is the maximum time that can be set by users who are allowed to set their own timeout.

2) Time for a response

  • Set the timeout padding in seconds. This is the time a user has for responding to the dialog before the logout (whether they want to resume the session or not).

Automated Logout Drupal module - settings for time

3) Where to redirect users

  • You need to set the redirect URL to which a user is redirected after the session is over.

Automated Logout Drupal module - settings for redirect URL

4) User-specific and role-specific timeouts

  • You can disable user-specific logout thresholds if you want to forbid everyone from setting their own individual maximum logout time. If this is allowed, this can be configured in individual user profiles in the People section of the admin dashboard. However, it never exceeds the sitewide maximum timeout you have set in Point 1.

Automated Logout Drupal module - settings for user-specific and role-specific timeouts

  • You can enable role timeout if you want to allow specific user roles to set their per-role maximum timeouts and redirect URLs. The permissions for specific roles can be set in the People — Permissions section of the admin dashboard.

Automated Logout Drupal module - roles and permissions

5) The logout dialog settings

When the logout is approaching, it’s a good practice to show a dialog window to users that informs them about this and gives them a chance to respond “yes” or “no” to the option to reset their session. Here are the things you can customize:

  • The dialog title
  • The message to display in the logout dialog
  • The message to display after the logout
  • The type of message (status or warning)
  • The time for a user’s response (see Point 2).

6) The response buttons

It’s also possible to customize the “confirm” and “decline” button text in the dialog window or totally disable the response buttons.

If you need to improve the standard look of the buttons to meet your brand’s identity or customize the above-described process in any other way, just contact a Drupal team.

Automated Logout Drupal module - response buttons

Improve website security with our support experts!

It’s easy to stay safe when you take the best security measures for your website. Our Drupal development company knows how to improve website security, so let us help you make your site a protected place.

As support and maintenance experts, we strive to improve sites in every aspect, so you can ask us to improve not only your site’s security, but also its performance, SEO, etc.

You can reach out to us with tasks of any scope — from installing and configuring specific security modules to performing a comprehensive security audit at a good price. Drop us a line to improve website security today!

May 13 2020
May 13

Security above all! The Drudesk team would love to help all businesses make their websites secure.

This is why we offer our very popular service — a Drupal website security audit that we offer at affordable prices. During the audit, we perform in-depth checks and find security vulnerabilities. After a good clean-up, we always recommend using helpful tools that will help users keep an eye on website security.

One of these tools is the Security Review module that can quickly check a website for security vulnerabilities. In this post, the Drudesk help team will show how it performs a quick Drupal website security check on a number of important points.

Why is security important for a website?

Hackers use plenty of techniques (SQL Injection, cross-site scripting, remote code execution, and so on) to intrude into websites and manipulate their data for malicious purposes.

Hence the importance of web security checks — they help you discover your site’s weak points. Providing for your website safety allows you to:

  • ensure a crystal clear reputation to build a long-term customer relationship
  • protect your important business information from disclosure
  • keep your customers’ data (names, credit card numbers, etc.) intact
  • avoid being blacklisted by Google or other services due to security vulnerabilities
  • insure yourself from legal proceedings based on sensitive data manipulation
  • safeguard your business against direct money losses related to compromised data
  • keep your overall website performance smooth and never lose your conversions

The best Drupal security practices

If you are using Drupal, your situation with website safety is already favorable because Drupal is rated highly for security. However, to ensure Drupal website security, there are good practices website owners need to observe:

  • keeping your website up-to-date with the security releases published by the Drupal Security Team
  • using the HTTPS protocol for encrypted data transfer
  • setting the right roles and permissions to relevant users
  • taking precautions with the super admin user
  • using strong logins and passwords for admin accounts
  • doing regular backups
  • blocking access to important files
  • removing outdated modules
  • using helpful Drupal security modules

When it comes to this last point, in the collection of modules for checking and improving your Drupal website security, the Security  Review module will perform quick website security checks. Next, we describe its work.

Website security check with the Security Review module

The Security Review Drupal module can quickly check a website for security vulnerabilities. It performs an automated website security check on-demand, with a click on the admin dashboard.

This will give you a quick answer to the question “How secure is my website?” based on a number of factors. The module uses a very nice website security testing checklist:

  • Only safe extensions are used for uploaded files and images.
  • There are no dangerous tags in submitted content.
  • Untrusted roles do not have access to important permissions.
  • Error reporting is set to log only.
  • PHP files in Drupal files directory are not executable.
  • Files and directories are not writable on the server.
  • The private files directory is not in the server root.
  • There are no sensitive temporary files.
  • Untrusted users are not allowed to add dangerous HTML tags.
  • Base_url and trusted_host_patterns are not set.
  • Views are access controlled.

With the module installed and enabled, go to Reports — Security Review and click “Run and review” to start the website security check. After a few seconds of the check, you get a list of things to improve. Each of them can be opened for more details or skipped.

Security Review Drupal module

If you click on the “Settings,” you can select the website security check steps that should be skipped, set the “untrusted roles,” and choose to log the check results and skips.

Security Review Drupal module settings

The module does not do any improvements by itself — it is one of website security scanning tools. Its website security check is meant to inform you of what needs to be improved.

[embedded content]

Let us check your website for security vulnerabilities!

Dealing with safety is difficult, even if the website security test runs from just one click on your dashboard. You will also need to know how to properly fix the discovered vulnerabilities in the check. But you can always call Drudesk!

Our Drupal support and maintenance team is here to check your website for security vulnerabilities and increase its safety. We respect your budget and offer very reasonable pricing for all stack of support services, including security tests. After years of experience with various site vulnerabilities, Drudesk devs can quickly find the cause of the problem.

So drop us a line if you would like to:

  • install and configure the security modules that check and/or improve your site
  • interpret their website security check results properly and take measures
  • check the website security comprehensively — with an audit by our experts

Never hesitate to contact us! What could be more affordable than our services? A totally free consultation! Drudesk: here is where your Drupal website security starts.

May 13 2020
May 13

Drupal 9 roadmap

Drupal 9 will be released in 2020.

If you are a contributor of any module on drupal.org and want those sites to live long after the end of life in 2021, you need to prepare for Drupal 9.

Why should you do it at all? First of all, users of your module may want to have it on Drupal 9. Secondly, your clients may ask to migrate their websites to Drupal 9, so it’s better to be ready.

May 12 2020
May 12

For more than 13 years, BADCamp has been dedicated to providing the Drupal community with fun, inspiring, and safe opportunities to teach, learn and share together. While 2020 has seen many changes to the ways we interact with one another, our passion for open-source, and the people who contribute to it, boogies on!

For the safety of all members of our local and global communities, BADCamp XIV will be delivered in an online format. 

Mark your calendars for Oct 14-17, 2020 – the first-ever virtual BADCamp! Featuring all the things you love about BADCamp: trainings that help you level up your skills, sessions that promote learning from members of your community, opportunities to make new friends and connections, and lots of fun! Now, from the comfort of your own kitchen table, home office, Animal Crossing headquarters, sofa, or wherever your WiFi signal is strongest.

While we still have many details to work out, we want you to know that, wherever you are, we are in this together. We look forward to seeing you in October.

May 12 2020
May 12

As part of the Drupal Community Working Group's (CWG) continuing expansion of their Community Health Team, we are pleased to welcome Dr. Michelle Drapkin, a Behavior Scientist and Clinical Psychologist, as one of our two mental health subject matter experts. This team will focus on proactive programs to help promote the overall health of the Drupal community. With the COVID-19 pandemic causing various levels of anxiety for individuals around the world, we are working to provide resources to community members.

On May 22 we met with Dr. Drapkin for a Wellbeing Hour, where she walked us through some strategies to support our wellbeing during this challenging time. Dr. Drapkin is an expert in evidence-based approaches to managing stress and anxiety and gave us a tour down a buffet of options to support our health and wellbeing. We got a taste of using present-moment awareness to manage your stress and learned about leaning into your values, changing your relationship with your thoughts, and being more intentional with communication to support your relationships (at work and home!).

About our speaker:
Dr. Michelle Drapkin is the Owner/Director of the CBT Center of Central NJ. She is one of the newest members of the CWG team helping as a mental health subject matter expert on the Community Health Team.

About the Drupal Community Working Group (CWG):
The CWG is a volunteer group whose mission is to foster a friendly and welcoming community for the Drupal open source project and to uphold the Drupal Community Code of Conduct.
 

File attachments:  CWG-Wellness-hour.png Drupal Wellbeing Hour 5.22.20 handouts.pdf
May 12 2020
May 12

This post was written collaboratively by tedbow and hestenet.

Project Update Bot now enabled for all projects

The initial testing period for the Project Update Bot is now complete, and the Bot has been enabled for all projects.

If you are a project maintainer and would like to understand how to control the bot for your projects, please consult the instructions on the bot's account page.

 

Drupal 9.0.0-beta2 has been released, and Drupal 9.0.0 is scheduled to be released on June 3, 2020. The upgrade from Drupal 8 to Drupal 9 should be the easiest major version update in the last decade of Drupal’s history. One of the reasons for this is because over 1,700 contributed modules already have a Drupal 9 compatible release. Making a module that's already compatible with Drupal 8 compatible with Drupal 9 just requires removing deprecations. When looking at just one module, these changes are usually trivial, but when we consider managing over 8,800  Drupal 8 modules on drupal.org the upgrade process could easily take hundreds or thousands of hours from the Drupal community.

Fortunately we can accelerate this process dramatically by using Drupal Rector, a tool developed by Palantir.net and  Pronovix. Drupal Rector can be used by developers to automatically fix many of the deprecations needed to make a module Drupal 9 compatible. In fact Drupal Rector can currently fix deprecations in more than 2000 existing projects on Drupal.org. Although using Drupal Rector is not difficult, running it manually on all Drupal 8 modules would have taken hundreds of developer hours to complete.

To accelerate upgrading of modules to Drupal 9 the Drupal Association has partnered with Acquia and Palantir to automatically provide patches generated by Drupal Rector for all contributed modules possible. For many modules these patches will be able to make the modules fully compatible with Drupal 9. For some modules it will still be necessary for a developer to manually replace other deprecations. Patches will also be provided for contributed themes but preparing a theme for Drupal 9 will require other changes such as updates for Twig 2.

These patches will be posted to issues created by the new Project Update Bot. An example issue can be seen here: https://www.drupal.org/project/entity_block_visibility/issues/3134823

The Project Update Bot is not associated with any individual or company and therefore will not affect issue credits for any individual or company. If maintainers find the patches provided by the bot useful they are welcome to credit the bot account as a way to provide feedback on this initiative.

It will be up to the project maintainers to decide if they want to use these patches but in many cases the patches can help speed up the process of updating a module for Drupal 9 dramatically.

Maintainer Options

For project maintainers there are a few options for dealing with these issues

  1. Leave the issue open and apply the provided patch to remove some or all Drupal 9 deprecations. The Project Update Bot will check weekly if Drupal Rector is able to remove new deprecations and post a new patch if possible.

  2. Remove the “ProjectUpdateBotD9” tag from the issue to stop new patches from being posted. If you would like to use the issue and the patch as a starting point simply remove this tag and the bot will not post any new patches. Add the tag back and the bot will post new patches if possible.

  3. Close the issue to stop the bot from posting new patches. If you are already handling deprecations in another issue or otherwise don’t find the patches helpful simply close the issue and the bot will not post any new patches

Providing feedback

If there are problems with one of the patches posted by the Project Update Bot, such as it does not correctly replace a deprecation, you can file an issue in the Rector issue queue. For other issues with the bot, for instance if the issue summary created by the bot is unclear,  use the Infrastructure project issue queue using the component “Bot: Drupal Rector”.

How can you help?

While Drupal Rector can currently fix some or all of the deprecations in over 2000 contributed modules to Drupal 9 it currently only covers 50% of total Drupal 9 deprecations. New Rector rules are being added with every new release of Drupal Rector. You can help by making new Drupal Rector rules which will make it possible for Drupal Rector to upgrade even more modules.

May 12 2020
May 12

When your website users are able to quickly find what they are looking for, you naturally get more conversions. A good UX consultant will always recommend you to add a search function to a website.

Read on to discover more details about why search is important. If you are using Drupal, this post will be of special interest to you because we will describe how to make the website search functionality really fast and user-friendly with Lunr.js.

Why is search important on a website?

Many customers ask “Does my website need a search?". On large and complex websites, an internal website search is a must-have in order to improve website navigation. The decision to add a search box to a website is especially vital for content-rich websites, e-commerce stores, knowledge bases, and so on.

However, it is also very helpful for small and medium-sized websites. Here we will discuss the ways search functionality on any website, when it is fast and user-friendly enough, can benefit its owner:

  • If a user finds what they need through the search box quickly, they are likely to purchase it.
  • Search results give you new ideas about products or services users are interested in.
  • You get information about user behavior for your marketing strategies.
  • A search feature on your website provides you with new SEO keywords.
  • Adding search functionality to a website makes your design more customer-centric.
  • A search box increases your session duration and reduces the bounce rate.

You can always reach out to our web development team for a free consultation and further creation of a search feature on your website at very affordable prices. We respect your budget and will recommend a fast, easy-to-use, and efficient search solution that will not require extra costs. Meanwhile, let’s discuss how search functionality is created on websites.

How to add a search function to a website built with Drupal?

The answer to the question about how to set up search functionality on a website, depends on the CMS you are using. Each CMS has its own special extensions that provide for the search feature.

In Drupal, to create basic search options for smaller sites, the built-in Search module is enough. It allows your users to search for full words in Drupal entities (content nodes, users, etc.). You can also specify the indexing settings and choose the ranking factors like:

  • publication time
  • activity in comments
  • keyword relevance

Through the use of extra modules, Drupal websites can also get more complex search features like:

  • faceted search
  • search by alternate spellings
  • similar content suggestions
  • result highlighting
  • search through attachments
  • multisite search
  • and much more

To achieve this, they connect to robust search platforms like Apache Solr or Elasticsearch through contrib modules like Search API Solr Search and Elasticsearch Connector, as well as using modules like Search API, Facets, and many more.

Superfast and easy-to-use internal website search with Lunr.js

In addition to the ones described above, there are other interesting, JavaScript-based options to add a search function to a website built with Drupal. They offer specifically fast client-side search. One of these we are sharing with you right now — your Drupal can have a search functionality based on Lunr.js.

What is Lunr?

Lunr.js is a full-text search library to use in the browser. It is a small but full-featured library that provides great search experiences. Lunr.js offers a simple search interface for finding the content that best matches the search queries. It requires no server-side search services and needs no external dependencies.

You might have noticed its “lunar” brand design. Lunr.js is an alternative to the famous search engine Solr. “A bit like Solr, but much smaller and not as bright,” is the official slogan of Lunr.

Lunr.js

All JavaScript solutions are known for exceptional speed, and Lunr is no exception. Lunr.js search functionality is especially good for cases when an instant search in Drupal is needed.

A sum-up of Lunr.js search features

  • instant search results with suggestions
  • client-side search without overloading Drupal
  • keyword-based search
  • partial and fuzzy search options
  • a scoring system for showing relevant results
  • paging
  • location history
  • lazy-loading search results
  • and more

Modules for the integration between Lunr.js and Drupal

  • Lunr search

The Lunr search module integrates Lunr.js with Drupal. It uses Drupal Views to pre-build a search index and the search result pages. These are delivered to the client using JavaScript. Its features include no-configuration multilingual support, custom field/facet searches, and more.

Lunr search Drupal module
  • Search API Lunr

The Search API Lunr module provides a Search API backend Lunr search with configurable fields. Instead of adding content to a search back-end, JSON files are loaded directly into the browser.

Add a search feature to your website with our experts!

Ready to give your website a new boost through adding a search functionality? Our website support agency experts are ready to do it at affordable prices.

We have both developers who specialize in Drupal and those who have mastered WordPress. JavaScript frameworks are another passion of our team, because we know they can enrich your search box, like any other website elements, with special speed and interactivity.

Contact us and let’s discuss your best price!

May 12 2020
May 12

Many people researching Drupal Commerce 2.x for Drupal 8 (or the upcoming Drupal 9) are likely wanting to either remove the extra ecommerce shopping carts or allow checkout for multiple carts. This blog post will explain why we have multiple carts—and why being able to checkout with multiple carts is challenging, but possible.

Why you can have more than one Drupal Commerce cart

First, let’s demonstrate what Commerce 2.x can do out of the box for a single user and is often considered a bug. 

  1. Go to Acro Media’s demo store.
  2. Start out as anonymous and register as a user.
    1. Register here.
    2. Check your email/spam and click a link.
    3. Set your password because you’ll need to log back in shortly.
      Note: Acro doesn’t use your email address used on the account sign up on this site to contact you for marketing purposes. You can opt into marketing materials by clicking the large red help question mark on the right.
  3. Once registered, add something to your cart, and log out.
  4. Add something to your cart and log in.
  5. Go to /cart.

Shopping-cart

If you are seeing two carts, then you have discovered, like many others, that Drupal Commerce 2.x shows multiple carts by design. Drupal Commerce 1.x created multiple carts like this as well, but would only show one cart at a time. In 1.x, you could follow the five steps outlined above, then checkout and your original cart would display.

Why? Because the system will not delete carts. We’re using a simple anonymous session to create two carts in a potentially common edge case.

The pros and cons of multiple carts

Pro Con
  • Customers never lose a cart, even if their use of the site means they have more than one.
  • You could have multiple sellers, enabling a marketplace feature to be built on top of the existing functionality
  • You could enable different checkout workflows (one for digital services, one for recurring services, and another for physical items that require shipping).
  • You could end up with a confusing user experience by making your customers check out multiple times.
  • Payment and fulfillment must be handled separately for different items or different vendors.
  • More than one cart presents a significant visual challenge for designers. In the cart dropdown, for example, how do you should more than one cart? On the cart page, for another example, how do you handle more than one checkout button?

Turning off multiple carts in Drupal Commerce 2.x

There are two relatively simple Drupal modules you can use to show a single cart to a user:

Commerce Combine Carts—If this module is turned on, the multi-cart demo above would not produce two carts.

Commerce Cart Advanced—This module packs a lot of features into it for the crowd of users who want management tools around their multiple cart experience, but it also includes the feature to display only one cart at a time. It was created and is maintained by Acro Media’s senior developer known as krystalcode (Dimitris Bozelos).

Checking out multiple carts, Etsy/Amazon style

The holy grail of marketplace commerce is multi-store and single-checkout. The idea is that you could have a site that features multiple stores and customers could check out once from more than one store. 

According to the original author and former maintainer of Drupal Commerce 2.x, bojanz, you can do this by coding a form that acts like a checkout flow-form, but changes more than one order simultaneously.

However, you also have to consider a number of other issues: 

  • Fulfillment—If the stores are selling physical products, how will these orders appear to the customer and to customer service for each store? Likely, each store would want to only see the products for which they are responsible.
  • Order management—Even Amazon does some weird things with orders for its customers. Often, orders are split up for seemingly no reason, changing order totals and making order management challenging for customers and for customer service.
  • Payment—If you, as the site owner, plan to pay stores from your own bank account, you’ll want to set up a single, site-wide payment gateway and manage disbursement payments to your store owners. If not, then you’ll require each store to have its own payment gateway credentials or some other even more complex setup.
  • Taxes—Assuming you have good solutions for all of the above, taxes will still likely make it very hard to move forward. Tax law is hard in the best of times, and depending on how you take payment, tax rules would need to be created and maintained per store. Solutions like Avalara AvaTax only work per store and can be overly expensive for small retailers.

The bottom line

Basically, you have a few contrib options if you want to manage carts for your customers. But if you want that elusive multi-vendor, single checkout, you’ll have to plan well according to your business needs. Regardless, the flexibility of Drupal’s ecommerce cart functionality is capable of creating the best ecommerce shopping carts out there, you just need to know how to do it.

May 12 2020
May 12

Drupal 9 is just around the corner and the beta release is out to be tested already! What’s your Drupal 9 plan?  Are you still in the “Why should I upgrade to Drupal 9 after all” phase? Or are you wondering what your next steps should be for Drupal 9 readiness? We have answers to all your questions including Drupal 9 features and a quick Drupal 9 checklist on how to prepare for Drupal 9.

The best way to prepare yourself for tomorrow is to give your best today. And very apparently, the Drupal community has done just that. I know, migrating to Drupal 8 from previous versions was hard. It meant a complete rebuild of the code and a lot of learning. But once you are fully onboard Drupal 8, life gets easier. Think of it as a hard climb for a gorgeous view from the mountaintop. Truly worth all the effort, isn’t it? So, if you’re still on Drupal 7 (or 6), this is a good time to migrate to Drupal 8 and then simply upgrade to Drupal 9 from there. As you read this, modules are being ported (and made compatible) to Drupal 9 as a collective effort by the amazing Drupal community.

drupal 9 readiness

The Much-Talked-About Drupal 9 Release Date

One of the most frequently asked Drupal questions lately has been about the Drupal 9 release date. So, when is the most-awaited Drupal 9 release date? Drupal 9 is currently scheduled to release on June 3rd, 2020. The Drupal community has been successfully releasing minor versions every six months since the adoption of semantic versioning in Drupal 8. Every minor version came with several valuable new features. 

Drupal 8 extensively depends on third-party libraries like Symfony, Twig, Guzzle, CKEditor and must keep up pace with their updates as well. For example, Symfony 3 (Drupal 8’s biggest dependency) will reach EOL (end of life) by November 2021. Drupal 8 reaches end of life as well. Drupal 9 will be released with the latest Symfony 4.4 support and will not be backwards compatible with Symfony 3. 

Drupal 9         The Drupal 9 Readiness Roadmap (Image Credits – Drupal.org)

Drupal 9 Features - What’s New in Drupal 9?

Here are some key features of Drupal 9 that we will be discussing about in detail thereafter –

  • Easy to upgrade to Drupal 9 (if already on Drupal 8)
  • You get the latest of the best! (Symfony, Composer, Twig, PHP, CKEditor and more)
  • Will receive community support and security fixes after November 2021 (after Drupal 8 EOL)
  • Subsequent Drupal 9 minor upgrade versions will be backwards compatible to Drupal 9
  • Drupal 9.1 will have an all new and modern default theme called Olivero to offer 
  • Many exciting features and enhancements to look forward to, starting Drupal 9.1!

Drupal 9 is already being built within Drupal 8. Drupal 8.9 will release along with Drupal 9.0 in June 2020. This is because Drupal 9 is going to be the same as Drupal 8.9, except that it will be a cleaned-up version that is updated with support for its third-party dependencies. And hence one of the greatest Drupal 9 features is that it is so easy to upgrade!

Every new minor version of Drupal 8 saw many new features , but it also contained a lot of old code so it could be backwards compatible. This “old code” is also famously known as “deprecated code”. Because of the dependencies on third parties like Symfony, Twig, etc., Drupal 9 will incorporate updates to these dependencies. Drupal contributors and module developers are collectively making the road to Drupal 9 easier by eliminating “bad smelling code” (as Jacob Rockowitz calls it in his blog about deprecating code for his Webform module) from various Drupal 8 modules.

       Drupal 9.0 = Drupal 8.9 – Deprecated code + Upgraded dependencies

Drupal 9          What’s new in Drupal 9.0 (Image Credits - Drupal.org)

The Drupal 9 Readiness Checklist

Regardless whether you’re upgrading from Drupal 7 to Drupal 9 or Drupal 8 to Drupal 9, you will need to start planning for Drupal 9. The scheduled release is soon approaching and now is a good time to get prepared for Drupal 9. 

  • Drupal 7 to Drupal 9 Migration

If you are still on Drupal 7 and looking forward to getting onboard Drupal 9, it is not too late. Ideally, it is recommended to split this process into two parts – 1. Migrate to Drupal 8 and 2. Upgrade to Drupal 9. 

  • Migrate content and code to Drupal 8
  • Check for availability of modules in Drupal 8 using the Upgrade Status Drupal module
  • Upgrade your Drupal 7 modules to Drupal 8 with the help of modules such as Drupal Module Upgrader
  • Stay updated with the latest core releases.
  • Remove any deprecated code
  • Upgrade to Drupal 9

And as already discussed, upgrading from Drupal 8’s latest version to Drupal 9 is easy as pie. A Drupal 7 to Drupal 9 migration will take as much resource time (and resource budget) as a Drupal 7 to Drupal 8 to Drupal 9 upgrade. Drupal 7 will reach end-of-life by November 2021 and will continue to receive community support until then. For detailed instructions on how to install Drupal 9, check this article.

  • Stay Up to date with Drupal 8

With every new minor version release of Drupal 8, the benefits are not only restricted to access to new features and enhancements. It also takes you one step closer to Drupal 9. Since Drupal 8.8 is the last minor release before the Drupal 8.9 release (which also happens at the same time as Drupal 9!), it is the last Drupal 8 version to contain significant feature additions. Drupal 8.9 releases on June 3rd, 2020 and will include more stable modules (that were previously experimental) and a few UX and API enhancements. So, the best thing to do now is to keep Drupal core updated and update your website to Drupal 8.8.  

  • Weed out the Deprecated code

Make way for new and improved Drupal 9 features by removing old and deprecated code from your Drupal 8 codebase. When you keep Drupal core and contributed modules up to date, you are also embracing cleaner code. Updated versions remove usage of deprecated code and API. There are various methods to check for deprecated code. 

  • Sometimes functions are marked with @deprecated annotations that warn the developer that the following code is deprecated and what they should be using instead. 
  • Use a command-line tool like Drupal Check (by Matt Glaman from Centarro) to help check for deprecated code and other bugs. It can also be integrated in continuous integration environments.
  • Download the Drupal 8 Upgrade Status module on top of Drupal-Check for a more UI based solution. It can scan your entire Drupal project and generates a clean visual report that illustrates any compatibility issues, the need to upgrade modules to the latest version and Drupal 9 readiness. 
  • Drupal.org also offers support to check for Drupal 9 readiness and deprecation within its testing system. Like enabling static analysis with phpStan or by setting a trigger_error() when a deprecated level is reached.

    Once identified, it is time for some manual work to remove the deprecated code and refine existing codebase. Use automated tools like Drupal 8 rector to resolve some code issues, although it does need some manual intervention.

Drupal 9 Checklist                                     
                                                   Drupal 9 Checklist

Pages

About Drupal Sun

Drupal Sun is an Evolving Web project. It allows you to:

  • Do full-text search on all the articles in Drupal Planet (thanks to Apache Solr)
  • Facet based on tags, author, or feed
  • Flip through articles quickly (with j/k or arrow keys) to find what you're interested in
  • View the entire article text inline, or in the context of the site where it was created

See the blog post at Evolving Web

Evolving Web