Upgrade Your Drupal Skills

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

See Advanced Courses NAH, I know Enough
Apr 21 2021
Apr 21

Dealing with constant upgrades and changes to the project requirements is not just the despair of all developers, but also dents the pockets of the clients. When discussing the project development - time and cost go hand in hand. The more the development time, the higher will be the cost. 

Resolving these hurdles is easy with, Drupal distributions as these

(1) make project development less costly to both build and maintain and 

(2) make it more commercially interesting

Leading media and publishing enterprises across the globe are already testifying the positive impact that Drupal has made on their digital business. By enabling a professional editing experience, multi-channel publishing, and personalization distributions are revolutionizing the way media and publishing houses approach Drupal.

media-publishing-drupal-statisticsSource: Drupal.org

But, what is a Drupal Distribution?

Drupal Distribution accelerates website development not just by saving time and cost but it provides quality code with out-of-the-box Industry-standard features. Maintenance of distribution is simpler because updates for all its modules and features can be performed in one shot!

According to Drupal.org “Distributions provide site features and functions for a specific type of site as a single download containing Drupal core, contributed modules, themes, and predefined configuration. They make it possible to quickly set up a complex, use-specific site in fewer steps than installing and configuring elements individually.”

Distributions provide site features and functions for a specific type of site as a single download containing Drupal core, contributed modules, themes, and predefined configuration.

Looking to redesign or start your website using Drupal in 2021? Explore the detailed comparison of the top media publishing distributions that are EzContent, Rain, Varbase, and Thunder to choose the right solution for you.

Top 4 Media & Publishing Drupal Distributions for 2021

Content Listing from EzContent

Content Listing from EzContent


    • Structured content for SEO: With EzContent you can not only easily create structured content but also provides a range of approaches to enable search engine optimization (SEO), including flexible fields, built-in metatags, Schema.org usage, and a large library of available components for rich text, media, and other common content needs.

Component Library EzContentComponent Library EzContent


    • A page builder for landing pages: With EzContent’s page builder, editors can create layouts on the fly without any dependency on developers. They can use the convenient drag-and-drop interface to easily place reusable components onto pages as needed. Similar components can be reused by configuring in different variations.

Drag & Drop Layout Builder EzContentDrag & Drop Layout Builder EzContent


    • An API-ready decoupled CMS: EzContent provides OOB Headless, CMS integration with Gatsby, React, and Angular. Thanks to EzContent distribution, editors are still empowered with legacy CMS features like previewing unpublished content, placing blocks and content using Layout Builder. Ready to use open-sourced Angular and React starter kits are available.

Choice of Frontends, OOB starter LitsChoice of Frontends, OOB starter Lits


    • AI-powered content generation: For content, leverage auto-tagging and auto caption to generate meaningful and contextual tags driven by Google AI and AWS Rekognition.

    • Now you can also manage and perform an intelligent search leveraging image recognition, image detection, and Deep Learning algorithms. Generate auto Podcast out of Article Content on the fly while curating content with help of Google AI.

auto-tagging-ezcontentAuto-tagging for Images

  • Thunder

    Thunder was designed by Hubert Burda Media and released as open-source software under the GNU General Public License in 2016. It consists of the current Drupal functionality, lots of handpicked publisher-centric modules with custom enhancements.

    Key Features & Pros of Thunder

    • Publisher Features: Create articles dynamically with paragraphs. Using paragraphs, you can add text, pictures, videos, Instagram, or Twitter Cardscards to your article with a WYSIWYG editor. — Change the order of elements by dragging and dropping the content wherever you like it.

    • LiveBlog: Cover events in real-time with the liveblog.

    • Google AMP: With the integration to Google AMP, you can deliver not only text but also images, galleries, videos, as well as Instagram and Twitter cards.

    • Improved media handling: With the help of the media browser, it’s very easy to add pictures, galleries, or videos to your article. You can upload new pictures to the media browser by just drag & drop.

    • Mobile-Friendly theme: With the Thunder installation, you get a responsive theme for the frontend and backend.

  • Varbase

    Varbase is an enhanced Drupal distribution launched in Feb 2019. It is packed with adaptive functionalities and essential modules that speed up your development and provides you with standardized configurations. The essence of Varbase lies within the basic concept of DRY (Don’t Repeat Yourself). It removes the need to perform repetitive tasks with the help of its modules, features, configurations that are included in the Drupal project.

    Key Features & Pros of Varbase

    • Publisher Features, Flexible Content Structure & Categorisation: The flexible content architecture allows for custom pages, layouts, and integrations for your special use cases. Content is organized through a predefined and scalable structure for better navigation.

    • Media Management: Full-Feature libraries to provide an appealing way to display media galleries.

    • Multilingual options with localized and translated content, translated interface, date formats, country flags, modern fonts, and more.

    • Mobile-Friendly theme: Fully optimized for mobile.

  • Rain

    Mediacurrent created the Rain Install Profile in May 2019. Rain comes prepackaged and pre-configured with components

    Key Features & Pros of Rain

    • The rain has a strong content model & focuses on editor features. It combines content, administrative & editorial features with a base theme and style guide. It also implements Components based theme, meaning components can be reused, and a build-in style guide.

    • Rain has a preconfigured API for exposing content to other applications in the JSON format. Rain can be paired with frameworks like Gatsby

Metric Comparison:

Screenshot 2021-04-22 at 1.01.06 PM

We did not forget Acquia Lightning!

The list of media publishing distribution is incomplete without mentioning Acquia Lightning. However, Acquia is ending support for the Lightning distribution in November 2021, simultaneously with Drupal 8.

Read the official announcement here

Conclusion

There are a lot of distributions to choose from. Evaluate what your product requires, map it with the vision of the distribution. Do check the roadmap, backlog, compatibility, and maintenance for the distribution.

If you’re looking for a smart distribution, OOB Components, and you want to be flexible on a choice of frontend, EzContent provides a starter kit to save your development time by 30%. 

Apr 21 2021
hw
Apr 21

Drupal 8 was a major revolution for the Drupal community in many ways, not least of which was because of the complete rearchitecting of the codebase. We picked up the modernization of various frameworks and tools in the PHP community and applied it to Drupal. Of course, this makes complete sense because Drupal is written with PHP. One of the things we picked up was the PHP’s shift to the object-oriented programming approach.

The shift to using objects enabled us to collaborate with the rest of the PHP community like never before. On the language front, we had PHP-FIG working on standards such as PSR-4 which was adopted by many libraries. And on the tooling front, we had composer which allows us to use other packages with minimal effort. These developments made it possible for us to build Drupal on top of the work from the larger PHP community. However, this meant that we had to follow the same style of programming as those libraries and thus began a massive re-architecture effort within Drupal.

The refactoring story

Drupal is a product built and maintained by a diverse group of geographically distributed and mostly unpaid people. Further, Drupal’s value is not in just the core system, but also the tens of thousands of modules, themes, and distributions maintained by a similar group of people. All the modules, themes, and distributions depend on the core Drupal’s API which means that making any change to the core is very risky.

Because of this, it is simply not possible to isolate Drupal and refactor. We had to incrementally refactor parts of Drupal while making sure there is sufficient documentation for people to upgrade their modules. This inadvertently, but predictably led to significant overengineering in Drupal’s codebase. There are a lot of parts of Drupal several layers down which may seem messy but there is a reason. The problem is that those reasons are very hard to surface. More importantly, they become a hurdle for more core contributors to simplify the system.

I have to caveat this by pointing out that I am not an expert core developer myself. Not even close. The above is just my observation in working with the core. You may say that this is practically an outsider’s perspective and you are right. But I have learnt that an outsider’s perspective is often the most valuable one.

Objects, objects everywhere

The new structure has brought in dozens of new practices (such as the DIC). This often means that you need to augment the structure to support that. Soon, we have classes with multiple adjectives and nouns everywhere reminiscent of Java. This makes the code even more opaque putting in more hurdles for people who are new to Drupal. Even experienced PHP developers may find trouble navigating the sometimes unintuitive names of various components because of the historical context.

With people managing to work in this new reality, I have found that people’s answer to all problems is simply more objects. Copy-paste solutions from various places (aka StackOverflow) and make it work. At work, I have seen more and more code samples from people who are convinced they are presenting a superior solution simply because they are using classes with names like subscriber and controller while not realising they are breaking functionality that would not have broken in Drupal 7.

This may seem vague at this point and I hope to present more specific examples in future posts. I will leave you with these abstract thoughts for today. I hope you found this interesting even if not useful.

Apr 21 2021
Apr 21

This is the second of the two-part series on ‘Formulating a business case for a new CMS’. The first part debates on open source CMS and proprietary CMS. The second part will discuss various other factors that are to be considered before opting for a new CMS for your business.

A Content Management System is one of those things that we didn't realise we needed until they became commonplace, and now it is near impossible to survive without using, or hearing of one every now and then. In an age where convenience and agility are prioritised, the concept of a CMS holds great merit. It highly simplifies the work of creating a website and expands the use case of technology, making it accessible to a wide range of people - whether technically proficient or not.

Factors to consider while choosing a new CMS

While one CMS may be good for a particular enterprise, it might add no value or even prove to be detrimental to the other. Hence, skimming through important factors is an essential aspect of building a business case for a new CMS. While in part 1 we have discussed multidimensional comparisons between open source and proprietary software, this part is focused mainly on discussing the factors that are responsible and must be addressed before bringing a new CMS to the table. 

Why go for a new cms? 

Before trying to answer questions like why to choose an open source CMS or when to go for a proprietary one, first the need for a new CMS should be justified. Is there aur technology problem that you're facing? Can that problem be solved by undergoing something less monumental than migrating all your content to a new CMS? If yes, should you update, rather than replacing your existing base? 

Once the need for a CMS is mapped out and you are sure that you'll be going through that route, the next step would be to shortlist, analyse and re analyse every aspect of the new technology. You should be thinking as holistically as possible during this phase to eliminate potential issues in the future.

  • The CMS must resonate with your brand image, and facilitate the execution of your agendas. . 
  • You also need to analyse the CMS in terms of the amount of content you’ll be operating on it and whether it will be able to handle that, and if it provides the architecture for you to manage your content methodically.

Listing down both the business related pros and the probable risks of every option would be a good idea before proceeding. 

Primary stakeholdership 

A question pretty important but often ignored while choosing a new CMS is who has the stakes to decide and consider on the different CMS features that are being debated. As your organisation expands digitally and physically, the number of stakeholders starts increasing as well. The various teams dealing with IT, Marketing and Content might see a different CMS each that fits well with their demands. It is, again, a matter of debate to decide which area your company relies more on and is looking forward to invest in. 

SaaS vs Hosted vs On Premise

A SaaS (Software as a Service) CMS is a cloud computing environment with no obligations to install, update or maintain it. In stark contrast to this is an on-premise CMS where a licence is required from the vendor to install the software on your own server, and the provider is also responsible for maintaining the software. In a cloud-hosted CMS solution, a licence is required to install the software, but after that, it works just like an on-premise CMS.

These technicalities also need to be addressed while the discussion for onboarding a new software, so that the team finally ends up choosing the right CMS.

Business impacts

Long-term impacts need to be examined beforehand if possible. CMS platforms categorise into Development Platforms and Solution Platforms - where the development platforms act like a blank canvas one can build anything on, and the solution platform comes largely pre-built with customisable features. If your business banks on a good User Experience and looks forward to personalizing user experiences, a development platform might be a better choice. Similarly, if the focus area is not UX or creativity but content, a solution platform would be a better bet.

Technology Integration

Exhaustive documentation is required to analyse what tools and technologies you are going to use for marketing forms, project management, CRM (Customer Relationship Management), email marketing and even customer support. Does the CMS provide enough flexibility and scalability features to operate each one of these tools efficiently? You don't really need an all-rounder CMS, you just need to figure out what technologies you are going to use and find an associated software product that syncs well with those.

Skillsets

Choosing a good team is way more tedious a task than choosing a good CMS. So now is the time to talk to the team members and discuss their strengths and weaknesses regarding the tools they are comfortable using, or are expecting to be a part of their workspace. Consider your existing IT infrastructure and expertise and analyse whether your team has sufficient time to allocate to installing, maintaining and securing a CMS. Do you have sufficient in-house resources to customise the CMS if needed? It is imperative to answer all such questions before going ahead.  To know more, read what skillsets facilitate traditional and decoupled Drupal development.

Feature bloat vs Feature-rich

Always bear in mind that a lot of features in a CMS require nerve and sinew to make them functional. You need to know the basics of every feature that you are planning to utilise. A software may have immense capabilities regarding personalization and customization, but these won't articulate by themselves. The question here is - do you possess the necessary resources to breathe life into all of this? More importantly, all that sparkles isn't gold. Do you, in fact, need all of this pomp and show, or is most of it going to lie stagnant or cause unnecessary delays due to a heavy system? Do realise that you want a feature-rich CMS, ie, one that has features that you actually need. 

The potential CMS of choice might be great for complex workflows, but the question is do you have or need a complex workflow with multiple approvals on the line to make decisions? It is imperative that you remain realistic about your company’s maturity and roadmap and see if it aligns well with these technologies, hence not overdoing features to the point where they become unnecessary ornaments on the site. Always keep the requirements matrix of your platform in the backdrop while deciding on which CMS to go for.

Product demos

Theory can never be as reliable as practical examples.  An investment as elaborate as choosing a new CMS cannot be planned without taking into consideration various product demos and user reviews. Once the feature requirements have been worked through, develop usage scenarios and conduct initial product research for the next phase of the selection process - which is to document your needs and test the product against these requirements. Try to look for reviews that talk about problem solving, certain encountered issues, software upgrades and other potential problem causing areas.

In this phase, also try to examine whether the product naturally fits the vision of your company, what compromises might need to be made if you choose the product, and more importantly, if the vendor understands your business' work patterns and complements your ideas. Also run a check with your present team on how compatible they are with the platform.

Understanding the product roadmap 

It is imperative that you realize the roadmap of the potential vendors as well. Does it align with the track that you have set for your business? Taking the effort to track the future plans you are thinking of opting for would not be 'going overboard'. Being a little foresighted is an essential quality in a business owner. With new technologies taking over every now and then, the general trajectory might undergo change several times over the years - hence, a good way to track the adaptability of a CMS would be to trace down history and examine how much it has changed in the past to to fit into the ongoing trends, like decoupled architectures, cloud, SaaS etc. 

Cost efficacy

The budget is one of the first things an organisation considers. All kinds of costs - initiation, operation and implementation - need to be considered while chalking out the investment, as we don’t want the plan to turn turbulent at a later date. Software upgrades, maintenance, premiums - everything should be studied carefully in order to comply with your monetary limits. Both proprietary and open source models incur certain kinds of costs but in very different dimensions. Hence, it is upto you to prioritise where you want your money to be spent.

Drupal: An ideal CMS for building a modern web property

Since the choice of a software turns out to be the bedrock of all business activity online, most users try going for reliable options that have stabilized their name in the market by proving to be a resilient business partner over the years. Drupal is one such CMS that has been here for over two decades, and has been powering websites across the globe ever since. Let’s see how Drupal stands against the various dimensions of choosing a new platform.

  • Open source

Drupal is an open source platform with contributors bringing in global, cosmopolitan perspectives to their work each day. Apart from the many benefits of being open source, there's also a social satisfaction that comes with being a member of the community. Hence, Drupal development is free of cost to begin with. Depending on the level of customisation and the number of features you want to use, partnering with a digital agency can of course incur costs.  Learn more about merits of open source by going through the impact of open source during covid-19 pandemic, influence of large companies on open source, the power of being recession-free and the perks of contributing to it.

  • Content authoring

Drupal offers all the high utility tools required for content creation, publishing and the maintenance of a seamless workflow. Authentications and permissions are placed at appropriate levels to help manage editorial management. This means that right content architecture can be created using the admin interface, or even programmed. One can work with granular tagging and mobile editing to create content that is suitable for both websites and mobile applications. Drupal allows content authors to use a WYSIWYG editor to create and edit content in-place, ie, one could browse to a page, click on the content and edit it right there, on the spot. Apart from this, Drupal provides for tracking content revisions, an essential feature is you have multiple editors on board.

Drupal with its powerful display mode tools categorizes and displays only the most appropriate content including an array of media. While the Layout Builder allows content authors to create customisable visual layouts to display content, the Paragraphs module paves the way for an organised, cleaner site by providing pre-defined Paragraph Types for organising text blocks or images in a slideshow. For more on content authoring using Layout Builder and Paragraphs, read here.

  • Ease of use

Drupal's ease of use again depends on the manner in which you are using Drupal. If you are using the headless version to create custom layouts and mobile applications, very easy usability cannot be expected with the additional technicalities involved. However, developers point out that the availability of modules for every functionality on Drupal makes it extremely convenient even for newbies, making the learning curve quite short. Moreover, starting as a Drupal developer requires the least amount of Drupal centric learning and one can even start with the basic programming languages. Read here to know more about how easy learning and working with Drupal can be.

  • Industries suitable 

Since everything in Drupal is extremely customisable, it can be moulded into under requirements of literally any industry, both government and private. Currently Drupal is in use across several industries dealing in digital mediaFinTech, sports,  food, education, and many more as can be seen below.

white graph with blue bars showing the various sectors in which the cms drupal is usedSource : Drupal.org

In terms of security, Drupal emerges as a solid and secure CMS. Being designed keeping robust security in mind, it comes as no surprise that Drupal powers the websites for many leading corporations, brands and governments across the world. While one of the largest open source developer communities in the world ensures a rapid response to any issues, a bunch of problems are prevented solely by Drupal's strong coding standards and a stringent community code review process. No wonder, a report by Sucuri proves that Drupal is one of the most secure CMS among the major open source CMSes in the market.

grey and green bar graph showing cms infections in 4 different cms side by sideSource : Sucuri
  • Scalability and performance

In a case where it is used and optimised appropriately, Drupal can be scaled up to reach millions of people. For instance, the CDN (Content Delivery Network) module helps one integrate their Drupal website to a CDN, which is basically a globally distributed network of proxy servers that increases the reach of your content manifold. If the hardware of your server is giving up, Drupal allows you to scale it either vertically or horizontally - i.e., by either adding more resources at the same server or adding multiple servers to divide the load. Read about Drupal’s immense scalability and high performance offerings to know more.

  • Decoupled Drupal 

Decoupled Drupal comes with a bunch of flexibility. Developers are free to choose any front end tools that they deem fit while backing on Drupal to provide a robust backend. Decoupled Drupal architecture provides the best possible framework for serving content in the form of chat platforms, conversational UIs (User Interface) etc. through a variety of channels like mobile apps, Internet of Things apps, smartwatches and CRM systems. To know more, read about Decoupled Drupal architecture, difference between monolithic and decoupled architectures, when to move from monolithic to decoupled architectures, how to decouple Drupal, and success stories on decoupled Drupal.

Drupal allows for maintaining separate independent sites that branch out from a single code base while having their own separate databases, configuration, files and URLs.

  • Multilingual 

Drupal enables building multilingual websites with its built-in language handling abilities that make it easy to create localised digital experiences. Certain core modules in Drupal facilitate the translation of every element of a website. Explore more about Drupal’s magnificent multilingual capabilities here.

Drupal can greatly aid you in the Search Engine Optimisation of your website, necessary for clients to find you. You can rely on Real time SEO For Drupal to constantly remind you of anything you might have missed in the optimisation process, and work with the Googalytics module to integrate Google Analytics in Drupal, hence keeping in touch with all the current trends. To know more about Drupal’s SEO features and to update yourself on the present and upcoming SEO trends, check this guide on Drupal SEO.

  • Mobile apps

Drupal focuses on mobile first development. It has also come up with a mobile initiative for this, along with multiple device friendliness to bring about community participation in the same. Not only that, the potential for building mobile applications with Drupal is plenty. For example, you can extract the power of Flutter and Drupal together to build an intuitive mobile app. 

  • E-commerce

Using Drupal Commerce, businesses can utilise an open-source eCommerce framework to build flexible eCommerce websites and applications based on Drupal. Drupal commerce aims to make teams more productive by simplifying complex checkout outflows and keeping every feature accessible at an arm’s length for a merchant of any size. One doesn't need to worry about conforming to industry security standards while implementing Drupal, and can easily rely on  Drupal's own best practices.

It also includes provisions for integrating payment and fulfillment tools to strategize the best marketing strategies tailored for your business. The Commerce Kickstart distribution can be used to start the project, as it comes loaded with features that make it easy to use and administer.

For creating a more engaging and interactive website while still staying in touch with Drupal Commerce, headless Drupal could be utilised. To complete this transaction, APIs (Application Programming Interface) act as the bridge to connect the frontend and the backend - with Commerce API extending JSON:API and Commerce Cart API which lays out an interactive interface of the buyer’s cart through REST API.  Read here to know more about content-driven commerce with Drupal.

  • Web accessibility

Drupal has various modules in place to ensure web accessibility guidelines, realising how important it is to make the website accessible to users across the globe. Modules like CKEditor provide a number of features like CKEditor Accessibility Auditor and CKEditor Accessibility Checker to analyse if the overall experience is convenient for disabled people. Keeping accessibility uniform throughout the site, Drupal’s Automatic Alternative Text Module provides alternative texts in all the images where the content author may have missed it. To further your knowledge on how Drupal ensures web accessibility, read here.

  • Documentation

Every little step taken by Drupal or the community  is exhaustively documented for greater knowledge sharing and transparency among the stakeholders and contributors. Dries Buytaert’s State of Drupal presentation in July 2020 and December 2020 includes all the changes and upgrades made in Drupal in the past year. For more proper documentation on everything Drupal, you can check out Drupal’s official documentation page. Whether you may want to try out a Drupal demo site or are ready to build a perfect Drupal-powered site for your business, the curated list of user guide, evaluator guide, local development guide and many more will help you easily start your Drupal website.

  • Agency partner availability

Drupal Marketplace lists all the agencies that are avid contributors to Drupal's modules, distributions and case studies revolving around Drupal projects. Hence, if a business is thinking of starting a Drupal project but doesn't have the required expertise to go about it, they can contact one of these top ranking agencies for Drupal development services. OpenSense Labs ranks in the top 5 and would love to partner to help fulfill your digital transformation dreams. And, if you wish to leverage more resources for your projects, our staff augmentation services would take care of the rest.

  • Support and maintenance

One of the biggest plus points of being an open source platform is that support is highly accessible and maintenance is pretty swift. Since it is such a widely cultivated and utilised platform, there cannot be bug fixes related to important issues lying around stagnant for a large amount of time. The Drupal community is always walking towards resolving issues that crop up from time to time. 

If you have a Drupal website that you require assistance with, we at OSL could help you out with our  Drupal Support and Maintenance  program.

Conclusion

This concludes our exhaustive list of factors responsible for choosing a new CMS, complete with a business case comparison between open source and proprietary models. Hopefully this article helps you in making the correct decision regarding your business' choice of the appropriate digital platform.

Apr 20 2021
Apr 20

Our circle recently revisited our definition of done. One point: code reviews. They did happen, but often couldn't unfold their full potential. Question: How could we improve them?

Answer: It's complicated. As always. But bear with me!

A few words about code reviews

From my point of view, code reviews should be an integral part of agile software development. There's an IEEE standard for code reviews that defines all kinds of reviews, but I won't go into much details here.

For me, the main goal of code reviews should be to improve collaboration within a development team and to improve the quality of the product. Each and every review should be seen as a learning opportunity for both the person reviewing and the author of the change.

Our approach to improvement

It's generally a good idea to know and analyze the status quo before implementing any change. And what's better to measure how code reviews are done than doing actual code reviews? No sooner said than done!

So we created a repository with a small application. Nothing too fancy, a simple calculator for the CLI written in Python, no libraries, no frameworks. Next, we created a bunch of merge requests and let all the devs review them in pairs in a workshop. We gave them around 30 minutes to review the code as they usually would.

And then came the fun part:

Reviewing the reviews

Each team explained how they did the code review, what they focussed on and what kind of problems they found. The results were rather interesting: There was a set of problems every team found, but also some issues that were unique per team.

And there's a good reason behind that: The approaches were vastly different. One or two teams started by cloning the repo and checked if they could get it running. Others started to analyze the code to find places it could crash. Yet another team read the documentation and the tests first, checking if it was up to date.

They were all doing a code review and they were all doing it very differently. There's nothing wrong with that. Every approach is good and has it's advantages, as long as it's not the only thing that's looked at.

The goal of this workshop was not only to analyze how code reviews were done so far. We also wanted to establish a common understanding of how code should be reviewed and why: A set of best practices and guide lines. We also added some well-established guidelines into the mix.

Some of our Dos and Don'ts

This is a structured, boiled down version of the best practies and guidelines we established during the workshop.

A review has three phases: Preparation, the actual review and post-processing. There's two parties involved: The author and the reviewer.

In general, for everyone

  • Every change is an opportunity to do a review
  • Avoid reviewing too much code at once. Going beyond 200-400 LOC per hour might have a negative impact on the quality of the reviews
  • Don’t assume malice
  • Strive to create learning opportunities for both the author and the reviewer
  • Be kind
  • Let different people review your code
  • Review code of others on a regular basis
  • Seniors are encouraged to let juniors review their code, too
  • Juniors are encouraged to ask to perform reviews
  • Code style and conventions can be checked automatically: Consider introducing automated sniffs/checks to eliminate any inconsistencies beforehand

Before a review, for the author

These are some steps that can be taken in order to prepare the code for the review. They aim to streamline the process and catch some points upfront.

  • Review the code yourself
  • Ask for a review proactively
  • For larger or more fundamental changes, several people may be asked to do reviews. They can do a review together or independently. This has the added benefit of more people knowing about a change and might induce further discussion about the architecture
  • Make sure it’s understood what your code tries to achieve
  • Add a comment to the ticket for handover with
  • If a solution is complex: Explain why, ideally directly in the code
  • Comments on the change can also be added by the author before a review happens. Those can be used to explain things where comments in the code are not possible (JSON files etc.)
  • Alternatively, do pair programming or even group programming

During the review, for the reviewer

These tips aim to optimize the quality of the review and its results. They also make sure that the review is exhaustive by covering for edge cases, checking documentation, trying different approaches in your head and identify oppourtunities.

  • Don’t neglect positive feedback: If something is well-structured, especially elegant etc., point these things out, too
  • Ask yourself how you would have solved the problem at hand
  • Ask for information if it is not present. Rule of thumb: If the author needs to explain something, the code should be adapted to either explain itself or contain an adequate level of documentation
  • If a solution doesn’t appear “right”, try to come up with alternative solutions
  • Keep a balance between showing how to do it right and pointing the author in the right direction
  • Write if your proposal is necessary (has to be fixed) or a suggestion (might be fixed for better understanding etc.)
  • Ask open-ended questions
  • Check for edge cases (such as unexpected input, NULL, MAX_INT, MIN_INT, “false”, FALSE, etc.) and try to force the code to fail
  • Consider under which conditions the code would not behave correctly anymore (loading too much data, too many users, etc.).
  • Encourage simplification where possible
  • Look for shortcuts that should not have been taken
  • If you deem it necessary, ask someone or multiple people to assist with the review or do the review together. This has the added benefit of inducing discussions about the solution and more people knowing about a certain change

After the review, for both

These three points target post-processing.

  • Walk through the review if necessary or helpful
  • Do pair programming if necessary or helpful
  • Review the following changes as well, if possible. Depending on the size or complexity of the code change, a pragmatic process of solving issues together can be preferable over several disconnected feedback loops

Takeaway thoughts

The feedback for the workshop was amazing. People loved the discussions that it sparked. The nice thing about this list is that everyone can agree with it. The whole dev team was involved. Everyone contributed and learned a lot along the way. It was a true collaboration!

Which of these guidelines would you adopt in your process and why? Leave a comment!

Apr 20 2021
Apr 20

open waters podcast logo

New Year, New Faces, Same Focus

We’re back! Season 2 of Mediacurrent’s Open Waters podcast is officially on its way. We recorded a special trailer episode to celebrate. 

Mark Shropshire and Mario Hernandez are returning as hosts. Just like last season, our purpose is to explore the intersection of open source technology and digital marketing. We’ll share the challenges and solutions we see with our own clients and in the market.

During season 2, we'll be covering topics including:

  • How to optimize your digital strategy
  • Accessibility as a business imperative
  • UX design principles
  • How it all works together using open source technologies like Drupal

Welcome to Season 2

Meet the Hosts 

Mark "Shrop" Shropshire 

Shrop headshot

Role at Mediacurrent: Senior Director of Development 

Podcast creds: Shrop can be found talking about open source security, leadership, mentoring, and more on his two personal podcasts: goServeOthers and SHROPCAST

What are you most excited about for season 2? The opportunity to learn more about what other talented folks are doing in the marketing and tech industries. It is easy to be comfortable with what you know today, but I find that having conversations with others can really challenge you to think differently and learn new niches.

Mario Hernandez
Mario headshot

Role at Mediacurrent: Head of Learning 

Podcast creds: Member of the original cast of Open Waters  - Mario co-hosted the first season of our podcast.

What are you most excited about for season 2? I am looking forward to interviewing industry leaders to discuss all things open source. I am also really excited about teaming up with Shrop. He has vast experience in podcasting and I am ready to learn from him.

Podcast release schedule 

New episodes will be released monthly on the Mediacurrent blog and wherever you follow your favorite podcast. You can also follow us on Twitter for updates.

Subscribe to Open Waters

Visit mediacurrent.com/podcast to hear the latest episode and subscribe to the podcast on your favorite podcast app. Share the podcast or tell a friend about it - tag us @mediacurrent on Twitter. 

How can I support the show?

Subscribe, leave a review, and share about us on social media with the hashtag #openwaterspodcast. Have an idea for a topic? Get in touch with our hosts at [email protected]

Apr 20 2021
Apr 20
easy admin toolbar module install and configuration

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

Credits & Thanks

Thank you to:

About the Admin Toolbar Module

The Admin Toolbar module gives you one-click access to Drupal admin screens. It works like a drop-down and slide-out menu system that is so popular on the web.

While we prefer the speed and ease-of-use of the Coffee module, there are times we need to see the hierarchy. The Admin Toolbar module provides that ability.

admin toolbar drop down example

Install and Enable the Admin Toolbar Module

  1. Install the Admin Toolbar module on your server. (See this section for more instructions on installing modules.)
     
  2. Go to the Extend page: Click Manage > Extend (Coffee: “extend”) or visit https://  
  3. Enter “admin toolbar” in the search field to find the module:
     drupal admin toolbar installation
  4. Select the checkbox next to Admin Toolbar.
     
  5. Click the Install button at the bottom of the page.

The Admin Toolbar module uses the Admin menu permissions. If you can access the Admin menu, then you have the permissions you need. Otherwise, you may need to get the appropriate permissions.

Did you like this walkthrough? Please tell your friends about it!

facebook icon twitter social icon linkedin social icon

Apr 20 2021
Apr 20

There might be instances when you want to restrict access to some pages of your website. It could because you want increased security for the high-risk data that’s lying on the page or you want only your subscribed users to be able to view the content. This functionality is provided in Drupal 8 by a module with an interesting name called the Rabbit hole module. The module is also compatible with Drupal 9! In this article we will be elaborating on the module and how you can implement it in your next Drupal project.

Control Access to Restricted Pages

What does the Rabbit Hole module do?

The Rabbit Hole module provides the ability to control what should happen when an entity is being viewed at its own page. It also controls what happens when someone visits an entity page.

In simple it allows you to easily redirect or prevent users from viewing specific types of entities on your site. You can grant or deny user access to entity types or specific Drupal entities based on user roles. For example: To display paid content to users with a subscription or to allow special user roles.

Some of the entities that it supports are Nodes, Taxonomy Terms, Users, Files, Group and Media Entity

The Rabbit hole module for Drupal 8 provides multiple options to restrict access to specified pages. You can choose to deliver access denied or page not found pages. You can also choose to redirect a page to any path/URL. Or you could choose to display the entity as it is.

Configuring the Rabbit hole module

Here’s how you can configure the Rabbit hole module for an entity type:

Configuring the Rabbit Hole Module

Configuring the Rabbit hole module: Select the required entities

Create a VIP Role

When you create a VIP role, only paid users will be allowed to view the content. Without a paid membership user will be Authenticated user.

  • On the Admin toolbar click on People -> Roles -> Add Role
  • Give the role name as VIP
  • Click on Save 
Creating VIP Role

Creating VIP roles

Create Users

Here let’s create an Authenticated user and a VIP user.

  • Click on People -> Add user
  • Enter the data and select the role as VIP
  • Click on Create a new account 
Create New User Account

Create a new user account

In the same way create another user with the role of Authenticated. After that, the People page will look like this.

All Users

All Users

Create VIP Content Type

  • Click on Structure -> Content type -> Add content type
  • Give a proper name and description for the content type
  • Click on Rabbit hole Settings
  • Keep “Allow these settings to be overridden for individual entities” option as checked. It will allow administering permissions on a node basis
  • Choose the redirect option and enter the URL of the site to which you want to redirect
  • Click on Save and manage Fields.
Create VIP Content Type

Create VIP Content Type

  • Add an image field and place it above the body field on the content type to manage display settings.
  • Click on Save 
Save VIP

Set Access Permissions

Users with a VIP role will have to be able to bypass the Rabbit Hole control. 

  • Click on People - > Roles
  • Click on the dropdown arrow of VIP role and click on Edit permissions
  • Search and Check for the Bypass Rabbit hole action for Content permission. Save the permissions. 
Bypass Rabbit Hole

Create Content

  • Click on Content -> Add content -> VIP content
  • Create a node and hit Save 
Create Content

Create content

Test the Rabbit hole Module

  • Login as an Authenticated User
  • Click on the Teaser title of the VIP content on the Home page)
Testing Rabbit Hole

Testing the Rabbit hole module

  • It will (and should) redirect to the Access denied page.
Access Denied for Authorized User

Access denied for an Authenticated user

  • Now let’s logout and login again but this time as a VIP user.
Login VIP User
  • Go to home page and click on the Teaser title.
Committed to SafetyView Node and Content
  • As a VIP user, you will now be able to see the node and content.
Apr 20 2021
Apr 20

If there is one thing that is in abundance today, that’d be competition. It starts as soon as a child is born and ends when he takes his last breath. It’s not just people who have to face the gruelling reality of perpetual competitiveness, it’s also the non-living objects who compete. 

Tell me, can you possibly buy the new Adidas Aerobounce 2 without checking what the competitors have to offer? And can you really buy that shoe without comparing the prices on the online and offline stores? I am sure not. 

This is why brands and businesses try to be the best in catching the eye of the consumer and presently the best way to do that and beat the competition is through Digital Experience Platforms.

Today’s consumer doesn’t connect to a business through medium, there are a number of touchpoints in play and integrating all of those together to engage your consumer base is what a DXP does. This helps businesses to not only build and deploy digital experiences, but also improve them continuously across your websites, portals and mobile applications. All of it accumulating to a wholesome user experience.

The various features of a DXP are represented in the image in the form of a diagram.Source: Bloomreach

The diagram above is the sum total of a DXP’s powers, which are pretty versatile, as it combines all of the various aspects of online businesses, be it social media or personalisation and targeting, and lets you deliver a seamless digital experience. 

Digital Experience Platforms provide an edge to a business that CMSs and WEMs cannot and that is why they are becoming popular by the day. Their advantages back this claim. 

  • The ability to manage the bazillion consumer touchpoints is the paramount merit, be it FAQs or chatbots, there is an answer to everything.
  • Then is the ability to connect your business’ various aspects at one place, from sales and commerce transactions to instilling loyalty amongst the consumers through in-house programs. 
  • The ability to be flexible is inherent in DXPs as well. You can build it on your rhyme and rhythm, there won’t be any objections. 

Let me also give you a few statistics to understand the rage DXPs are becoming in the present and what their future looks like.

Future projections of the DXP market is depicted.Source: Markets and MarketsThe market of DXPs is shown based on geographical regions in a bar graph.Source: Markets and Markets

Based on these figures, I have to ask, when are you switching to a DXP? If the answer is right about now, you have landed yourself in the right place because I am going to be talking about all the things you would have to consider before choosing the right and most suitable DXP. So, let’s begin our DXP checklist. 

What tools and integrations are you using and plan to use?

The foremost question to ask relates to technologies you are using and plan to use in the future. You can document these technologies based on your consumer’s journey. This would allow you to create the most optimal digital experience for your users because you would have worked on the gaps and weaknesses of the journey. 

From that first step, you have to move onwards and upwards and focus on all the tools and integrations you would need to work with your chosen DXP. Let’s take a look at them together. 

Data Analytics 

Every organisation has a data warehouse, however, it’s proportion does vary. This data might as well be responsible for shaping your strategy. Therefore, you have to consider your analytical requirements before taking on a DXP. 

Remember that you can always come to Google Analytics for any analytics, even after choosing a closed DXP. To know more on how data driven strategies can help understand consumer behaviour, read here.

Digital Marketing Tools 

The DXP you choose should be able to integrate with various marketing tools in the market. Look for integration support with a keen eye, it could be out-of-the-box or an extension, but it has to be there with a side of third-party marketing automation at play.

Conducting a thorough review of the MarTech stack is also recommended here, find out what is being used and where it is being used before going any further.

Digital Asset Managers 

If you have a digital asset manager, you should consider one thing and that is its integration with other downstream systems. This would ease the flow of images and assets through your organisation. Everything about digital asset management (DAM) here.

Backend Integrations 

Then is the question of backend integrations, you could have a CRM or an EPR working at your backend. If that is the case, you ought to start finding them out and assess their compatibility with your DXP provider.

What are your notions about decoupling?

Nobody likes being constrained, the joy you find when you are free to do as you want is unlike anything else. That is pretty the scenario with decoupling or going headless. You could have a strong monolithic architecture now, but in the future that could change, because what works today may not work tomorrow. Therefore, you should think about choosing an Open DXP, if you are indecisive about decoupling today.

Your projects could need microcontent; 
Your content could need to be published on multiple channels; 
Your developers could ask to go headless because there is so much to explore; 

All of these scenarios are real possibilities and you must consider them before making firm decisions on decoupling and DXPs. There are plenty of these platforms that support going headless and having that room to explore can’t be bad.

What are your plans for commerce?

Commerce is another important aspect you need to consider before choosing a DXP. Having all the right features to look for is crucial here. You have to ensure that the DXP’s commerce strategy actually aligns with your commerce needs and at the same time gives you room to be better. 

  • Assess yourself first, know whether your needs are just browse and buy or are they more than that.
  • Assess whether the DXP should be able to work with different commerce technologies to get you what you want.
  • Assess your Stock Keeping units and let their count decide the kind of robustness you would need in your DXP. 
  • Assess the kind of data model you need based upon the working of your team and its present and future needs. 
  • Assess the importance of content in commerce, more like search it up and integrate it without any hesitation. This would create a much more effective experience for the user.
  • And assess whether going headless is worth losing the commerce extensions that come along with the platform.

Once you have an answer to these, you’ll become a step closer to the perfect DXP for you.

What are your editorial needs?

After technology, comes the part your content writers and editors play in the DXP decision. You have to understand that the more writers and editors you have, the more complex the editing experience would become and you would need a DXP that can handle it.

In this regard you have to consider three things before making a decision. 

Cache Manipulation 

Cache manipulation features allow you to sync your developers’ caching strategies with the user's needs. This helps in making you content appear quickly to the users and a perpetual communication in your cache layers.

Review Needs 

Sometimes your content needs to be reviewed by people within the organisation before it goes live. These could be your legal department or even project managers. If that is the case, you need to look for a DXP that is equipped to handle this kind of editorial needs.

Multilingual Requirements 

Finally, many sites today are operating globally, this means they have to change to the local language. For that your DXP needs to have impeccable translation needs, with understanding of the various dialects of the said language. You can’t be using American English on a Scottish website, it won't be wrong or unethical, just inappropriate and your audience might not be able to relate.

What is the value of security for you?

Security is another major criteria that has to be given its due importance. Making a fully-functional site with all the right features, but lack of security would make all your efforts go in vain. That’s why you have to look for the right security features in a DXP to avoid the unfortunate fate.

  • The foremost feature to want should be an integration to Varnish and a CDN along with free-flowing interactions between the DXP and cache layers. 
  • Then you should think about securing your network nodes that are outside your network core. This is done through edge protection services provided by top DXPs, so make that a mandate.
  • Distributed Networks Attacks can be quite harmful, so ensure that the DXP you choose can prevent and counter them.

Also remember that you need to let the experts do the decision making in this regard because you cannot afford to go wrong here. 

What about government regulations and stipulations?

There are a number of rules and regulations that your digital experiences have to adhere to with a super glue consistency. A DXP that makes that easy for you is always going to be a winner; you must know what happens when you go against the law.

Here are the paramount regulations that you have to stick to.

  • Americans with Disabilities Act or ADA;
  • General Data Protection Regulation or GDPR; 
  • Health Insurance Portability and Accountability Act or HIPPA; 
  • Family Education Rights and Privacy Act or FERPA; 
  • Web Content Accessibility Guidelines or WCAG;

These are a must when building digital experiences, so grill your prospective vendors about them and if possible, ask for case studies.

Apart from this, Personally Identifiable Information should be a factor in your choice. The way it is collected and stored should be compliant with the GDPR regulations.

What are the financial implications?

When you would be looking for a DXP, you will certainly want one that will favour all the technologies that you want to incorporate into your organisation’s digital platforms. Am I right? So, you will be aiming for the best out there. However, what if the best is not within your price range. Do you settle then? No, of course not. You choose what is the most suitable for you and whatever ticks the most boxes. 

So, before or even during the selection process of a DXP, you need to allocate the budget you are comfortable with. It could be less than a hundred grand or close to a million dollars, that is on you. 

Remember that just because a DXP is expensive, doesn’t mean it is the best. Whatever your budget may be, you could still get what is best for you.

Finally, what do you want the future to hold for you?

Life is often regarded as transitory and it really is; what is important today may not be important in future and what may seem trivial today may become the next big thing. 

The same is true for DXPs and your digital experiences; they will evolve with time. Therefore, when you choose an agency remember to not let it make you inflexible. You would need to keep an open mind about the future and your digital experiences should have the same openness in their build. 

  • Look for future scope in the DXP; 
  • Look for extension of current technologies like marketing automation; 
  • Look for an open DXP architecture with flexible APIs.

You certainly cannot be sure of the future, but what you can be sure of is the fact that the future is going to change and you would have to change with it. 

Bottom Line 

As Steve Jobs said,

“You’ve got to start with the customer experience and work back towards the technology- not the other way around.”

There is real meaning behind that statement, all of your digital experiences start with and end with the consumer, so why not prioritise them over everything else. 

So, how to choose a DXP? By assessing your past, present and future in accordance to your consumer experiences. You must want to create a fulfilling digital experience for your users, for that you have to have a fulfilling digital experience platform that guarantees to check every and all of your necessities. The questions I talked about above would help you kick start your DXP journey. OpenSense Labs continues to build amazing digital experiences with Drupal that endeavor to provide all of what we discussed, so you could, maybe, start looking here to build a Drupal-powered DXP. 

Apr 20 2021
Apr 20

According to the Composer documentation, you shouldn't commit to version control any of the files in packages that are managed by Composer. For a Drupal project, that means the following folders are not in your git repository:

  • vendor
  • web/core
  • web/modules/contrib

Bluntly, I think this is the wrong thing to do. Doing the exact opposite saves you time, effort, heartache, and energy.

Let's start by comparing the two workflows.

Composer-recommended workflow: the wrong way

  1. Alice, the developer, updates some packages in her local dev.
  2. She commits only the composer.json and composer.lock files.
  3. Bob pulls changes, and runs composer install to update his local dev.
  4. When the project is deployed, the server needs to run composer install as part of the deployment process.

Git-managed workflow: the right way

  1. Alice, the developer, updates some packages in her local dev.
  2. She commits all the new and changed files.
  3. Bob pulls changes.
  4. When the project is deployed... it's deployed. All the files necessary to run the app are in git, and so updating the server's git clone gives it all the files.

The first reason this workflow is better should jump out: developers save time. Git is much faster and pulling files from a repository than Composer is at resolving, downloading, and installing packages. Switching git branches is fast, even when a lot of files change. Having to run Composer because one branch has package updates on it and the other doesn't, or has different ones, is a waste of developer time.

The second reason is related: save time in deployment. That's not just developer time, that's time your production server is down.

The third reason is more philosophical: Composer is not a file management tool. It's a dependency management tool. Let Composer do what it does well, which is figuring out which versions of which packages should be installed. Let git handle what it does well, which is synchronizing different copies of a codebase. Purists may point out that git is a version control tool, not a file management tool: that's a valid point, but doesn't diminish my argument: commit all files, and then use rsync or whatever to get the files from a git clone to the server.

Related to this: don't make your webserver do package management work; that's not its job. And don't make Bob repeat the work Alice already did.

Finally, committing files to git puts them under version control. That's merely stating the obvious, but putting files under version control has many benefits.

  • IDEs typically ignore git-ignored files for things like searching and code analysis. On my IDE at least (VSCode), disabling that means it then wants to include things like the uploaded files folder.

  • Similarly, search tools such as ag and ack take .gitignore files into account, and having to override that robs you of useful behaviour.

  • Finally, files under version control are easier to debug and tinker with. I for one often go digging in core or contrib modules, trying to figure out why something isn't working the way it's supposed to, or trying to fix a bug. To do that, I put in dump statements; sometimes tons of dump statements. (I can never get xdebug to work. Dump statements are quick and easy.) With code under version control, cleaning up all that mess is trivial: git can discard all changes. Without version control, I'm hunting through files for all the debug changes I made, or bouncing on CMD-Z like it's still the dark ages.

So, put all your files in version control. And remember the adage: if it's not under version control, it doesn't exist.

Apr 20 2021
hw
Apr 20

Now that we have discussed some of the concerns with career growth, let’s talk about beginning a career in Drupal. I am not aiming for comprehensiveness but I hope to give a broad overview of what a Drupal developer role looks like in the real world. Needless to say, every company or agency is different. You might have a very different set of responsibilities depending on your organization. One of those responsibilities would be to build and develop Drupal websites and we are going to talk about that here.

Working in an organization essentially means working with other people. That is how you multiply your impact. All the roles do have some amount of dealing with people. Initially, you only might have to worry about collaborating with people but as you grow, the scope increases. Eventually, you would have to mentor and maybe even manage people. All along this journey, you would also increase your knowledge and area of impact technically.

Early roles

As someone who has very little experience with programming, you might start off with Drupal by building sites using UI and simple CLI commands (drush or console). Your challenge would be to understand content types, taxonomy terms, users, roles, permissions, etc. You would need to understand how to design a content type that is actually useful for what you want to represent and add fields to it. Moreover, you might know enough PHP to find snippets to alter forms or pages and implement those as per requirements.

At this stage, you might not be expected to solve complex problems or scale websites with heavy traffic. You might be working under the supervision (and mentorship) of someone with more experience with Drupal. It would be expected of you to collaborate with other people on the team such as front-end and QA engineers if any and complete your tasks the best you can.

You would need a strong set of fundamentals here such as git, basic PHP programming skills, and a working knowledge of HTML, CSS, and JavaScript. You would need more of an awareness of your software stack but wouldn’t have to go deep.

Intermediate roles

With around 2-5 years of experience, you will begin to pick up a more complex set of tasks. You would write more complex modules with proper object-oriented code. The site-building requirements also would be more complex. You would have to implement content types with complex relationships with other entities. The code required to tie these things together would also get more complex. You will also have to worry more about how to solve a requirement in the best way rather than just implement something.

At this stage, you would be expected to participate in code reviews and share your feedback. In fact, some organizations (like mine) encourages all levels of engineers to participate in code reviews, so this might not be new. Take this opportunity to also seek mentorship from other folks to go deeper into Drupal and other technologies. While you only had awareness of your stack earlier, you should now have a working knowledge of various elements in the stack. You would also be involved in discussions with other teams to build integrations your system needs. Essentially, you should understand how the pieces fit together and how they participate in making the system work.

You should also begin to question requirements and try to understand the business problem. Your value at this level is not just your technical skills but also solving business problems. In other words, it’s not just about solving the problem right but solving the right problem.

Advanced roles

After about 5-10 years of experience, you will now be responsible for the entirety of a system. You may begin with simpler systems where Drupal plays a major role and then move on to more complex systems where Drupal is just one piece of the puzzle. At this stage, more people will turn to you to solve their problems and you will have to figure out how to solve those problems yourself, guide them, or delegate it to someone else.

You should also be much more familiar with the entire Drupal ecosystem and how it can fit in with other parts of your stack. You are close to approaching what could be called the “architect” role (but we won’t go there today). As an IC, you will have a lot more impact but you would also play a significant glue role in your team (or teams).

This is a vast topic and I might come back to this in a future post (or multiple posts). Like I said before, this is not meant to be a comprehensive guide, but just a broad overview.

Apr 19 2021
Apr 19

About you

Did you love taking charge in group projects? Are you always reminding everyone of the deadline? You are a planner through and through. You enjoy piecing together project objectives within the budget and timeline like a jigsaw puzzle, but you enjoy completing a project even more.

When getting to know new people, you excel at quickly building trust and getting them to open up. You understand how to think strategically about the project’s big picture and you can help clients zoom out and see the strategy, too. You’re passionate about what you do and love improving the process for both the team and the client.

About the job

The Digital Project Manager ensures our clients never question whether a project is on track. They manage the scope, timeline, and budgetary constraints to shepherd a project to its successful completion.

The Digital Project Manager is accountable for:

  • Providing regular reporting to clients
  • Managing client expectations around features, delivery time, and budget
  • Establishing internal and external meetings, as needed
  • Maintaining detailed notes for each decision in a project
  • Utilizing an agile system of project management
  • Establishing and using a trusted system to document projects and processes
  • The success of sprint demos
  • Ensuring project plans align with client goals and identifying opportunities for Redfin to suggest improvements or adopt new strategies

The Digital Project Manager is responsible for:

  • Understanding velocity of each project at each sprint
  • Interfacing with client product owners and stakeholders as their primary point of contact from Redfin through the duration of a project
  • Facilitating agile meetings with internal teams and clients, such as user story creation, sprint planning, sprint demos, retrospectives, story pointing, and backlog grooming
  • Verifying that user stories have been appropriately tested for QA
  • Interfacing with Clients, Sales, UX, and other departments to understand the scope of the project being delivered

Requirements and qualifications

  • Ability to work on-site in Portland, Maine
  • Demonstrated experience in proactively and resourcefully solving problems
  • Communicating effectively across teams
  • 3+ years of experience managing projects
  • Familiarity with agile methodologies
  • Passionate about working with a variety of clients and projects
  • Outgoing and persistent
  • Comfortable with digital projects like large-scale websites

About Redfin Solutions

Redfin Solutions, LLC is a web development and design company in Portland, Maine. We conceive, build, and support custom Drupal websites. Our clients include Kripalu, MIT, Harvard, and Dartmouth. Redfin is not just another agency that churns out websites. We have long-lasting relationships with our clients and, hopefully, you. 

We are a Drupal Association partner and help coordinate and sponsor Drupal conferences throughout New England. Our employees are active community members who contribute to the Drupal open source project. Redfin supports professional development opportunities and applicants should be motivated to learn.

Other benefits include: 100% company-paid health insurance premium, HSA company contribution, IRA matching, 4 weeks PTO, 36-hour work week, flexible work schedule, team lunch once a week, standing desk, seltzer & cold brew coffee on tap, annual company retreat, and more.

Redfin Solutions is an equal employment opportunity employer. We celebrate and support diversity for the benefit of our staff and clients, and encourage those from underrepresented groups to apply.

To apply, send send your resume and cover letter to [email protected].

Apr 19 2021
Apr 19

Solomon Gifford, Sr. Director, CMS Product Development, BlackMesh by Contegix

So, you use Drupal, but you're not hosting on a dedicated Drupal platform. You’re either managing your own infrastructure or you’re running Drupal on the public cloud. What do you call what you're doing?

No seriously! How would you describe what you do? And I’m not talking about contributing to the Drupal codebase or related modules. How do you describe the management of your technology stack and CI/CD pipeline?

When Drupal was in its infancy, [most of us] weren’t playing with containers, running headless Drupal, thinking about serverless computing, or implementing IaC (infrastructure as code). The cutting-edge teams were using Jenkins or a collection of home-grown scripts to automate their CI/CD pipeline, but most teams were looking for that no-ops solution where they could focus on development and offload the rest of the responsibilities. This gave rise to the Drupal Hosting partners—BlackMesh through its white-glove support model and Pantheon and Acquia through their automated, yet opinionated (depending on perspective), platforms among others.

Existing Terminology

System Administrator Responsible for the provisioning, monitoring and management of computer systems - e.g. the person(s) managing OS patching, middleware configuration (Apache, Varnish, PHP, etc.) on physical or virtual servers DevOps Engineer Responsible for a set of practices that combines software development and IT operations - e.g. an ambiguous role doing a lot of tasks that aren’t strictly development or operations IT Managed Service Provider Responsibility for maintaining a range of IT processes and functions - e.g. the IT people hired to replace internal roles in order to improve operations and cut expenses Hosting Service Provider Responsible for providing a pool of remote, internet-based IT resources for hosting websites, e.g. the team building and delivering infrastructure for deploying websites and maintaining their functionality

Webmaster

A person maintaining a website
WebOps - DevOps for web applications
Software Process Engineer - Designs, implements, and optimizes processes for software teams WebOps DevOps for web applications Software Process Engineer  Designs, implements, and optimizes processes for software teams Platform Engineer Responsible for writing code that bridges the gap between software and hardware - e.g. the people managing containers, infrastructure orchestration or public cloud automation Automation Engineer Responsible for delivering automated solutions for software processes, e.g. the person(s) who set(s) up the software pipeline, workflow, etc.

However, as Drupal has matured and technologies have changed, so have the way many shops approached the Drupal lifecycle. By their very nature, containers and IaC technologies shift the post-development management responsibility from the system administrator to the developer. Need to change the number of concurrent threads in Apache? The developer updates the container instead of a system administrator. Need to scale from three webheads to six on the public cloud? The developer updates the configuration and checks it in to revision control. (Opinionated platforms may abstract these configurations to a YAML file or web-based configuration in exchange for limiting the possibilities.

But these arguably exciting trends have also had an undeniable impact on the skillset required to manage Drupal applications. Drupal developers now need additional competencies in application architecture, performance tuning, workflow automation, public cloud, Kubernetes and other emerging technologies.

Larger teams have the capacity to adopt a DevOps model by acquiring the necessary specializations in the team (as opposed to a more Agile model where every team member shares responsibilities), but smaller agencies and IT departments are confronted with a difficult choice of costly investment in their in-house capabilities or not embracing the additional technologies.  In order for smaller agencies and IT departments to successfully compete, they need to augment their teams with outside resources to fill the gaps.

This brings us full circle to the original question, but restated in context of the discussion: What do we call all of the Ops activities that used to be performed by the System Administrator but are now left up to the developer?

DevOps is one natural term, yet it suffers from being ill-defined. Jeff Sussna and other DevOps leaders start with more philosophical approaches that DevOps is “empathy” applied as a design principle. DevOps is as much more a methodology than a collection of skills – a quick job search for titles that include the word DevOps varies so broadly that it has to be qualified by specific technologies, either in the title or job description. Monster.com recommends against using DevOps in job titles because “shouldn’t everyone in tech be a part of DevOps?”

WebOps, a term championed by Pantheon and others, is much closer to the Drupal web application space, except for the fact that in its simplest forms, WebOps is just “DevOps for web applications.” Contegix uses the WebOps term to describe all of the support and DevOps activities related to managing Drupal sites on its BlackMesh platform. The subtle difference between the two being whether the platform is included in the definition or not.

Any term should also be usable for small agencies or IT departments that need to outsource these activities. Remote System Administration is quickly becoming an antiquated term that assumes a non-developer skillset. Managed Services or Remote Managed Services again suffer from the overly broad nature of the universe of services that can be delivered under those terms.

And while this blog suggests DrupalOps in the title, Drupal is increasingly just a single component of larger web presences. Headless Drupal behind a Node.js frontend or mobile application is more than just Drupal Ops. Similarly, a Drupal application whose frontend has significant Lambda or other serverless computing components doesn’t fit neatly within the DrupalOps definition.

So, what do we call these skills that used to be performed by the System Administrator but are replaced by new development activities? How can we brand those skills in a recognizable term that serves both larger teams that acquire those skills or smaller teams that need to outsource them in order to be successful?

As this blog raises more questions than answers, I invite the Drupal community to join the discussion in the comments below.  What do your teams call these activities? How has this impacted job titles? For smaller teams, how have you addressed the skills gap?  Most interestingly, what do you propose calling these activities?

[Listen Now]

I’d also like to invite you to a listen to a live discussion with Tim Lehnen, CTO, Drupal Association and Kelly Beck, Drupal DevOps Engineer with the BlackMesh team at Contegix and myself about this very subject. Click here to watch the video.

Apr 19 2021
Apr 19

Lynette has been part of the Drupal community since Drupalcon Brussels in 2006. She comes from a technical support background, from front-line to developer liaison, giving her a strong understanding of the user experience. She took the next step by writing the majority of Drupal's Building Blocks, focused on some of the most popular Drupal modules at the time. From there, she moved on to working as a professional technical writer, spending seven years at Acquia, working with nearly every product offering. As a writer, her mantra is "Make your documentation so good your users never need to call you."

Lynette lives in San Jose, California where she is a knitter, occasionally a brewer, a newly-minted 3D printing enthusiast, and has too many other hobbies. She also homeschools her two children, and has three house cats, two porch cats, and two rabbits.

Apr 19 2021
Apr 19
Logos of Pfizer, Moderna and Johnson & Johnson

Pfizer, Moderna and Johnson & Johnson all use Drupal for their websites. They each have hundreds of Drupal websites.

AstraZeneca, the fourth vaccine producer, doesn't use Drupal. However, the University of Oxford, who developed their vaccine, is an active Drupal user.

These organizations save millions of people each year. I'm proud that they use Drupal.

Apr 19 2021
hw
Apr 19

As the Director of Drupal services at Axelerant, one of the things I often worry about is the growth of each of the members of my team. We are a Drupal agency, so there are a lot of options for people to choose from. Yet, there are different concerns with working on Drupal for a long time. Today, I’ll talk about some of those concerns and what are the mitigating factors. I can’t claim to present a perfect solution, even less in a post written in less than an hour. But I hope to at least get the topic started.

Concern: Drupal is not cool anymore

When Drupal celebrated its 18th birthday, there were jokes around how Drupal is now old enough to drive (or something like that). This year, Drupal is 20. You might be surprised but a software’s life-cycle is not the same as a person’s life-cycle :). So, while 20 might be the age where a person is cool (I’m showing my age, aren’t I?), that’s not the same for software.

Yes, Drupal is now in the boring technology club. It has been so for years with a definitive transition around the Drupal 8 period. This is not a bad thing. It’s only a bad thing if you want your software stack to be cool and you having to work against deadlines to fix issues for everything that is just a little out of the way. Drupal is mature, predictable, and boring. And that means you should not worry about Drupal going out of style anytime soon.

Fact: Drupal does valuable things; cool, but also valuable

However, the people who have this concern don’t worry about the software living on. They are missing the fun that comes with working with cutting edge technology. They’re right. Fun is important and software development is hard enough without it not being fun. The fact is that Drupal can still be used in cool new ways. For example, Decoupled Drupal is one of the newest trends in the industry to offset Drupal’s limitations in the front-end area. Another subtle way that Drupal is fun by opening it up to the PHP ecosystem with the “get off the island” movement with Drupal 8. You don’t have to be limited by Drupal’s API and libraries to do what you want. The entire PHP ecosystem of packages is available for you for direct use within Drupal.

Further, I encourage people not to code just for the sake of coding. Solve a problem: any problem, even if it is a hypothetical issue or an imaginary challenge. Solve it and put it out to help other people. You make that act of coding about people and in turn, you help yourself. But I am digressing. Drupal solves problems of quickly building a web presence for activities that help people. This tweet comes to my mind again over here. Even if Drupal’s software stack is not cool, what it does is cool and that’s a big deal for me.

Concern: There is not much to do in Drupal

As developers grow and learn more, they find that they are learning less and less in their day-to-day work. This is closely tied with the first concern I talked about (Drupal is not cool). People may not think that Drupal is not cool but the underlying thoughts are the same: all tasks are of the same kind and I am not learning anything anymore. They’re right as well but there are ways around it.

I previously wrote that most requirements of building a website with Drupal can be achieved just by configuring in the UI. You only have to write some glue code to get it all working. Opportunities to develop entirely new functionality in Drupal is now rare unless you are working on the Drupal product. This is when people start looking into other frameworks and languages. Again, I highly encourage that because the learning benefits both the person and the project, but that’s beside the point of this post.

Fact: There is a lot to do around Drupal

The problem is in finding opportunities around Drupal. I have already hinted at one easy way out of this: work on the Drupal product. That is to say, contribute to the Drupal core and contrib space. These are the people solving the hard problems so that we don’t have to. If you want to solve hard problems, we need you there. I am sure your organization will support you if you are interested in contributing to Drupal.

Next, look at what are the integrations where you could help. Very few Drupal sites today work in isolation. Either you have a completely decoupled site, or at least integrations to other complex systems and these are still challenging areas to work in.

You will notice that the solutions here largely depend on the organization where you work. Yes, you would need the support of your organization and there is a good chance you will get that support if you ask. If you don’t, you can tackle this yourselves but that is the subject of another post.

Concern: No one respects Drupal or PHP

PHP (and Drupal) is often the subject of cruel jokes ranging from competence to security issues to just being old. Chances are that you have come across enough of them and so I won’t write more about this.

Fact: PHP and Drupal communities are some of the most respected ones

To be blunt, don’t listen to these people. In my opinion, they are living in a time 20 years back or are influenced by people who lived then. PHP has made a comeback with a robust feature-set and predictable release cycle. So has Drupal. Moreover, Drupal has rearchitected itself to be more compatible with the PHP ecosystem. Finally, code is just about getting the job done and PHP commands a significant share of the web applications market, so you’re in good company.

And it’s not just about code. PHP and Drupal communities are some of the most welcoming communities in the world. They are often talked about in various places (just search for podcasts on the topic) and people cite examples of how they found welcome and support in the communities.

I am going to leave this post here even though there is a lot more I can say. But these are my thoughts for today and I hope you enjoyed them. I hope to come back to this in another post some day.

Apr 18 2021
Apr 18

A few years ago, during our preparations for the 2018 Aaron Winborn Award, we had the idea that the award should be created by a community member. 

Rachel Lawson, a former member of the Drupal Community Working Group's conflict resolution team, created hand-blown glass awards for both the 2018 and 2019 winners, Kevin Thull and Leslie Glynn. Last year, Bo Shipley created the award for Baddý Breidert. We were lucky to have Bo create the award for this year's winner as well, AmyJune Hineline

Bo crafted the awards out of leather - stacking, gluing, carving, then oiling the leather into its final shape and finish. He was generous to share some photos of the process.

Sanding the stacked leather
Sanding the stacked leather.

Applying the stencil
Applying the stencil.

Cutting and chiseling the design.
Cutting and chiseling the design.

Cutting and chiseling the design.
Cutting and chiseling the design.

Closeup of the texture.
Closeup of the texture.

Mounting to the base.
Mounting to the base.

Mounting to the base.
Mounting to the base.

We cannot thank Bo enough for donating his time and talent for this project!

If you are interested in crafting a future Aaron Winborn Award, please let us know at drupal-cwg at drupal dot org!
 

Apr 18 2021
Apr 18

Spring 2021 Drupal Career Online class photo

We're halfway through the 12-week Spring 2021 Drupal Career Online semester, with a wonderful group of nine Drupal students. We are just finishing up our spring break/independent study week, and looking forward to diving into module and theme development, followed by team workflows, the configuration system, and more before we confer their certificates at graduation on May 19th. During the first half of the course, we spent lots of time with information architecture (entities, bundles, and fields) as well as Composer, Drush, and Git topics. 

Some insight on this semester's class:

  • Includes students from 3 countries.
  • There are one or more Windows, Mac OS, and Linux users.
  • Some are brand new to Drupal, while others are Drupal content managers, and Drupal 7 developers.
  • They have varying levels of previous Drupal, command line, and Git experience.

Since different students have different goals, they are all taking advantage of the wide range of resources we offer to help each student achieve their personal/professional goals. This includes office hours to help students work through course or non-course related Drupal issues, screencasts for every lesson, and one-on-one community mentors for every student.

Our next semester of Drupal Career Online begins on August 30. If you know someone who might be interested in applying, they can learn more at one of our free, 1-hour Taste-of-Drupal information webinars.

Apr 18 2021
hw
Apr 18

As of this writing, there are 47,008 modules available on Drupal.org. Even if you filter for Drupal 8 or Drupal 9, there is still an impressive number of modules available (approximately 10,000 and 5,000 respectively). Chances are that you would find just the module you are looking for to build what you want. In fact, chances are that you will find more than one module to do what you want. How do you decide which module to pick or if even a particular module is a good candidate?

Like all things in life, the answer is “it depends”. There are, however, a few checks that you can make to make a better decision. Well, these are the checks I make when trying to pick a module and I hope they can help you too. This is not something you should take strictly; just use this as a guideline to help you decide. Also, if a module fails one of these checks, it doesn’t mean that the module is a bad choice. It only means that you might be making a trade-off. Software is all about making trade-offs and so this is nothing new.

Lastly, I’ll try to focus on modules here in this post but most of this advice is suitable for themes as well.

First-look checks

These are the most basic and easiest checks you can make on a module. Except for the first one, these are not strong indicators but they can quickly give you an initial impression of the module. There might be excellent modules that are perfectly suited to your needs but fail these checks, which is why you should only use these checks to differentiate between two modules. Yeah, the irony of the name is not lost on me.

Version

Is the module even available for your Drupal version? If you’re using Drupal 9, you would need the version that supports Drupal 9. Earlier, just reading the module version would tell you if it is compatible. For example, if the module version is “8.x-3.5”, you know that the module is for Drupal 8, not Drupal 7. You might think that the module is not for Drupal 9 either but that’s not so simple anymore.

Screenshot of version information on Drupal.org

As you can see in the above screenshot from the Chaos Tools module, the 8.x-3.5 version is for both Drupal 8 and Drupal 9. This changed after Drupal.org began supporting semantic versioning for contrib projects. These example release tags show different styles of version numbers you might see and this change record explains how a module may specify different core version requirements.

Module page

Is the module page updated? Does the description make sense considering the Drupal version you are targeting? If you’re looking for the Drupal 9 version of the module and the text hardly talks about that, maybe the module is not completely ready for Drupal 9 or has features missing.

Screenshot of project page on Drupal.org

Another clue you may have is the timestamp when the page was last updated. It may just be that the maintainer has forgotten to update the page even if the module works perfectly fine. For this, we go to the next set of checks.

Recent commits

Has the module been updated recently? If it was last updated years ago, chances are it won’t work with the latest version of Drupal core. Even if it works with your version of Drupal core, would you be able to upgrade once you upgrade to the latest version of Drupal core?

Screenshot of commits block on a project page

The block on the module page gives a quick summary of the recent commits, but don’t rely entirely on this. The block only shows current committers. If there are newer commits by a previous committer or commits made elsewhere pushed here (this would happen if someone were maintaining the module on Github, for example), they won’t show here. To be sure, click on the “View commits” link to see all the commits.

Issues

Is there a discussion going on about improving the module? The issues block on the project page gives a quick summary of what’s happening on the module. Be careful though, some module maintainers choose to maintain the module on Github or elsewhere. In those cases, the issues here would show no activity (or it may be entirely disabled).

Issues block on project pageResources

Are there other resources for the module? Is there external documentation or documentation within the drupal.org guides? The Documentation and Resources block on the project page will point you to such links and other useful links.

Code structure check

These checks take a little more time than just quickly scanning the project page. These indicators are a little more reliable but not the sole determinators of success. For all of these checks, first, go to the code repository by following the “Browse code repository” link from the project page and then, select the branch for the version you want.

README file

In a previous section, I mentioned that the project page may have an outdated or missing description. This happens over time when there are multiple versions and the maintainers find it difficult to keep the page updated. However, chances are that the maintainers would definitely update the README file in the repository. Go to the code repository (see screenshots above) and find the README file. The actual file may be named either README.txt or README.md.

If this file is maintained, there is a good chance the module is well maintained and documented and you would have fewer problems using it.

Code structure

You would need experience with Drupal development to make this check. Look at the module code and see how it’s structured. Are the classes neatly separated from the rest of the code? Does the code make separation of concerns? Are there tests? Is everything dumped in the “.module” file or a bunch of “.inc” files (ignore this if you are checking for Drupal 7 modules)? If the module stores something in the config, is there a config schema?

There are some metrics we can gather to understand this better but not from the code repository browser we see. But an experienced developer would know by looking at how well the module is following Drupal conventions. This is important because following these conventions will make it easier to keep the module updated for future versions of Drupal. You don’t want to start with a module and be stuck on an older version of Drupal because of this.

Test

Here is where we actually test the module and see if it works. These are the strongest indicators but also the most time-consuming to check.

Simplytest.me

The easiest way to check a module is simplytest.me. This excellent community-run service lets you test contrib projects along with patches. Type the name of the module and click “Launch Sandbox”.

SimplyTest screenshotThere is also an “Advanced options” section that lets you add more projects (if you want to test this module along with another module) and patches. Select the module or combination of modules you want, click “Launch Sandbox” and you have a brand new Drupal installation to play with for 24 hours. This actual testing will help you determine if this module fits your need.

Test locally

If you don’t want to test on simplytest.me or you simply want to evaluate code locally, use one of the quick-start Drupal tools to get a Drupal installation with the module. For example, with axl-template, I can type this command to get a Drupal site with smart date module and a few others.

$ init-drupal drupal/test -m smart_date -m admin_toolbar -m gin

You can also use the same code base to evaluate the codebase better, maybe even run some of the code quality checks on it if you’re interested.

I hope this quick post was useful to you. Like I said before, don’t treat this as a complete list but as a guide. In the end, your own experience and actual tests will tell you more. The above guidelines are only here to save you time in reaching there.

Apr 17 2021
hw
Apr 17

I picked up this topic from my ideas list for this #DrupalFest series of posts. I didn’t think I would want to write about this because I don’t think about features that way. One of the strengths of Drupal is its modular architecture and I can put in any feature I want from the contrib space. In fact, I prefer that, but that’s a different topic. I am going to write this very short post anyway because I am now thinking about this from a different point of view.

To write this post, I thought about the various things that bother me in my day-to-day work. I thought of how we could have simpler dependency injection, or lesser (or clearer) hooks, or lesser boilerplate, but then I realized that all of those don’t matter to me very much right now. Those can be improved but they are inconveniences and I can get over them.

Easier testability is what I want from the future versions of Drupal. I have realized that the ease of testability is the strongest indicator of code quality. A system that is easily testable is implicitly modular along the right boundaries. It has to be, otherwise, it is not easy to test. A good test suite comprises of unit tests, integration tests, and feature tests. If it is easy to write unit tests, then the system is composed of components that can be easily reused (à la SOLID principles). Integration and feature tests are easier to write but eventually, they get harder unless the system is built well.

Drupal core testability

Now, Drupal is one of the most well-tested pieces of code out there. Each patch and every commit is accepted only after it passes tens of thousands of tests. Testing is also a formal gate in adding new features (and some bugfixes). That is to say, any new feature needs to have tests before it can be merged into Drupal core. Consequently, testing is common and core contributors are skilled in writing these tests.

This testability is not easily carried forward to most kinds of websites we build using Drupal. Building a typical Drupal website is mostly a site-building job and cross-connecting various elements. This happens either by configuring the site via UI or by using hooks which are essentially magically named functions that react to certain events. With Drupal 8, the hooks-based style of writing custom modules has changed significantly with modern replacements but principally the same. This style of code where you have multiple functions reacting to events and altering small pieces of data is very difficult to unit test. This means that the only possible useful tests are feature tests (or end-to-end tests). Unfortunately, these tests are expensive to run and failures do not always point to an isolated unit.

Testing tools

There have been several attempts to make writing tests easier generally and for Drupal. The package that stands out to me for this is drupal-test-traits. This package provides traits and base classes that make it easy to test sites with content. You would set the configuration to point to an installed site and run the tests. The traits provide methods to create common entities and work with them and the tear-down handlers will clean those entities up at the end. All you have to worry about is providing an installed site.

In fact, the common problem with testing Drupal is testing an installed site. Most Drupal sites I have worked with are not easy to install, despite best efforts. Over time, you need to rely on the database to get a working copy of the site. This is true even if you follow the perfect configuration workflow. It is very common to have certain content required to run a site (common block content, terms, etc) and configuration workflows cannot restore such content. There are other solutions to these problems but they are not worth the pain to maintain. We’ll not go into that here.

Handling the database and assets

Sharing databases turns out to be the simplest way to create copies of a site which shifts the problem to making such databases available to the testing environment (e.g., CI jobs). If you are running a visual regression test, you would also need other assets such as images referenced in blocks and so on. At least for the database, we have prepared a solution involving Docker and implemented as a composer plugin. Read more about it at axelerant/db-docker. This plugin makes it easy for the team to manage the database changes as a Docker image which can be used by the CI job (or another team member).

Handling assets is a more complicated problem. We traditionally solved this with stage_file_proxy and I am planning to work on this more to build a seamless workflow like we did for databases. Any ideas and suggestions are very welcome. :)

The testing workflow

Drupal has long been said to be a solution to build “ambitious digital experiences”. Such systems are built by teams and any team needs a workflow on which everyone is aligned (otherwise it wouldn’t be a team). We have seen many improvements in various aspects of Drupal over time that cater to a team workflow (configuration management comes to mind clearly). In my humble opinion, I feel standard workflows for improving testing should be a priority now.

I will leave my post here as it is already much longer than I intended. I know I didn’t present any comprehensive solutions and that’s because I don’t have one. My interest was in sharing the problem here. There are only pieces of the solution here and I am interested in finding the gel that brings them together.

Apr 16 2021
Apr 16

Often when things seem really complicated, I think it's because I must be doing it wrong.

Working on Drupal core since dependencies were removed from git has seemed really fiddly. For a long time I thought I must have missed something, that there was some undocumented technique I wasn't aware of.

But I've asked various people who work on core a lot more than I do, and they've confirmed that what I've been doing is pretty much the way that they do it:

  1. Get a git clone of Drupal core.
  2. Run composer install on it.
  3. Write code!
  4. Make a patch (well, a merge request now!)

That all sounds simple, right? But wait! If you're working on core, you're going to want Devel module for its useful debugging and inspection tools, right? And Drush, for quick cache clearing. And probably Admin Toolbar so going around the UI is quicker.

But you have to install all those with Composer. And doing that dirties the composer.lock file that's part of Drupal core's git clone.

It's fairly simple to keep changes to that file out of your merge request or patch, but pretty soon, you're going to do a git pull on core that's going to include changes to the composer.lock file, because core will have updates to dependencies.

And that's where it all starts to go wrong, because the git pull will fail because of conflicts in the composer.lock file and in other Composer files, and conflicts in that file are really painful to resolve.

So maintaining an ongoing Drupal install that uses a Drupal core git clone quickly becomes a mess. As far as I know, most core developers frequently reset the whole thing and reinstall from scratch.

The problem is caused by using the git clone of Drupal core as the Composer project, so that Drupal core's composer.json is being used as the project composer.json. But there's a better way...

Using Composer with git clones

Composer has a way of using a git clone for a package in a project:

  1. Create your own git clone of the package
  2. Declare that git clone as a Composer package repository in the project's composer.json
  3. Install the package

The result is that Composer creates a symlink from your git clone into the project, and doesn't touch the git clone. You need to be fairly lax in the version requirement you give for the package, so that Composer doesn't object to the git clone being on a feature branch later on.

This, as far as I know, is the standard way for working on a Composer package that you need to operate in the context of a project. It works for library packages and Composer plugins.

For Drupal core...? Well, it works, but as you might have guessed it's a little more complicated.

Drupal has opinions about where it expects to be located in a project, and furthermore, has a scaffolding system which writes files into the webroot when you install it. All of that gets a bit confused if you put Drupal core out of the way and symlink it in.

But with a few symlinks, and one sneaky patch to a scaffold file, it works. It's all quite fiddly and so I've made...

The Drupal Core development project

This is a Composer project template, available at https://github.com/joachim-n/drupal-core-development-project. It handles all the necessary tweaks to get Drupal to work when symlinked into a project: install it as a Composer project.

There are still a few limitations: those are detailed in the README too.

Of course, I've now fallen down the rabbithole of doing more work towards making Drupal completely agnostic of its location, rather than the core issues I wanted to work on in the first place.

Please try it, report any problems, and happy coding on Drupal core!

Apr 16 2021
hw
Apr 16

Drupal is a CMS. One might even say that Drupal is a good CMS and they would be right about that, in my not-so-humble opinion. At its core, Drupal is able to define content really well. Sure, it needs to do better at making the content editor’s experience pleasant, apart from other things. But defining content structures that are malleable to multiple surfaces has always been Drupal’s strengths. This makes Drupal an excellent choice for building a Digital Experience Platform (DXP).

The concept of a DXP has been popular for a few years but it has peaked, not surprisingly, in the last year with organizations now forced to prioritize their digital presence above all else. Companies have now realized that, with the amount of information being thrown at each of us, they have to make sure their presence is felt through all media. Building a coherent content framework that can be used for all of this media is no easy task. Information architects need powerful tools to flexibly define how they would store their content. Drupal has been able to provide such tools for a long time.

Digital Experience is a strategy

You might have realized by now that DXP is not a product, but a collection of tools that can help you execute your strategy. With the proliferation of media, it is important that you convey a consistent message regardless of how someone consumes it. To be able to do that, you have to identify the various ways you would talk to your customers and build a strategy. This is highly subjective and customized for your needs, and I won’t go into much depth here but the output we want is a coherent content architecture. An architecture which can represent your messaging to your customers.

Once you’re able to formulate this strategy, that is when you begin implementing it within your DXP. The content architecture you have identified goes in the CMS within the DXP and it needs to be flexible enough. Drupal is a very capable CMS for such requirements. It supports complex content models with relationships among pieces of content, rich (semantic) fields, and multilingual capabilities. You can also build advanced workflows for content moderation. This enables Drupal to be the single source of truth for all content in an enterprise. This, too, should be important in your content strategy and Drupal makes it easy to implement.

Discovery

A lot of this may sound like a lot of theory and not enough practice. In a way, that’s true. Think of this as a discovery stage for the problem you’re solving. It’s important you spend enough time here so that you identify the problem clearly. Solving a wrong problem may not be very expensive from a technical point of view but frustrating to your content team. Involve various stakeholders within the DXP to determine if the content model you are building will break their systems. For example, your long text field may be good for web and email, but is unusable for a text message. But if you break up your content into a lot of granular pieces, you have to figure out how to  piece it together to build a landing page.

You also have to determine how your content can be served to more diverse channels (e.g., voice assistants or appliances). Depending on your domain, you have to make trade-offs and build a model that is workable for a variety of consumers. But that’s only one side of the story. You also have to make sure that the content is easily discoverable (both internally and externally), easily modifiable, auditable (revisions), trackable (workflows), and reliably stored (security and integrity of the data). Typically, there are an ecosystem of tools to help you achieve this.

Integrations

Drupal already handles some of these things and it can integrate well with other systems in your infrastructure. Drupal 8 began a decoupling movement which became a hype and is now being rationalized. I wrote about it in a separate post. To be clear, decoupling was always possible but Drupal 8 introduced web services in the core that accelerated the pace. Today, you only need to enable the JSON:API module to make all your content immediately discoverable and consumable by a variety of consumers.

Apart from being the content server, Drupal also handles being the consumer very well. As of Drupal 8, developers can easily use any PHP package, library, or SDK to communicate with different systems. Again, this was possible before but Drupal 8 made it very easy by adopting modern PHP programming practices. Even if a library or SDK is not available, most systems expose some sort of API. From Drupal’s point of view, use the in-built Guzzle or another HTTP client of your choice and invoke the API.

Where does Drupal fit in

Drupal is now a very suitable choice for beginning to build your DXP. However, that is not the complete story. All systems evolve, requirements change, and strategies shift. It should be easy for Drupal to shift along with it.

For example, Drupal’s current editing experience was excellent when it came out but that was several years ago. Today, building an intuitive editorial experience with Drupal is the most pressing challenge we face. There are a lot of improvements in this space and there will be more with newer versions of Drupal. It helps that community has picked up a reliable release schedule and that has built the user’s trust in Drupal. Because of the regular release schedule and focused development, we see editorial features such as layout builder and a modern theme as a part of Drupal.

It may seem that this is not important, or at least not as important as “strategy” and “infrastructure”. That’s a dangerous notion to have. Ultimately, your system will only be as effective as your team makes it. An unintuitive UI makes for mistakes and a frustrating experience. And if it is hard to maintain the content, it will not be maintained anymore. If there is anything more dangerous than missing content, it is outdated content.

Customization

Apart from the editorial experience, a flexible system is important for an effective DXP. If the content store cannot keep up with the changes required for new consumers or even existing ones, it will become a bottleneck. In organizations, such problems are solved by hacking on another system within the DXP or running a parallel system. Both of these approaches mark the beginning of demise of your DXP.

That is why it is important for you to be able to easily customize Drupal. Yes, I’m talking about low-code solutions. Drupal has figured out how to modify the content structure with minimum developer involvement, if any. It needs to make this easier for other functionality as well. Various features of Drupal should be able to interact with each other more flexibly and intuitively. For example, it is possible to place a view within a layout but it is not intuitive to do so. We have to identify such common problems and build solutions for site-builders to use. Again, I am not going to go in depth into this.

Building a digital experience platform for your organization is a massive undertaking and I cannot hope to do justice to all the nuances within a single blog post written over a couple of hours. But I hope that this post gave some insights into why Drupal is relevant to this space and how it fits into the picture.

Apr 16 2021
Apr 16

Matt and Mike have Front-end core committer Lauri Eskola on to talk about the new Drupal core theme starterkit that can be used to generate new themes. We'll talk about what's been done, and what's in store for this new Drupal core feature.

Apr 15 2021
Apr 15

Featuring a video from Acro Media’s YouTube tutorial series Tech Talk, this article will walk you through setting up an awesome Drupal Commerce product catalogue using Search API and Solr, and then adding various ways of filtering the results (product search, sorting options and Facet categories).

Ten steps to creating a product catalogue with Search API, Solr & Facets

These 10 steps will get you a Search API index using Solr, setup a View to display the results of the index, and then implemented 3 different ways to filter the results (search, sorting and Facets).

The end result of this guide will be a catalogue that functions in the same way as our Urban Hipster Drupal Commerce demo site’s catalogue. You can try it here. If you don’t already know why we use Search API, Solr and Facets for catalogues, check out this article to get up to speed.

Even though we’re going to be using products, once you understand how it works you’ll be able to apply the same method for other type of content such as a blog, videos, resources, and more. The datasource can change but the process is the same.

Let's get started! Follow along with this video or skip below for a written guide.

[embedded content]

What you need before starting

  1. A running Solr server (Solr 6.4+)
    This tutorial assumes you have Solr running and can make a new core.
  2. Drupal 8 installed with the following modules:

    TIP: Get most of what you need quickly with Commerce Kickstart. Note that you will still need to install the Facets module after getting your Kickstart package.
    • Commerce
      composer require drupal/commerce
    • Search API
      composer require drupal/search_api
    • Solr
      NOTE: This module requires you're running Solr 6.4+ and PHP 7
      composer require drupal/search_api_solr
    • Facets
      composer require drupal/facets

Getting started

  1. Install/start Solr and add a new core that we’ll use later.
  2. Enable the Commerce, Search API, Solr and Facets modules.

Setup a basic Commerce store

For this tutorial, get your site and basic store set up by doing the following:
  1. Add a product category taxonomy vocabulary that is at least 2 levels deep.
    If we use clothing as an example, we might have Men and Women as the first level, then t-shirts, shorts and shoes as the second level for each.
  2. Setup your basic Commerce store, product types and product variation types.
    If you’re new to Commerce, take a look at their documentation to get up and running quickly.

    NOTE: Make sure to add the taxonomy vocabulary you created as a ‘taxonomy reference’ field to your Product Type.

  3. Add 10 or more simple products for testing the catalogue as we go.

Demo Drupal Commerce today! View our demo site.

Add a Search API server and index

Search API server

Admin: Configuration > Search and metadata > Search API
Admin menu path: /admin/config/search/search-api

  1. Click ‘Add server’.
  2. Configure the server.
    1. Name your server and enable it.
    2. Set ‘Solr’ as the server ‘Backend’.
    3. Configure the Solr connector.
      The defaults are usually fine. The main things to add are:
      • Solr connector = ‘Standard’.
      • Solr core = Whatever you named your core.
    4. Under ‘Advanced’, check ‘Retrieve result data from Solr’.
    5. Look over the remaining settings and update if you need to.
Search API index

Admin:Configuration > Search and metadata > Search API
Admin menu path:/admin/config/search/search-api

The index is where you set what data source is used by Search API. Eventually, you’ll also specify specific fields to be used for filtering the displayed results.

  1. Click ‘Add index’.
  2. Configure the index.
    1. Name your index.
    2. Data source should be ‘Product’
      This can be anything, but we’re creating a Commerce catalogue and so we want to use the store products.
    3. Select the server you just created.
    4. Save. Don’t add any fields for now, we’ll do that later.
    5. Go to the ‘View’ tab and index your results. This will index all of the products you have added so far.

Create a View for the catalogue

Admin:Structure > Views
Admin menu path:/admin/structure/views

The View will use the data source we’ve identified in our index and allow us to create a catalogue with it, and then assign ways of filtering the catalogue results (i.e. a search field and/or facets).

  1. Create a new View.
    1. View Settings, select your index.
    2. Create a page (this will become our catalog).
  2. View Display settings.
    1. Format > Show
      Set as ‘Rendered entity’, then in the settings, set your product types to use a ‘Teaser’ view mode instead of the default.

      NOTE: If you don't see the 'Rendered entity' option, this seems to be a bug with Views and happens when you don't select your index before checking the 'Create a page' checkbox. To fix this, just refresh your page to start over. If that doesn't work, flush your caches.

      NOTE:You may need to create this view mode if it doesn’t already exist.

      NOTE:You could alternately use Fields instead of view modes, but I like to keep my product display settings all within the product type’s display settings. Then you can potentially customize the display per product type if you have more than one.

  3. Save the view .
    These basic settings should give us our overall catalog. You can confirm by previewing the view or visiting the page you just created.

Add Fulltext datasource fields for a catalog search field

Now we’ll start setting up a Fulltext search field to let our users filter results using a product search field. The first thing we need to do is add some datasource fields to our index that the search will use.

  1. Go to your Search API Index and go to the Fields tab.
  2. Add Fulltext fields that you would like to be searchable (such as Title, SKU, Category taxonomy name, etc.).
    Here’s an example for adding the title:
    1. Click ‘Add fields’.
    2. Under the ‘Product’ heading, click ‘Add’ beside the ‘Title’ field.

      NOTE: If you’re adding a different field instead, you may need to drill down further into the field by clicking ( + ) next to the field. For example, to make a taxonomy term a searchable field, you would go to Your Vocabulary > Taxonomy Term > Name .

    3. Click ‘Done’.
    4. Set the field ‘Type’ to ‘Fulltext’.
      This is an important step as only Fulltext fields are searchable with the user-entered text search we are currently setting up.

      NOTE: Under the fields section is a ‘Data Types’ section. You can open that to read information about each available type.

    5. Optionally change the ‘Boost’ setting.
      If you have more than one Fulltext field, the boost setting allows you to give a higher priority to specific fields for when the terms are being searched.

      For example, multiple products could have a similar title, but each product would have an individual SKU. In this case, SKU could be given a higher boost than title to make sure that search results based on the SKU come back first.

  3. Next, add another field for the ‘Published’ status.
  4. Once you’ve added this field, set it’s type as ‘Boolean’.
  5. Reindex your data (from within the index view tab).

Set up the catalogue search field within the catalogue View

We can now set up the actual search field that our customers will use to find products, and use the datasource fields we added to our index to do this.

  1. Go to your catalog View.
  2. Under ‘Filter criteria’.
    1. Add ‘Fulltext search’ and configure its settings.
      • Check ‘Expose this filter to visitors, to allow them to change it’.
        IMPORTANT:This is what gives the user the ability to use this search field.
      • ‘Filter type to expose’, set as ‘Single filter’.
      • ‘Operator’, set as ‘Contains any of these words’.
      • ‘Filter identifier’, optionally adds an identifier into the url to identify a search term filter.
        (i.e. yoursite.com/products?your-filter-identifier=search-term)
      • Apply/save your settings.
    2. Add ‘Published’ and configure it so that it is equal to true.
      This uses the field we added to the index earlier to make sure the product is actually published. Chances are you don’t want unpublished results shown to your customers.
  3. Under ‘Sort criteria’.
    1. Add ‘Relevance’.
    2. Configure so that the order is sorted ascending.
      This will show the more relevant results first (factoring in the boost you may have applied to your index fields).
  4. Now we need to expose the search field to our customers. To do this:
    1. Open the ‘Advanced’ section of your catalog view.
    2. In the ‘Exposed Form’ area.
      • Set ‘Exposed form in block’ to ‘Yes’.
        This creates a block containing a search field that we can place on the site somewhere.
      • Set ‘Exposed form style’ to ‘Basic’ and update the settings. For now, the settings you might change are customizing the submit button text and maybe including a reset button.
  5. Add the search block to your site.
    Admin menu path:/admin/structure/block
    1. In your preferred region, click the ‘Place block’ button.
    2. Find the Views block that starts with ‘Exposed form’ and click ‘Place block’.
      Its full name will be determined by you view’s machine name and page display name (i.e. Exposed form: products-page_1).
    3. Configure the block as you see fit, and save.
  6. Test your search!
    You should now be able to see the search field on your site frontend and try it out.

Add more datasource fields for sorting options

We can optionally sort the catalogue and search results with some additional sorting filters, such as sorting by Title, Price, Date added, etc. Let’s add the ability to sort our products by title with the option to choose ascending or descending order.

  1. Go to your Search API Index fields and add another 'Title' field the same as you did earlier. However, this time you want to change the field ‘Type’ to ‘String’. You should now have two Title fields added, one as ‘Fulltext’ and one as ‘String’.

    NOTE: The field type can be different depending on what field you’re adding. If you’re adding a sorting field such as Price > Number, you might use the ‘Decimal’ field type.

    TIP: I would recommend changing the label for the new Title field to something like ‘Title for sorting’ so that it’s easier to identify later. You could even change the fulltext Title label to ‘Title for search’, just to keep them organized and easy to understand.

  2. Reindex your data (from within the index view tab).
  3. Go to your catalogue View.
    1. Under ‘Sort criteria’.
      • Add the new title datasource and configure it.
        • Check ‘Expose this sort to visitors, to allow them to change it’.
          IMPORTANT: This is what gives the user the ability to use this sorting option.
        • Add a label for the filter
        • Set the initial sorting method.
      • Add any additional sorting fields if you added more.
    2. Open the settings for the ‘Exposed form style’ (within the view’s ‘Advanced’ section).
      • Check ‘Allow people to choose the sort order’.
      • Update the labels as you see fit.
    3. Save your view!
      Refresh your catalogue page and you should now see sorting options available in the search block that you added earlier.

      TIP: If you DO NOT see the sorting options, this is a bug and is easily fixed. All you need to do is remove the search block and then re-add it.

      TIP: You can place this block in multiple regions of your site and hide the elements you don’t want to see with CSS. This way you can have a block with the site search and no filters in your header, and then also have another block on your catalog pages that shows the sorting filters but no search field.

Add Facets to the catalogue

The filters we added earlier can only be used one at a time, however, often we want to filter the results based on a number of different options. For example, if I’m browsing an online store looking for shoes of a certain style and size, I don’t want to see everything else the store has to offer. I want to be able to go to a ‘shoe’ category, then pick the ‘type’ of shoe that I’m after, and finally pick the ‘size’ of shoe that’s relevant to me. I want to see all of the results that fit that criteria. Facets lets you use taxonomy (and other datasources) to achieve this.

Let’s add a Facet that uses the taxonomy vocabulary we created in the initial store setup. This will be our main catalogue menu for narrowing down the product results. Each facet that is created creates a block that we can add into any region of our template.

  1. Add a Search API index field for your taxonomy vocabulary. Set the field ‘Type’ as ‘String’.

    TIP: Like we did earlier, I would recommend renaming the label for this field to something like ‘Categories for Facet’.

  2. Reindex your data (from within the index view tab).
  3. Go to the Facets page.
    Admin: Configuration > Search and metadata > Facets
    Admin menu path: /admin/config/search/facets

    You should see a ‘Facet source’ available to use. When we created a View using our index, this is what added the Facet source here. Now that we have a source, we can create Facets to filter it.

  4. Click ‘Add facet’.
    1. Choose the ‘Facet source’ to use.
    2. Select the index ‘Field’ that this Facet will use (i.e. Categories for Facet, or whatever you labelled your field).
    3. Name your Facet (i.e. Categories).
  5. Configure the Facet.
    This will cover the basic settings that you will need. Start with this and then you can always play around with other settings later. Each setting has a pretty good description to help you understand what it does.
    1. Widget.
      Choose a ‘Widget’ for displaying the categories. For categories, I like to use ‘List of checkboxes’.
    2. Facet Settings.
      Check the following:
      • Transform entity ID to label.
      • Hide facet when facet source is not rendered.
      • URL alias as ‘cat’ (or whatever you like).
      • Empty facet behavior as ‘Do not display facet’.
      • Operator as ‘OR’.
      • Use hierarchy.
      • Enable parent when child gets disabled.
      • NOTE: the Facets Pretty Paths module can be used to give you nicer looking URL paths.
    3. Facet Sorting.
      Configure as you see fit. In this example, I would only check the following.These settings make sure that the taxonomy follows the same order that you have set within the vocabulary itself.
      • Sort by taxonomy term weight.
      • Sort order as ‘Ascending’.
    4. Save.
  6. Add the Facet block to your site.
    Admin: Structure > Block layout
    Admin menu path: /admin/structure/block
    1. In your preferred region, click the ‘Place block’ button.
    2. Find the ‘Categories’ facet block (or whatever you named it) and click ‘Place block’.
    3. Configure the block as you see fit.
    4. Save.
  7. Test your Facet!
    You should now see your Facet on the catalog page. Click the checkboxes and test out how it works!

One last thing...

The sites we've been building use the Facets Pretty Paths module for making nicer looking URLs with our catalog and filters. For a while we were plagued with a problem where, when the user selects a Facet category and then uses the sorting options, the Facets would uncheck and reset. This is obviously not good because the user is trying to sort the filtered down items, not the overall catalog. We need to be able to maintain the active facets when using the filters.

Luckily, a coworker came up with this nice little solutions that you can apply to your theme's .theme file. You just need to replace YOUR_THEME,YOUR-VIEW (i.e. products-page-1), and YOUR-PATH (i.e. products) in the code below. Ideally, this will be fixed within the module itself soon, but this will work while we wait.

/**
* Implements hook_form_alter().
*/
function YOUR_THEME_form_alter(&$form, FormStateInterface $form_state, $form_id) {
// Store - Product Listing view exposed form.
if ($form['#id'] == 'views-exposed-form-YOUR-VIEW') {
$current_path = \Drupal::request()->getRequestUri();

// If current path is within your catalog, correct the form action path.
if ((strpos($current_path, '/YOUR-PATH') === 0)) {
// Fix for views using facets with pretty paths enabled.
// Replace form action with current path to maintain active facets.
$form['#action'] = $current_path;
}
}
}

Done!

There you have it! You have now created a Search API index using Solr, setup a View to display the results of the index, and then implemented 3 different ways to filter the results (search, sorting and Facets). This is the start of an awesome product catalogue and you can expand on it with more datasource fields however you want. Cool!

Contact us and learn more about our custom ecommerce solutions

Editor’s note: This article was originally published on July 12, 2018, and has been updated for freshness, accuracy and comprehensiveness.

 
Apr 15 2021
Apr 15

Content authoring on the web has evolved. Compelling web content uses a variety of multimedia elements to engage users, tell stories, build brands, and share new ideas. Images, video clips, slideshows, static or parallax backgrounds, block quotes and text pullouts — more than ever, content creators need a tool that embraces an evolving medium and keeps pace with the author’s creativity. We believe Layout Paragraphs is that tool. But first, let’s all agree that the body field is dead.

What is the body field

Web editors and content authors who have been around over the last decade of digital media are intimately familiar with the body field. Many popular content management systems (looking at you, Drupal and Wordpress) feature a standard “post” or “content” type — like page, article, or blog post — right out of the box. These content types often have a couple of fields to fill out before you can publish your post, things like title, tags, friendly URL / slug, and of course body.

The body field, traditionally, is where all your content goes. In the early days of blogging and web publishing that was likely to be all or mostly text, but with time came images, videos, and eventually an array of other multimedia elements. And the body field adapted. Tokens became standard for plenty of web editors — cryptic chunks of text like [[nid:376 align:right]] that would be auto-magically replaced with other elements once you click Publish. WYSIWYG editors (What You See Is What You Get) started shipping with Insert image and Insert video buttons, and began including a variety of tools for encapsulating, aligning, and positioning lengths of text or various media elements. And while these accommodations started to connect content creators with the boundless possibilities of multimedia authoring, they were (and are) clumsy and unpredictable.

Structured content: Reduce, reuse, recycle

One major problem with all of these innovations is that once you click Publish, all that complex content still ends up in the body field — that is, saved into your database as one giant clump of complicated text, tokens, style codes, etc. If you’d like to publish another page with a similar look & feel, get ready to re-inject all of your tokens or go through the same WYSIWYG click-a-thon to reestablish your styles and layout. Thinking of producing a list of all the images used in your posts? Good luck! With all content mushed together into a single field, your site doesn’t “know” the difference between a paragraph of text, an image, or a video.

A structured approach to content organizes each individual element — a pane of text, an image, slideshow, video, or a “donate now” banner — as its own self-contained entity which, ideally, could then be placed within flexibly configured regions on a page. Creating other, similar pages then becomes as simple as swapping out individual elements or shifting them around between regions of a page. And libraries of reusable content elements become the norm — so that you’re now picking your images, videos, donate banners and more from lists of existing content or existing content styles, instead of trying to hunt down how you did something similar the last time.

Structuring your content into individual, reusable elements drives a lot of collateral benefits:

  • Ease of content creation. Authoring with a consistent set of components lets you focus more on content, hierarchy, and intent — instead of trying to remember how you got a video in there at all the last time.
  • Styling and restyling. Using discrete elements of content means that your HTML markup and CSS remains consistent across all of your various pages. When the time comes to update the look & feel of your website, changes made on one article page will “just work” on the rest of your articles and all of their elements.
  • Content migration. The day might arrive when you consider migrating your content to a newer platform or different software. Structured content makes that a snap: Each image, video, slideshow, or paragraph of text gets individually ported to its new home on the new platform. On the contrary, migrating a mess of markup, tokens, and style codes stored in a single body field means writing complex, custom code to recognize those items and deal with them appropriately — not a simple task.
  • Syndication. Want to feature your content in a collection via RSS or deploy it to an app with XML? With structured content apps and other websites can consume just the elements they want of your content (maybe the first paragraph, a title, an image, or a link) then display those elements appropriately according to their own styles — rather than just grabbing a few hundred lines of a single, messy body field and making do.
  • Libraries, lists, and cross-promotion. Want to see all the slideshows that appear in articles with a specific tag? Maybe a list of pull-quotes from your most recent blog posts? Structured content creates a world of opportunity around libraries, lists and cross-promotions.

Structuring content facilitates reuse, and it positions your content to go on living in a variety of platforms or a variety of presentations — long after you first click the Publish button.

The two faces of web content

Structuring content is an essential part of beautiful, intuitive digital authoring, but it’s only one side of the coin. The other side is putting an end to the two faces of your web content. Excepting some of the advances of modern WYSIWYG editors, web content has always had two very different faces: View and Edit.

The way content is edited and the way it’s presented are often strikingly different. Especially if you’re still holding on to “one giant body field” innovations like custom tokens, BBCode, Markdown, or short codes, it can take a handful of Preview to Edit to Preview roundtrips to get your content exactly how you want it. Even if you’ve made the move to structured content, a majority of web-based editors are marked by a dramatic difference between the “back end” and the “front end” — just one more digital convention getting between inspired authors and publishing beautiful content easily.

The king is dead, long live the king

The body field is dead. It’s taken center stage in publishing digital content for long enough. Plenty of web products (Medium and Notion, to name a couple) have driven nails in that coffin for publishers creating content on those specific platforms. But what about content creators and web editors working within their organizations’ websites, in custom web applications where content authoring is just one of several important features? What about you, and your organization’s website? What’s next for your web application?

For Drupal websites, we think Layout Paragraphs is what’s next. It was first released to the Drupal community nearly a year ago, and has been the beneficiary of ambitious development ever since.

The Layout Paragraphs module makes it dead simple for authors to create robust, multimedia content from a library of available components. It offers intuitive drag-and-drop controls for managing content flow and layout, and with appropriate styling can bring the two faces of web content — View and Edit — closer than ever before. We built Layout Paragraphs to embrace the future of multimedia content authoring and to solve the problems we watch clients work through every day.

You can watch a short, two-minute demo of Layout Paragraphs here, or follow the instructions in that post to see it in action for yourself.

Apr 15 2021
Apr 15
Prevent Website Spam

Spam.

This word contains so much pain and headache for any site owner. It is not possible to 100% eradicate spam from your website. However, it is possible to reduce these rates to a minimum, provided that you know how to prevent website spam.

Today we are going to tell you about the best ways to stop website spam. Our web maintenance company has chosen 6 handy anti-spam Drupal modules. You have to choose the one that suits you best and add it to the site.

Apr 15 2021
Apr 15

AmyJune Hineline (volkswagenchick)During DrupalCon North America 2021, the members of the Drupal Community Working Group announced the winner of the 2021 Aaron Winborn Award, AmyJune Hineline (volkswagenchick).  

Since joining the Drupal community in 2015 after a career change, AmyJune has made an impact in multiple aspects of the community. She is a core mentor, helps organize multiple Drupal events around North America, and is a tireless advocate for accessibility and inclusivity in the community. In addition, she is one of the organizers of A11yTalks, a member of the Community Health Team, a documentation contributor, and has been credited in over 700 issues in the past year. Much of her work is sponsored by her employer, Kanopi Studios

Multiple people nominated AmyJune for this award. Here are some of the things they said:

"AmyJune has worked tirelessly for years to encourage contribution to the Drupal project from people with ALL levels of experience and skill sets. She creates a welcoming environment for anyone interested in contributing and makes the process less intimidating."

"She shares her knowledge freely and frequently, and also shares prolifically on social media to help others spread the word about their community work and celebrate successes."

"AmyJune is dedicated to the Drupal project on a level I have personally never seen before."

"AmyJune encourages accessibility and inclusiveness in all of her interactions within the community."

"I've never seen someone more dedicated to community and especially the Drupal community."

"I'm new to the Drupal Community (I joined 5 months ago), and I'm also new to the tech industry, and of course, the onboarding with no coding skills whatsoever has been quite a challenge. In this brief period, AmyJune has been an inspiring role model to look up to."

This year, there were 29 individuals nominated for the award. In the coming weeks, the CWG will be contacting all nominees to let them know of their nomination and thank them for their continued work in the community.

In addition to the physical award shipped to AmyJune, she was also provided with a free ticket to DrupalCon Global which she graciously donated to a deserving community member. The physical award that was hand-crafted by Drupal community member Bo Shipley (simplyshipley).  

The award is named after a long-time Drupal contributor who lost his battle with ALS in 2015. This award recognizes an individual who, like Aaron, demonstrates personal integrity, kindness, and an above-and-beyond commitment to the Drupal project and community. Previous winners of the award are Cathy Theys, Gabór Hojtsy, Nikki Stevens, Kevin Thull, Leslie Glynn, and Baddý Breidert. Current CWG members, along with previous winners, selected the winner based on nominations submitted by Drupal community members.

Nominations for the 2022 award will open in early 2022.
 

Apr 15 2021
Apr 15
[embedded content]

Don’t forget to subscribe to our YouTube channel to stay up-to-date.

File Management Series

In Drupal, files can be uploaded to the site for users to view or download. This can be easily achieved by creating a file or image field on content types.

In the back end, a list of all the files uploaded can be viewed by the administrator, by going to Administration > Content > Files (admin/content/files).

Files uploaded can be easily removed from the individual content pages (see the image below), but removing them entirely from the system is another story. You might be surprised that you cannot find a button, a link or an option to remove these deleted files entirely from the system.

After deleting files on content, if you go to the Files (admin/content/files) page, you will find the deleted files are still there, and the status still shows ‘Permanent’, even though they are already removed from the nodes. It seems very confusing. Removing files from content and removing files from the system are two different things in Drupal.

To remove files from the system, we need to add the file delete function. This can be achieved by installing the File Delete module.

Table of Contents

Getting Started

The File Delete module adds the ability to delete files from within the administration menu.

To download the module run the following Composer command:

composer require drupal/file_delete

How to Configure

After installing the module, we need to add a ‘Delete link’ to the Files page.  We can do that by going to Administration > Structure > Views and edit the views of the Files list. By default, the name of the views is ‘Files’:

To add the ‘Delete link’, we need to add a field called ‘Link to delete File’ in this views, which appears like the following image:

Select this field.  We can keep everything by default, and then click ‘apply’ and save the views.  Next, go to Administration > Content > Files, and there we shall see the ‘delete’ link there, like the following:

How to Use

With this ‘delete link’, we can remove the delete files from the system by clicking on the ‘delete link’ shown in the above diagram. Note that Drupal will protect all the files, and will not allow files to be deleted when they are being used in any content.  If you try to delete a file which is still being used in a node, you will see this following error message.

The Tricky Part

In some cases, even if you have deleted the files from the nodes, and the files are no longer visible in the nodes, you might still find this error message disallowing you to remove the file from the system.

But that might be correct because these files might still be used in content. The nodes where these files came from might have more than one revision. These files removed from the current revision might still be attached to the previous revisions.

When this happens, check out the nodes again for multiple revisions, like the following example:

Only when all attachments (including the old revisions) are cleared, then these files can really be removed from the system. So in summary, when we delete the files, we need to make sure that these files are not being used in any content, including the old revisions.

The File Status

Even though you can successful remove deleted files from the system using the ‘Delete link”, you will still find the following:

  • The file is still on the list
  • The status of the file is changed from ‘Permanent’ to ‘Temporary’
  • The file is used in 0 places (that means it is not used with any nodes)

Following is an example how it will look like:

But why do these deleted files showing ‘temporarily’ status still appear in the list?  Here is why …

In fact, the files removal process has already been initiated. Drupal will delete the file in the following sequence:

  1. Change the status from ‘Permanent’ to ‘Temporary’
  2. Wait for a minimum of 6 hours
  3. Upon the next cron-run after 6 hours, the system will really remove these temporary files

That is why you still see these deleted files in the list within this 6-hour period.  This is how Drupal manages temporary files.

Temporary File Management

If you go to Administration > Configuration > Media > File system, you will find a configuration and explanation at the bottom of the page:

Here it says temporary files will be deleted in the next cron run after 6 hours. Note that 6 hours is the minimum. This ‘6 hours’ setting can be changed, but 6 hours is already the minimum.  See the following options for the configuration:

With the ‘Media’ module, files can also be added as media documents instead of a ‘File’ field.  These files added as media documents can also be deleted, but it will be a little bit different in the operation. Again, the system will not allow deleting files that are still being used.

To delete such files added as media entities, pay attention to the following:

  1. Confirm that the media is not being used on the site first.
  2. Go to Administration > Content > Media to the list of media entities, and delete the designated items here first.
  3. Next go to Administration > Content > Files, and then delete the designated files here.

It will go through the 6-hour cycle described above, but we should leave it to the system to handle it from here.

The Files list is within the administration area, accessible by the administrator. But if other users will require access to this area to delete the files, user permissions need to be configured specifically to this module.

Using Drush

If you use Drush, you can delete files straight away using the “drush entity:delete” command.

For example:

drush entity:delete file ID

This command will remove the file from the Files page and delete it from the file system and you won’t have to wait.

Summary

The file delete procedure in Drupal is not that user-friendly. The module provides the ability to delete files in Drupal.  The procedure for deleting files is a little bit complicated, due to the fact that files can be used therefore associated with different entities in the system.  Also, for this reason, it is suggested that file delete be handled by an experienced administrator with the right permission and access to the administration area.

Editorial Team

About Editorial Team

Web development experts producing the best tutorials on the web. Want to join our team? Get paid to write tutorials.

Apr 15 2021
Apr 15

The special century was, well, a special time. In this one-hundred-year period, roughly from 1870 to 1970, a series of technological revolutions permanently changed the fundamental nature of the human experience. Prior to that era, human experience had not undergone any substantive improvements since the fall of the Roman Empire in the fifth century, a period of about 1,400 years of stagnation.

The inventions in the special century all shared one important characteristic: They could only be invented once. Standing tallest among these innovations was one that started at that epochal moment in world history in September 1882 when Thomas Edison turned on the first commercial power plant in the United States, located in lower Manhattan. Electricity was born and the world would never be the same.

We think of electricity as the thing that keeps our lights on at home, but the greatest value of electricity was the massive gains to labor productivity offered by electrifying your existing industrial processes. Such were the benefits offered by this new technology that innovative organizations hired Chief Electricity Officers to transform their existing processes with electricity, increasing the amount of output one worker could produce.

Fast forward more than a century, and something similar started a decade ago when Amazon Web Services turned CPUs, servers, and RAM into utilities, so that just like electricity they could be turned on and off at will, at low cost, and scaled as needed without any work. This transition from on-premises to cloud, like the transition from human-powered to electron-powered, offers a decade or two period of transition where cutting-edge organizations can gain competitive advantage by adopting new technologies quickly.

The outcome of these transition periods is all too similar, whether we are talking about electrons for power tools or electrons for information: what was strategic becomes tactical, and what becomes tactical becomes less valuable.

And so now we turn to managing content, and the modern content management system, which, depending on how you measure it, is at least 20 years old, and arguably more than 30. Early open source players, mainly WordPress and Drupal, gained rapid market share and provided a competitive advantage to larger organizations that understood the value they offered. 

And Drupal, with Acquia’s help, has flourished as the enterprise content platform of choice while the market for simpler use cases is devoured by players like Wix, Squarespace, and Contentful. But that relentless churn of innovation to standard, of strategic to tactical, marches ever forward, and content is not immune. The next phase of transformation of digital content is coming, and it’s called the composable enterprise.

As you might expect, Gartner is out in front defining what the composable enterprise is:
“A composable enterprise is an organization that can innovate and adapt to changing business needs through the assembly and combination of packaged business capabilities.” The report goes on to say that, “Packaged business capabilities will be sourced from third parties or composed internally. They will deliver more unique and customized application experiences to application users.”

Like the revolution of Amazon Web Services, which turned common IT infrastructure into easily digestible, scalable, and embeddable cartridges that could be inserted into your custom IT needs, a variety of players are starting to break digital content technology into similar cartridges. This makes certain aspects of managing content less strategic, but also opens up enormous opportunities for the organizations that offer these cartridges to other businesses and to those other businesses that know how to leverage them.

And it is this exact future business need that Acquia, the only player with an open digital experience platform, is ready, able, and willing to execute on. With a legacy of being built on the open source content platform Drupal, and a culture that embraces third-party systems, Acquia is already able to offer what an organization needs to execute a composable enterprise strategy.

And Gartner knows this, as it recently ranked Acquia as the #2 leader in the entire digital experience platform space, nipping at the heels of Adobe, and now well ahead of former #2 Sitecore.

Like moving to cloud, and even electrifying, when we look back a decade or two it will be obvious that every organization has to use a similar approach. But also, just like those revolutionary organizations, those that are able to see in the moment of early transition that taking a modular approach to content is a winning strategy will be rewarded. And of course, none more so than the digital experience platforms that understand this shift is inevitable and are serving their customers to execute this winning strategy today.
 

Apr 14 2021
Apr 14

2019 Romande Energie launched a pilot project on three levels: the redesign of the client area, the creation and training of a development team, and a transition towards agile development. We helped Romande Energie with this multifaceted transformation.

Discover more about the services UX Design, Custom Development, CMS, Agile Organisation and Agile Teams and Processes our digital agency has to offer for you.

Kim Bercht, as an Experience Designer and Product Owner at Romande Energie, why did you get in touch with us? What challenges had to be overcome?

We contacted Liip as part of the project to redesign our client area. At the time, we faced several challenges. We wanted to:

  • Include the client in a co-creative approach in developing a client area that met their needs as effectively as possible
  • Regain control of our apps and develop them independently without having to rely on an external partner
  • Set up a new technical architecture that is both modern and flexible
  • Speed up the development and delivery of new functions using an agile approach
  • Train our development teams to deliver a first version of the client area within a very short time frame

Why did you choose Liip to help Romande Energie? What elements played a role in making your choice?

For our first project to be developed using an agile approach, we needed a partner that could help us build our online platform whilst also supporting us to learn the Scrum methodology.

Being experts in this methodology, Liip was also able to pass these skills on to our teams. You coached us as we learned how to take on the roles of Scrum Master and Product Owner. You also taught those involved in the project all about how agility works. This all-round support was extremely beneficial for us.

In addition, you supported our internal developers to learn and get started with new technologies and still do so. Liip also temporarily bolstered the Romande Energie team, which initially consisted of just two developers.

How did your first agile project go for you? What were the initial results?

Our first sprints were very intense. We had to familiarise ourselves with the Scrum methodology and our respective roles, set up project monitoring tools, finalise our technology stack choice, and line up the first functions to be developed. And not to forget ensuring a good team spirit when the first lockdown arrived.

Given the challenges scale to be tackled, which went well beyond the client area redesign itself, we felt somewhat discouraged at the beginning of the project. Agile work requires a complete change of mindset. Contrary to what you might think, agility needs a great deal of discipline.

Adopting this methodology enabled us to focus on one problem at a time and not spread our efforts too thin. After ten sprints, we had sorted out the major bottlenecks and were progressing at a good pace with a better understanding of our roles. I want to point out that our team could solve every problem that came along and remained motivated despite working from home.

Agility requires us to be completely transparent and open across the team, enabling us to question our approach more frequently and ensure there is an ongoing improvement. A clear benefit of this methodology!

During the first sprints, we realised that creating a new client area has raised issues beyond improving the user experience for clients. How did you manage these additional challenges? How has Liip’s involvement helped you?

The project’s scope evolved to incorporate changes to our platform’s technical architecture by boosting the security of our customer data, and improving the integration into Romande Energie’s online ecosystem.

To prepare for the sprints in the best way possible, we had to revise our internal organisation so that we could integrate our technical SAP provider. This resulted in a significant amount of extra work in terms of analysis, development and coordination.

In my role as the Product Owner in this project, this represented an additional level of complexity that I was not familiar with, given that I am not a developer myself. We therefore had to prioritise purely technical developments so that we could implement the first functions that would offer tangible value for our end users.

Thanks to my exchanges with Thierry, my Product Owner coach in this project, I was able to gain new skills that enabled me to overcome these challenges. I am now much more autonomous in decision-making and prioritising my tasks.

Can you give us an example that best illustrates Liip’s agile approach to work?

I have three. You were able to:

  • Adapt the project as we went along to meet Romande Energie's additional technical requirements.
  • Shape a clear vision of the features we would offer our clients, and prioritise their deployment.
  • Integrate and train a new developer for the Romande Energie internal team in record time.

When you look back on your journey today, what do you think you will take away from this adventure? Would you do anything differently?

I was impressed by the quantity and quality of the work completed by the entire team. At Romande Energie, we started from scratch when introducing new technologies and a new working methodology (agility).

We were able to establish a strong team spirit during sprints. Agility also enabled us to continually find areas where we could improve, even after ten sprints!

I would do differently by undertaking less preparation and detailed work in advance on the functions to be implemented. It is important to have a vision of the elements that need to be developed during the next sprint, but no more than that. The project naturally adapts to changing requirements. If you plan too far ahead, you run the risk of reworking the same elements multiple times, thus of not making optimum use of your time.

And finally, how would you describe your collaboration with Liip in three words?

Supportive, kind and sympathetic!

Apr 14 2021
Apr 14

Watch part 2 of Skvare's training series on the CiviCRM Entity Drupal module.

[embedded content]

CiviCRM Entity is a Drupal module that provides enhanced integration with Drupal, allowing developers, site builders, and content creators to utilize powerful Drupal modules including Views, Layout Builder, Media, and Rules. Drupal fields can be added to CiviCRM entity types. It provides Drupal pages and edit forms for all CiviCRM data such as contacts, allowing usage of familiar Drupal content creation tools and workflows.

During this training we cover:

  • Entity view modes
  • Using Drupal fields and form displays
  • Drupal-based view & edit pages for CiviCRM data
  • Entity Reference and Inline Entity Form
  • Entity browser
  • Layout Builder

Filed under

Apr 14 2021
Apr 14

In November 2022, the Drupal community and the Drupal Security Team will end their support for Drupal 7. By that time, all Drupal websites will need to be on Drupal 8 to continue receiving updates and security fixes from the community. The jump from Drupal 7 to 8 is a tricky migration. It often requires complex transformations to move content stuck in old systems into Drupal’s new paradigm. If you are new to Drupal migrations, you can read the official Drupal Migrate API, follow Mauricio Dinarte’s 31 Days of Drupal Migrations starter series, or watch Redfin Solutions’ own Chris Wells give a crash course training session. This blog series covers more advanced topics such as niche migration tools, content restructuring, and various custom code solutions. To catch up, read the previous blog posts Custom Migration Cron Job and Migration Custom Source Plugin.

Most often in Drupal 8, your migration source will be a CSV file, JSON file, or another Drupal database. In some cases your Drupal website needs to coexist in a larger infrastructure. Thankfully, there are various modules for synchronizing Drupal with tools like Salesforce, Bynder, and GatherContent. However, not everything is as clean as those user-friendly modules. This article will dig into migrating data from a Microsoft server using Transact-SQL into a standard Drupal 8 website.


As with any database in Drupal, it starts in the settings.php file. The basic setup for a Transact-SQL database looks like this:

$databases['YOUR_DATABASE_NAME']['default'] = array ( 'database' => '', 'username' => '', 'password' => '', 'prefix' => '', 'host' => '', 'port' => '', 'namespace' => 'Drupal\\Driver\\Database\\sqlsrv', 'driver' => 'sqlsrv', );

“YOUR_DATABASE_NAME” is the key Drupal will use to reference this database, but it does not need to match the actual database name. The other credentials such as database, username, password, prefix, host, and port, need to be filled out based on your specific setup and server, but the last two keys are more general and refer to the type of database.
By default, Drupal uses a MySQL database, so the “driver” field is typically set to “mysql.” However, Drupal by itself does not know how to communicate with a Transact-SQL database, so just setting the “driver” to “sqlsrv” will throw an error

To provide that support, first install and enable the SQL Server module (sqlsrv). But the “drivers” folder in the SQL Server module needs to be accessed at the Drupal root folder (usually called “web” or “docroot”). There are two ways to do this:

  1.  Manually copy the “drivers” folder from the SQL Server module (modules/contrib/sqlsrv/drivers) into the Drupal root folder.
  2. Create a symbolic link (symlink) to the “drivers” folder from the Drupal root folder with a command like this “ln -s modules/contrib/sqlsrv/drivers/ drivers”. The symlink allows the module to update without manual adjustments. 

With the proper credentials and connections, Drupal will now be able to read from the Transact-SQL database.

Now the actual migration can be written. There is no core migration source plugin for this, so you will need to write a custom source plugin that extends DrupalSqlBase. Use Drupal’s dynamic query API to get the database's data, ensuring at least one field can be used as a unique identifier for each row. Once the source plugin is written, the rest of the migration will work as usual.

Apr 14 2021
Apr 14

Watch Part 2 of our CiviCRM Entity 3.0 training series.

CiviCRM Entity is a Drupal module that provides enhanced integration with Drupal, allowing developers, site builders, and content creators to utilize powerful Drupal modules including Views, Layout Builder, Media, and Rules. Drupal fields can be added to CiviCRM entity types. It provides Drupal pages and edit forms for all CiviCRM data such as contacts, allowing usage of familiar Drupal content creation tools and workflows.

During this training we cover:

  • Entity view modes
  • Using Drupal fields and form displays
  • Drupal-based view & edit pages for CiviCRM data
  • Entity Reference and Inline Entity Form
  • Entity browser
  • Layout Builder

Valuable Tools for Better Site Building

  • Entity Browser Module: Provides extremely configurable selection, entity creation, edit form display field widget for referencing/creating entities with entity reference fields
  • Bootstrap Layout Builder: Enhances Drupal Core's layout builder module, including boostrap column layouts, integration with Bootstrap Styles so that site builders can control typography, borders, padding, margin, background color, background video, and much more
  • Bootstrap Styles Module: Provides configurable styles to be used with Bootstrap Layout Builder
  • Bootstrap Library Module: Provides any version of Bootstrap css/js framework for themes that are not bootstrap based
  • Layout Builder Restrictions Module: Allows site builders to limit what blocks are available to add to layouts
  • Inline Entity Form Module: Another module entity creation, edit form display field widget for referencing/creating entities with entity reference fields. Can be used in conjunction with Entity Browser
  • Drupal Console: A command line tool to generate boilerplate code for many Drupal features, including Field formatters and Field widgets
  • Field Group Module: Enables grouping fields into fieldsets, collapsible "Details" element, vertical and horizonal tabs
  • Chaos Tools Module: Chaos Tools: Many "goodies" that haven't been included into Drupal Core. In our demo it allows us to place entity view mode renderings, that use field groups

Additional Resources:

Apr 14 2021
Apr 14

Companies are breaking free of restrictive proprietary platforms in favour of custom open source solutions. Find out why in this comprehensive article.

Advantages of Open Source Commerce

Download the PDF version of this article | Acro Media

Ownership of data & technology

If you use an open source commerce platform, you own the code.

You need to look at your website the same way you would view a brick-and-mortar storefront. Paying a monthly licensing fee for a hosted platform is like having a leased property -- you’re only adding to your overhead costs and you have no control over your future. Hosted solutions don’t allow you to own the code, which business owners often don’t think of as a problem until something bad happens. If a hosted solution goes under, they take you down with them. You lose your online presence and have to rebuild from the beginning. That’s a long and expensive process.

If you use an open source commerce platform you own the code. If you work with an agency and choose to move to an in-house development team or a different agency, you can do so at no cost or risk to your business.

Integration with virtually any business system

The code is completely exposed for you to use.

If you judge ecommerce solutions solely on their feature set, hosted solutions like Magento, Shopify, and Volusion will always look good up front. But your ecommerce platform is more than just window dressing. Open source frameworks can have an impressive feature set, but the biggest advantage is the expansive list of back-end systems they can integrate with.

Proprietary platforms can offer standard integrations with customer relationship management (CRM) systems and fulfillment solutions, but if you’re a big retailer, you may find you need a higher degree of integration for your sales process.

Open source platforms are exactly that. Open. The code is completely exposed for your use. Combine this with the modular architecture and you have a platform with the ability to integrate with virtually any business system that allows access, from CRMs and shipping vendors to payment gateways and accounting software. Your ecommerce site can become an automated business rather than just a storefront.

A custom user experience

A custom user experience gives more power to the marketer.

When it comes to user experience, hosted platforms give you a best-practice, industry-standard, cookie-cutter execution of a shopping cart. It’s a templated design that is sold as a finished product, so you know you’ll have a catalogue, a simple check-out, account pages, etc. Outside of choosing a theme, there is very little room for customization. Open source allows for all the same functionality plus a powerful theme system that allows you to add unique and advanced features very easily.

A custom user experience gives more power to the marketer, allowing them to create custom conversion paths for different user types and integrate those paths within the content experience. You can generate personalized content based on customer data and/or provide different content to users based on their geographic location.

Open source commerce is also ideal for omnichannel selling. The consumer path is seamless across all sales channels, devices, websites and retail tools throughout the entire customer experience. You can set up content, layout and functionality to respond to the device being used, such as smartphones and tablets.

The omnichannel experience & a single source of data

Open source platforms use a single data source which makes it optimal for creating omnichannel strategies.

Today’s ecommerce landscape is rapidly evolving. It’s no longer just about selling products online. Companies are expected to create immersive shopping experiences for users. The advances in mobile technology have given consumers constant and instant access to information. They expect their favourite brands to be able to deliver an integrated shopping experience across all channels and devices complete with personalized content, consistent product information, and simple conversion paths. This is not an easy task. For retailers that sell through both online and in-store channels, the challenge is even greater.

Open source platforms use a single data source which makes it optimal for creating omnichannel strategies. Rather than having to force together multiple platforms that pull data from various systems, open source allows for one centralized data centre that can be accessed by any of the systems you need.

What does this mean exactly?

Customer data, product details, promotions & sales information, inventory numbers and more can all be easily defined and streamlined across multiple channels. For example:

  • Your customers can start a purchase online and then pick up where they left off in your store. 
  • Customer data can be accessed easily for automated marketing; loyalty programs, birthday “gifts”, personalized recommendations.
  • If your products are sold on your ecommerce store as well as third party marketplaces, your product info is always consistent without having to apply multiple updates on various backends.
  • Easily define and promote location-based pricing and offers.
  • Real-time inventory numbers can be shown online to ensure product availability and minimize the risk of back-orders.
  • Tax & shipping rules can be defined per city, state, country to ensure all customers are shown the correct cost of items at checkout.

A flexible platform that aligns with your needs

Exceed the boundaries of a traditional sales platform.

Any ecommerce platform today needs the ability to adapt. If your platform is locked down, you risk losing to your competitors. Hosted ecommerce solutions are just shopping carts with conventional catalogue management and the ability to sell physical and/or digital products.

Open source commerce releases you from these industry-standard restraints. Organize your products using virtually any attribute. Display your products in any style, from lists, grids, or tables to a customized look that can make you stand out from your in-the-box competition. Integrate features that go beyond commerce, such as custom applications, web services, and customer portals. Exceed the boundaries of a traditional sales platform.

Don’t be tied to someone else’s development path. By leveraging an open source platform, you allow yourself to be the frontrunner in your market.

No licensing fees, revenue sharing or mandatory support contracts.

Open source commerce is free to use.

Anyone with the appropriate development skills can pick up an open source framework and begin working with it immediately at no charge. If you require development help you will need to pay a contractor or agency and depending on your needs these upfront costs can seem like a lofty investment. However, after the upfront development, there are no mandatory ongoing costs associated with open source.

If you are utilizing a SAAS or proprietary platform start-up costs are minimal but the majority of them have various ongoing costs.

  • Monthly contracts — SAAS platforms will charge you a monthly fee to use their platform, in addition to this fee you may have to pay for additional functionality, integrations, and/or support.
  • Licensing fees — The big enterprise platforms (Demandware, Hybris, Magento) charge a yearly license fee to use their software platforms. These fees can range from $50,000 - $700,000 per year.
  • Revenue sharing — SAAS and proprietary platforms will often require a revenue share contract to supplement their low monthly fee. A typical revenue share agreement is a 2% transaction fee. Depending on your yearly gross revenue this can be a major blow.

1000’s of supporters and continued development

Open source platforms are pushed forward by thousands of developers and supporters worldwide; agencies, contractors, & enthusiasts all have a shared goal of bettering their software and creating an accessible and stable platform. Proprietary systems simply can’t compete with a workforce this large or this focused. Open source evolves at the pace of the web. By leveraging this type of platform, you can be a front-runner in your market. Often before a retailer even knows it needs a specific new integration or piece of functionality, someone is already building it.

Drupal Commerce & Acro Media

Drupal Commerce is the powerful ecommerce software that extends from the open source Drupal platform. Drupal Commerce was built onto the content management system using the same architecture, allowing for a true marriage of content and commerce. It is a truly unrestricted platform that provides both structure and flexibility.

Acro Media is the leading Drupal Commerce agency in North America. We work exclusively with Drupal and Drupal Commerce, and currently, develop and support one of the biggest Drupal Commerce websites in the world. Our Drupal services include:

  • Drupal Commerce
  • Drupal consultation and architecture
  • Drupal visualizations and modelling
  • Drupal integrations to replace or work with existing platforms
  • Drupal website migrations (rescues) from other web platforms
  • Custom Drupal modules

Are you ready to escape?

Break free from the proprietary platforms and legacy software you’re handcuffed to and create the commerce experience you want. Open source commerce gives the power to the business owner to create a commerce experience that meets the ever-changing conditions of your marketplace as well as the complexities of your inner company workings.

Next steps

Want to learn more about open source, Drupal Commerce, or Acro Media? Book some time with one of our business developers for an open conversation to answer any questions and provide additional insight. Our team members are here to help provide you with the best possible solution, no sales tricks. We just want to help, if we can.

Consulting Services | Acro Media

Apr 14 2021
Apr 14

Working with multimedia is one of the areas that large websites have to deal with. When multiple editors upload a large number of files, keeping your photos and videos in order can become difficult and time-consuming. Drupal has several proven recipes for managing the media library, which I'll present in this article.

Drupal modules for managing multimedia

Drupal offers great flexibility when working with files on a website. In the simplest terms, you can use fields like "File upload". A more complicated option is to use one of the modules to work with multimedia. Let's take a look at three interesting modules worth knowing about.

IMCE module

IMCE is a file viewer available to administrators and editors that also allows you to add, copy, and delete files and directories. It’s fast and convenient, it offers a preview of photos (including creating thumbnails), allows you to sort them and limit the disk space for individual users.

There was a time when the IMCE module was an absolute must-have for any Drupal website. To this day, over 340 thousand websites use it, but its popularity is steadily declining. The reason for this is that with more editors it's difficult to keep your file directories in order. Searching for a specific item is problematic, because the files have only a name and type. It's also impossible to filter them according to selected criteria. Despite the existence of the IMCE version for Drupal 8, new websites usually use other solutions.

IMCE module - Drupal file viewer

 

SCALD project

SCALD is a module designed for Drupal 7, with a very rich base of add-ons (over 50 additional modules). It allows you to add photos, videos, and other types of files as entities called atoms. Each atom can have any field list based on which the media list is filtered. There is no module version for Drupal 8, but there is a migration path for atoms to the Media module entity.

I mention the SCALD module due to its significant contribution to building the concept of media management. With the premières of Drupal 6 and 7, the era of entities and fields was slowly approaching. The first ideas began to emerge to present files as entities that could be described in any way. This is how the SCALD project was created – quite niche, although used over the years on large and popular sites with millions of multimedia, such as Radio France, ARTE TV and Le Figaro.

Media module

This is by far the most important of the modules presented here. It follows an idea similar to SCALD, because it turns files into entities. It’s currently used by over 180 thousand Drupal 7-based websites, as well as all the websites based on Drupal 8 and 9. That's because since version 8.4 it’s in the core.

Media is a mature module, prepared for years by a team of experienced programmers. I can confidently say that it's one of the best multimedia management solutions available on the Internet. What makes the Media module so special? I'd point out its four main advantages:

  1. Effective embedding of a file library in the Drupal's entity/field/view model. This solution gives virtually endless possibilities for web developers. The files can have different view modes and form view modes, they can be used in many independent contexts. A photo sent via the Media module can be used multiple times, both as a thumbnail in the content of the article and, for example, as a background of a large banner.
  2. Leaving the directory/file model. When uploading a photo or video, the editor no longer decides about the order in the directory structure. It’s done automatically. Ordering is done using the fields defined in the media. You can, for example, add a category to the files, and then use it to search through the list of multimedia.
  3. Independence from media sources. On a well-designed website, videos will work the same way whether they are uploaded directly or via YouTube or Vimeo. Photos can also be loaded from multiple sources (such as Pixabay or Google Drive). Such an approach makes the work of editors easier and allows quickly adding subsequent sources as needed.
  4. Media isn't only multimedia anymore. You can put documents, Facebook posts or excerpts from Google Maps in the media library. Your only limit is your imagination.

When it comes to migration, remember that the Media module comes in three forms:

In each of these cases, a migration path to the core version is available, so you can easily transfer the multimedia library to a newer Drupal.

Why isn't the Media module used on every website?

This begs the question – since the Media module is so great and also available in the core, why isn't it enabled by default and used in every Drupal development project? This is because many Media elements need to be set up by a programmer first. Therefore, this module is a tailor-made solution that is strongly adapted to the needs of a specific website.

It's particularly problematic to correctly display videos from external sources (due to the limited capabilities of external players) and to design appropriate display modes for the media. Getting through these issues can take a long time. Due to this fact, at Droptica we use a ready-made solution included in Droopler, the Drupal distribution.

Media module in Droopler

Since version 2.0, Droopler has built-in support for the Media module. All photos, graphics, icons and videos on the website are stored in the file library.

Usage of the Drupal Media module in the Droopler distribution

 

It's fine if you have a website based on Droopler 1.x. When upgrading to Droopler 2.x all "File upload" fields will be automatically converted to the new format.

The files put in the library can be used in many places on the website - as a paragraph background, an icon, a photo in a gallery or a cover for a blog post. In each of these contexts, the multimedia will be trimmed and adjusted accordingly. Here are examples of using the same photo in a completely different capacity:

As a tile

An example of using a photo as a tile on a website based on Droopler, thanks to the Drupal Media module

 

As a form background

An example of using a photo as a form background in Droopler

 

As a blog cover

An example of using a photo as a blog cover

 

Once you start using Droopler, you'll be amazed at the ease with which you can use YouTube and Vimeo videos. For example, try putting your video in a paragraph with a banner. In the paragraph edit options add the media in the "Background" field:

Adding a video in a paragraph with a banner in Droopler, the Drupal distribution

 

Then go to the "Video" tab, enter the video address, click ADD and choose a title for the newly added item. Finally, put the video in a paragraph.

Adding a video in a paragraph with a banner in Droopler

 

The effect of this action will be a moving background that stretches across the entire screen and is played in a loop. The YouTube controls will be hidden, and the video will have a transparent black overlay, improving the readability of the text.

Video as a moving background, played in a loop, on a website based on Droopler

 

You can add a video to a gallery in the same way, and e.g. next to the text, in the "Sidebar Image" paragraph. There are practically no restrictions here, all the elements fit together well.

Summary

The multimedia library included in the latest Drupal works great with even with a large number of subpages and blog posts. You will quickly notice that reusing the existing photos and videos saves time and effort. Even though the Media module requires a lot of coding for every new project, you can use "prepackages" such as Droopler to start working on the content right away.

Apr 14 2021
Apr 14

This month I gave a talk at South Carolina Drupal User Group on Getting Started with Electron. Electron allows you to use your web developer skills to create desktop applications. I based this talk on some of my recent side projects and the Electron Project Starter I posted the end of last year.

[embedded content]

If you would like to join us please check out our up coming events on MeetUp for meeting times, locations, and remote connection information.

We frequently use these presentations to practice new presentations, try out heavily revised versions, and test out new ideas with a friendly audience. So if some of the content of these videos seems a bit rough please understand we are all learning all the time and we are open to constructive feedback. If you want to see a polished version checkout our group members’ talks at camps and cons.

If you are interested in giving a practice talk, leave me a comment here, contact me through Drupal.org, or find me on Drupal Slack. We’re excited to hear new voices and ideas. We want to support the community, and that means you.

Apr 14 2021
hw
Apr 14

It’s spring and I decided to come out to a park to work and write today’s post. I sat on a bench and logged in to my WordPress site to start writing the post when I noticed that one of the plugins had updates available. I didn’t have to think about this and straightaway hit the update button. Less than 30 seconds later, the plugin was updated, the red bubble had disappeared, and I had my idea of today’s post. That is why I want to talk about automatic updates on Drupal today.

Now, automatic updates have been in WordPress for quite some time. In fact, I don’t remember when I last updated a WordPress site manually even though I am running this site for years. The closest thing to this we have in Drupal is the “Install new module” functionality. As the name says, it can only be used for installing a new module and not updating existing ones. There is an initiative for Drupal 10 to bring automatic updates to Drupal core (only security releases and patch upgrades for now).

No automatic updates in 2021?!

It may seem strange that we don’t have automatic updates in a product aspiring to be consumer-grade in this age. The reason is that this problem is hard to get right and notoriously dangerous if it goes wrong. Also, Drupal is used on some of the largest and most sensitive websites in the industry. The environments where these websites are hosted do not support any regular means of applying updates. Finally, Drupal tends to be used by medium to large teams who use automation in their development workflow. The teams would rightly prefer the automation in their toolchain to keep their software updated.

For example, at Axelerant we use Renovate for setting up our automatic updates for all dependencies (even npm and more). In fact, our quick-start tool comes with a configuration file for Renovate. With our CI and automation culture, we would not like Drupal to update itself without going through our tests.

This is not applicable for most users of Drupal and having some support for automatic updates is important. But considering the challenges in getting it right and lack of incentives for heavy users of Drupal, this feature was not prioritized. It’s about time that there is community focus on it now.

What’s coming in automatic updates?

The current scope of the automatic updates initiative is listed on its landing page. The current scope is limited to supporting only patch releases and security updates only for Drupal core, not even contrib modules. While this is far from making Drupal site maintenance hands-off, it is a step in the right direction. Of course, once this works well for Drupal core, it would be easy to bring it to contrib projects as well. More importantly, it would be safer as any problems would be easier to find with a smaller impact surface area.

In my mind, these are the things that the automatic updates will have to consider or deal with. It’s important for me to note that I am not involved in the effort. I am sure the contributors to this initiative have already considered and planned for these issues and maybe a lot more. My intention is to portray the complexity of getting this right.

Security

This is one of the most critical factors in an automatic update system. Internet is a scary place and you can’t trust anyone. So, how can a website trust a file that it downloads from the Internet and then replace itself with its contents? This is the less tricky part and it can be solved reasonably well with a combination of certificates and file checksums.

The website software runs as a user on the server, ideally, with a user with just enough privileges. In most cases, such users don’t have permissions to write to their own directory. This is needed because if somebody is able to perform a remote code exploit, they could write to the location where the software is installed and install backdoors. But in such a configuration, the website cannot write to its own location either. I don’t think such setups are in the scope of automatic updates anyway, as such teams would have their own automation toolchain for keeping software updated.

Developer workflows

As I mentioned before, Drupal websites are typically built by large teams who have automation set up. Such teams typically have their own conventions as to how upgrades are committed and tested. This is why tools such as Renovate can get so complicated. There are a lot of conventions for automatic updates system to deal with and as far as I know, most just ignore it. For example, I don’t know if WordPress really cares about the git repository at all.

Integrity

Once the updates are downloaded, they still have to be extracted and placed in their correct locations. What if, due to a permission error, a certain file cannot be overwritten? Such issues can leave the website in an unusable state entirely. The automatic updates code should be able to check for such issues before beginning the operation. There’s still a chance that there would be an error and the code should be able to recover from that. I’m sure there are a lot more scenarios here than what I am imagining.

The initiative

This is a wider problem than just Drupal and we don’t have to come up with all the answers. There is an ongoing effort to address these problems generally in a framework called The Update Framework. More about this is being discussed in the contrib module automatic_updates and the plan is to bring this into the core when ready. Follow the module’s issue queue or the #autoupdates channel on Drupal Slack.

Apr 13 2021
Apr 13

That is a question for the ages…quite literally.

Like just about everything in life, the cost of a Drupal site (should a Drupal developer be required… and one usually is) increases with time. Let's face it. Few things decrease in cost as the years pass. Now, I am being a bit facetious here… as there certainly are more concrete ways to arrive at an answer to (what is actually) a very general question. I suppose, one could argue the cost and/or price of a Drupal site is zero dollars. After all, Drupal is an open source platform – freely available to all. Therein, however, lies the rub.

As with so many things in life, "free" is a relative term. While it is certainly possible for one who is skilled in the ways of Drupal development to download the file, perform the installation and configuration and "voilà!" you have your Drupal site. Of course (at the risk of being repetitive), as with so many things in life, it's not quite as easy as that. There are a number of steps in the process with which one must be familiar in order to bring a Drupal installation into existence and make it available to the world.

That's where putting a price on a Drupal site can become…shall we say…less than simple.

First and foremost, the question to be answered – even before the question of how much a Drupal site costs – is whether Drupal is the appropriate platform for your organization's needs.

Until you've answered that question, the rest of this article is moot. Once you have evaluated whether Drupal is the appropriate platform for your organization (and if it turns out it is), the rest of this article should provide some invaluable advice. 

If you're like most people, one question which runs through your mind on a regular basis (if you are the one tasked with finding potential candidates to develop your Drupal project) is why such significant pricing differences between agencies exist. There are concrete answers to that question. So, let's start with a list you can use to help evaluate the different agencies which you must evaluate for your organization's project.

In-house skill sets vary… significantly. It is expensive to keep highly skilled, full-time staff in multiple disciplines under one roof. Many (if not most) agencies tend to either utilize contractors they work with on a regular basis or (more common and much, much more concerning) they outsource the work they cannot complete in-house to overseas companies. The problem with both of those solutions are they are unreliable – on multiple levels. We could get into an entire article based simply on this subject. However, we are trying to keep this list simple. So, we'll leave the answer there for now.

The level of developers vary (nearly immeasurably) between agencies. What one agency considers a senior developer, another agency may very well consider a junior developer. The following may seem like bravado but it's merely a fact: 1 in 18 developers interviewed by Thinkbean for a position as a senior developer within the agency actually passes muster. What certain agencies consider "senior" Drupal developers versus what Thinkbean considers "senior" Drupal developers… versus what the developers, themselves, consider their skill level to be are all very different.

Following this point just a bit further…it can be a very difficult concept for non-technical personnel to comprehend/sort out. How does one, who is not a programmer, determine which agency has the best staff? Price, alone, is not a reliable indicator. Certainly, an agency would not last very long in its field if it marketed its developers as "senior" level when they were, in fact, much lower (in terms of their level of knowledge). It wouldn't take long for a client to determine the quality and quantity, among other aspects, of the level of work they were receiving was not worth the price they were paying the agency.

The only way to discover the true cost of a project is to conduct a Discovery Phase. Whether all hypothetical and on paper or contained in a given codebase, the only way to ascertain a significant level of accuracy in terms of budget and timeline given the goals of a given project is to get into the guts of a project (again, whether through documentation or codebase evaluation). Only then may an accurate estimate be issued on which the client may heavily rely to accomplish their goals.

Is it better to an agency which utilizes a time and materials pricing model versus an agency which utilizes a fixed price model?

The answer to that question is, actually, easier and (in a number of ways) less intuitive than one might expect.

Time and materials may seem like a ticket to an indeterminable budget, whereas fixed-price may seem to be a fair (not to mention easy) way to determine what the cost of the total project will be. Nearly the exact opposite is true.

Any agency worth its salt will insist on a Discovery Phase before a project is taken on (be that an existing project which must be taken over the finish line or a hypothetical project, existing only conceptually).

Again, only via a properly-conducted Discovery Phase can a project's true value (in terms of timeline and budget) be determined. All other things being equal (that is, as long as the project does not stray significantly from the project outlined in the Discovery Phase), a time and materials-based company will be able to provide an extremely accurate estimate of what the total cost and timeline of a given project will be.,

Conversely, agencies which tend to offer a fixed-price model will be wildly inaccurate with their pricing due to the fact there are so many unknowns. Often, fixed-price model agencies don't bother go through a Discovery Phase because the price they offer nearly invariably represents an MVP (minimum viable product). Fixed-price model agencies tend to focus on saying what is necessary to get a client to "sign on the dotted line". After that, such agencies feel as though the client is now "invested" in working with that particular agency… and for good reason. Often, a client does not want to go through the process of re-finding another potential development agency to complete the project. That's when the fixed-price model agencies have the clients over a barrel, so to speak. It becomes a trade-off between which is worse… going about locating a new, more reliable agency with which to bring the project to fruition or withstanding the barrage of "well, our price didn't include X, Y and/or Z. Those features will add an additional amount of X dollars to the originally-quoted price". It is generally about that time when the price from the time and materials model agency is not only met but exceeded… unfortunately, sometimes by a multiple of the initially-quoted price.

Take heart.

Finding a professional Drupal development agency to bring your project to fruition does not have to incorporate the onerous aspects described above. The more honest and capable Drupal development agencies will offer to conduct a Discovery Phase which will, ultimately, produce a report (as well as, potentially, other items) which will provide a highly accurate assessment of the project at-hand… resulting in a timeline and budget on which a client may heavily rely. Such agencies may even offer an option to conduct a Discovery Phase separate from the remainder of the project – even if that means they are disqualified from performing the remainder of the project. That is a big "tell", as it tends to show the given agency is more concerned with arriving at an accurate price than simply gaining a job at any cost.

The results of that Discovery Phase may then be "shopped around" and (as long as the Discovery was performed properly) clients will be able to present the results of such a Discovery to alternate agencies for a true apples-to-apples comparison. Thereby, obtaining the most accurate budget and timeline for the job at-hand.

Ready to take the guesswork out of budgeting and planning for your Drupal project?


Connect with one of our expert strategists to learn more about Thinkbean's Discovery Phase.

Apr 13 2021
Apr 13
easy coffee module install and configuration

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

Credits & Thanks

Thank you to:

About the Coffee Module

The Coffee module is the fastest way to get to any admin screen in Drupal. As you SEO your Drupal site, you will spend a lot of time jumping into admin to change a setting or check on updates. You’ll have to go through menu navigation if you don’t have the Coffee module. That’s fine, but sometimes it’s hard to remember where every single setting is in the Admin Menu.

With the Coffee module installed, you can type ALT-D on your keyboard (Option-D for macOS) to have a text field pop up. Start typing into this field and the Coffee module will show you the admin menu items that match. Press the Enter key to select the first item or use the arrow keys to select a different item and press the Enter key to go directly to the admin page that you want.

Tip: Throughout this guide, you’ll see us present Coffee shortcuts when appropriate. For example, when we mention Coffee: "extend", then you’ll hit your Coffee shortcut keystroke (typically Alt-D or Option-D) and type "extend".

Install and Enable the Coffee Module

  1. Install the Coffee module on your server. (See this section for more instructions on installing modules.)
     
  2. Go to the Extend page: Click Manage > Extend (Coffee: "extend") or visit https:///admin/modules.

    drupal coffee module installation screenshot

  3. Select the checkbox next to "Coffee" and click the Install button at the bottom of the page.

Permissions for the Coffee Module

If necessary, give yourself permissions to use the Coffee module.

  1. Click Manage > People (Coffee: "people") and click on the Permissions tab. https:///admin/people/permissions.

    drupal coffee module permissions screenswhot
     

  2. Select the appropriate checkboxes for:
    • "Access Coffee"
    • "Administer Coffee"
       
  3. Click the Save permissions button at the bottom of the page.

Configure the Coffee module

  1. Go to the Coffee admin page: Click Manage > Configuration > User Interface > Coffee (Coffee: "coffee") or visit https:///admin/config/user- interface/coffee.

    drupal coffee module configuration screenshot

  2. Select the checkbox next to any additional menus that you want to include in the Coffee interface. We typically include them all, but if it starts getting cluttered, then you can take them out later.
     
  3. Click the Save configuration button at the bottom of the page.

Using the Coffee Module

  1. To access the Coffee interface, click the following key combination based upon your computer type:

         PC: alt+D (or alt+K)
         Mac: opt+D
     

  2. Start typing the name of the Drupal admin section you are looking for. For example, if you are trying to get to the Metatag settings interface, you would start typing "metatags" -- entering the first few letters will normally bring up what you're looking for, but can also provide other related settings as well.

    Drupal coffee module interface
     

  3. Click the appropriate result item to take you where you want to go. In our example, you could click on the entry titled "Metatag".
     

Once you are familiar with the different admin sections, the Coffee module can get you where you need to go far faster than by using the administrative menu.

Did you like this walkthrough? Please tell your friends about it!

facebook icon twitter social icon linkedin social icon

Apr 13 2021
Apr 13

Drupal has been in the content management game for over two decades. That is a long period of time and in that time span the CMS has accomplished a lot. It’s community of over a million Drupalists is just one part of it. With 20 years gone, Drupal is still running strong and its latest update is proof of that. 

Yes, in the June of 2020, amidst the pandemic, Drupal 9 was launched and it was my only sunshine at that time and I am sure many of my Drupal friends would agree with me. Drupal 9 can be deemed as one of the best offerings of Drupal, not there were many that were anything but great.

Job done easy: Drupal 9 upgrade

The latest version meant we had to take it on, why be comfortable with the past when the present can offer more comfort, right? However, the mammoth task that was the Drupal 8 upgrade, you must remember that, made many of us apprehensive and rightfully so. And that is where we were surprised, pleasantly might I add, by Drupal. 

“Easiest upgrade in a decade.”

This is how the Drupal 9 upgrade is being described and it is because you won’t have to replatform your site, you’d only be updating. It's like taking a connecting flight from London to Paris rather than leaving the airport and taking a train from the station. Connecting flights are easy.

The timeline of Drupal releases in shown. Timeline of Drupal 9 future releases | Source: Drupal.org

Considering the fact that Drupal 9 is not a migration, the upgrade is a breeze. With the addition of new features like Olivero and Claro, being built and stabilised respectively, the new versions of Drupal 9 will become all the more appealing and a release can be expected half yearly much like Drupal 8. So, can we afford to sit back and not take the step towards upgrading our Drupal sites. The fact the Drupal 7 and Drupal 8’s end-of-life has been decided has given us all the more reason to make the upgrade. Read our complete guide on Drupal 9, Drupal 9 FAQs, must-have modules to start your Drupal 9 website, configuration management strategies in Drupal 9 and web development strategies for Drupal 9 website to know more about Drupal 9 and its usage.

To help you in finding the answer to the popular question of “How to upgrade Drupal 9?”, here I am with an all inclusive checklist for this massive step you are about to take. So, let’s begin.

Is the upgrade different for Drupal 7 and Drupal 8?

This is one of the most commonly asked questions for Drupal 9 upgrade. There are still a lot of Drupal sites that are still operating on the 7th version, so it is understandable to want to know whether ‘the easiest upgrade of the decade' is applicable to them or is it different. 

Drupal 9 upgrade is different for Drupal 7 and 8 sites. This is mainly because Drupal 8 was a whole other ballgame than Drupal 7, while Drupal 9 is just a new and improved version of Drupal 8 with no deprecated APIs. Therefore, the upgrading process was bound to be different.

Let’s see how. 

Drupal 8 to Drupal 9 

Support for Drupal 8 will end on 2nd November, 2021, it will receive patch releases, but there won’t be any major updates in its feature simply because we have Drupal 9. Therefore, upgrading to the newer version is the better option. 

To upgrade from Drupal 8 to Drupal 9, 

  • You would have to see that all your projects are Drupal 9 compatible; 
  • You would have to see that your codebase is free of deprecated APIs; 
  • And then all you would have to do is run update.php. 

It sounds simple enough, right? That is because it is. Of course, you would have to perform some more steps than these three and there would be a number of tools that you would have to use for them. However, it is these three steps that are essentially the crux of upgrading from Drupal 8 onto 9.

Drupal 7 to Drupal 9

Drupal 7’s support is said to end on 28th November, 2022. Although your D7 site has quite some time ahead of it, you still have to start thinking about the upgrade as the process is not as easy as the D8 to D9 upgrade. 

You can take two routes here; 

  • You can first update to Drupal 8, avail functionality from all the modules that are yet to come in Drupal 9 and then take the easy route of upgrading to Drupal 9; 
  • Or you can directly upgrade to Drupal 9 and skip the 8th version. This would be ideal because your upgrade would have a much longer lifespan.

For the upgrade from Drupal 7, you would need three modules; 

These three do everything from data and content migrations and checking the availability of modules to scanning them and updating them for the upgrade. 

So yes, the Drupal 9 upgrade from Drupal 7 and 8 is different, simply because they are very different versions of the CMS. 

Now that we have this notion clarified, let’s move on to all the nitty-gritty details of the upgrade.  

What tools would you need for the Drupal 9 upgrade?

Can you cook without the right ingredients? Can you make the perfect lasagna without the melt-in-the-mouth pasta? I know you know the answer to these two questions and that’s a big fat no. 

Therefore, the incredible journey towards the Drupal 9 experience has to start by talking about the tool you would need for it, the ingredients that’ll make the upgrade all the more appetising. I’ll stop with the cooking analogy now and come to the point. There are two mandatory tools that you will be needing.

Upgrade Status 

Upgrade Status is a module that prepares your site for the upcoming upgrade you are planning to execute. It is a pretty versatile module that does all the grunt work required before making the leap to D9. 

  • Your site has to be the latest version of Drupal, that is Drupal 8.8 or 8.9, so the first thing this module does is inspects whether you are on that version, if not, it’ll tell you to update.
  • Your system needs to meet Drupal 9’s set requirements for the upgrade to go on smoothly, so the next thing it does is check if you meet them.
  • Your contributed projects also need to be updated and be compatible with Drupal 9. If they are Drupal 8 compatible, there is a high chance they’ll be for Drupal 9. So, Upgrade Status works with Update Status to ensure every project is in sync.
  • Your site needs to be compatible with Drupal 9 in other ways as well, so that is also checked and verified through phpstan.
  • Your system’s integration drush is also taken care of here.
  • Your system might have deprecated APIs, Upgrade Status finds, although there are any fixes provided; for that you'll need another tool.

Upgrade Status’ enchantment doesn’t end here, there is more to this module yet. 

  • I’ve told you that it prepares your Drupal 8 site, but it also gives you the leeway for downloading it with and without the Composer. 
  • It is also available in Drupal 7 and this version would help you in preparation for the Drupal 9 as well as Drupal 8 upgrade, if that is what you want. 
  • Now, the most alluring part, once you’ll upgrade to Drupal 9, it’ll start preparing you for the Drupal 10 upgrade! Yes, you read it right, Drupal 10 launch is in the works and you can be ready for that when it happens with this module.

Deprecation Check

Remember I mentioned deprecated APIs above, well, there are more than APIs that can be deprecated and that needs your attention before you start creating the upgrade environment for your site. That is why, Deprecation Checking and Correction Tools become a necessity.  

All in all, there are five tools for your help. 

  • The first one is an IDE or code editor, which comprehends deprecation to kickstart the process. 
  • Then there is the Drupal-check, this one performs a PHP run and let’s you know whether deprecated code is used and where.
  • Third is the Upgrade Status I talked about above, which essentially scans your entire system and finds deprecated code for you. 
  • The Drupal.org Testing System also supports deprecation inspection.
  • Finally, the Upgrade Rector Contributed Project provides a solution for all of the checking done above and that too in an automated manner.

What are the environment requirements for Drupal 9?

When you are roasting the perfect chicken, the temperature in the oven has to be just right, the timing has to be just right and the flavours have to be just right to make it come out all juicy and succulent. I know I have started with the cooking analogy again, but this is the best comparison I could think of. 

Like that perfect roast chicken, Drupal 9 also needs just the right environment from you and your system to make it work. And this involves; 

Web Servers

Drupal 9 can be run using two different web servers and you need to have the latest versions of these two.

  • For nginx, you have to have the version 0.7.x or above; 
  • And for Apache, it has to be at least 2.4.7.

PHP 

PHP is the language Drupal is built on, of course you must know that. What you may not know is that you need PHP 7.3 for operating Drupal 9. The latest version 9.1.0 supports PHP 8.

Database and Hosting Structures 

Drupal 9 has specific requirements for its backend database as well as its hosts. These are; 

  • Version 5.7.8+ for MuSQL or Percona; 
  • Version 10.3.7+ for MariaDB;
  • Version 3.26+ for SQLite; 
  • Version 10 for PostgreSQL; 

And if you are planning to use Drush to build your interfaces, go for version 10, since only that is compatible with Drupal 9.

Have you prioritised the update of the core codebase?

Drupal 8 was the last major release before Drupal 9. Like any Drupal version, there are a number of minor releases being launched and you must keep up with them. If you have done so, your core codebase would be up-to-date and you’d be all set for the upgrade. 

One of the Drupal 9 upgrade requirements is that your site be updated to Drupal 8.8 or 8.9 for you to be prepared for the easiest upgrade of the decade. 

What happens if you are on a version older than 8.8?

What’ll happen is the upgrade won’t go through. Now you might ask why? I’ll give you an analogy, can you skip a few grades and land from 6th grade directly to high school? Even if you could, would you say that getting the hang of the classes you’ll have be quite arduous? It most definitely will be. So, like you can’t skip grades and you can’t skip the minor releases of Drupal 8 before going on to Drupal. Because Drupal 8.9 and Drupal 9 are somewhat similar the upgrade is a breeze, however, Drupal 8.4 and 9 do not share that kind of similarity and you might need to upgrade fast. 

From upgrades in PHP to core modules, from themes to contributed modules and from path aliases and database, almost every aspect requires updating to be compatible with Drupal 9. And only Drupal 8.8 and 8.9 have that level of API compatibility. 

How to upgrade if you have a Drupal version that precedes 8.7? 

For a version older than Drupal 8.7, you would have to perform some small code changes and database updates that are not very complex. An update to the latest version of the core would be required, and this would make the database and contributed modules ready for the 9 upgrade.

You can use Upgrade Status to ensure that all of what you just did is compatible with Drupal 9 or not. 

Then you’ll have to check for deprecated code, like we discussed two sections above. Thereafter, you become ready to update your core codebase to Drupal.

How to upgrade if you have a Drupal version that succeeds 8.8?

If you are already on Drupal 8.8, there isn’t much you have to do in order to prepare yourself. The only task to perform is running the Upgrade Status and checking compatibility. 

There is one more thing that you will have to do. And that is what your existing site is based upon because that will decide how the actual upgrade will flow. 

Your site could be based on Composer or it could be based on Tarball. Make sure you keep that in mind before starting the upgrade, as both work on different upgrade mechanisms. While the former has its own list of steps to follow, the latter is upgraded using Drush.

What about updating the custom code?

After upgrading the core codebase, you would have to pay close attention to your custom code. There is a high chance that your project will have custom modules and themes, these mean a custom code would also there and it is your responsibility to update it. 

You wouldn’t need new tools and techniques to help you here. 

  • Upgrade Status will scan all the projects for custom code deprecations; 
  • Upgrade Rector will fix any minor deprecations by itself. 

Updating the custom code is not that big a task, so it is often neglected and overlooked. However, it is important enough to hamper the entire upgrade. So, don’t skip it.

Can the contributed projects be neglected?

If you have taken care of the core and custom projects, you can’t think about leaving the contributed project without any attention. So, updating them is the next agenda on the Drupal 9 upgrade checklist. 

The reason for updating the contributed projects is the same as the core and custom projects, to check the compatibility of the projects with Drupal 9. And you must know by now, since I am repeating it for what feels like the 100th time, Upgrade Status will help you in the compatibility check.

You must know that even though a module is Drupal 9 compatible, there is the off chance that it can be a version of a major release that’ll bring API changes along with it. You have to be mindful of these modules because they can be detrimental to your site’s health. API changes that you are not prepared for can’t be efficacious by any means.

But what if a module is not Drupal 9 compatible?

There are, of course, not many of them, however there are some and you must know how to handle them. You can do any of these two things in this scenario.

  • Creating, you can create a custom code to update it;  
  • Or waiting, you can wait to see if it gets updated by the time you are ready for the final upgrade;  

What about the contributed modules with patches, do they need attention?

There are situations where you may want to update a contributed module, but an update is not in the picture, rather you have patches available and sometimes, not even that. What would you do? Pay attention to the patches, that is what.

Usually if a patch is available for a module, Upgrade Status would inform you about that and you can implement it. 

Then there is the scenario, when a contributed module has neither an update and nor a patch. For such an instance, the combination of Upgrade Status and Upgrade Rector will have you sorted. You can also check Drupal’s Contributed Modules Guidelines to help you further. 

Have you examined your content and field types thoroughly?

Auditing for site building is a must. Adding fields and customisations in Drupal is quite easy, anyone can do it. This is both good and bad. Good because anyone can do it leading to less dependence on developers, bad because anyone can do it meaning there might be redundant field types and outdated content. And in this step, you check for just that. 

  • Check and eliminate fields that were created for a once-in-a-lifetime event; don’t let them sit and waste away.
  • Remember those content types you created to add content later, well, you haven’t done that yet, so they have to go as well.
  • Update the help text; this might seem trivial to you, but being someone who relied on that piece of text to perform all my initial duties instead of pinging my manager every minute, trust me, it is important. If it is outdated, it is useless and why would you want something useless on your upgraded Drupal 9 site?

Customisations are only great until they don’t start bloating your site causing regression. You do not want that, so don’t just keep all your focus on the code, modules and themes, give some time to the content as well.

How do you become sure that your upgrade is successful?

You will execute the upgrade to make your site better than it already is, that should be the aim, right? However, despite you doing everything to the T, there is a chance that you may go in regression. Your upgrade may be doing everything that it is supposed to, but still your site’s performance can be slower than it was. 

No one wants that scenario to become their reality, so how do you avoid that? How do you ensure that the upgrade is successful? There is certainly a way to ensure that and that’s through testing.

When you perform tests, you get to know what is truly happening with your site. Where you went wrong and what you did right won’t be hidden under a veil. For instance, performing a test to check the administrative and editorial working of the site is ideal. On paper, everything may appear sound, but in reality your editors could be struggling to make even the smallest of edits. And it is only through testing that you’ll be able to find that out. 

You can start at a smaller level with a hello world test and gradually scale up to examine the major aspects of the upgrade. 

Another thing that’ll help you in making the upgrade a success is going slow. Yes, upgrading to Drupal 9 is deemed as the easiest update of the decade, but it is still a huge task to take on. Just the sheer number of modules that wild require updating can become overwhelming, so go slow, update a few modules at one time. This is the chances of errors would be slim and the chances of success would be quite high. 

The Bottom Line 

Drupalists from across the globe had been awaiting the release of Drupal 9 for a long time, now that it is here, there is nothing holding us back from taking the upgrade leap. If I am to be honest, I’d say that I was fearful of the upgrade process. However, when Dries Buytaert say that one of the fundamental issues to address in the Drupal 9 release was the ease of installation, you cannot do anything but believe him. That’s what we should do. 

Apr 13 2021
Apr 13

The success of open source projects is largely carried by the pillars of the community and group collaborations. Without putting a stake in the ground to achieve strategic initiatives, an open source project can lose focus. Open source strategic initiatives should aim at solving impactful problems through collaboration involving the project's stakeholders.

The why and how of Drupal's strategic initiatives

As one of the leading open source projects, Drupal's success largely thrives on implementing its various proposed strategic initiatives. Drupal's focus on strategic initiatives and continuous innovation since Drupal 7 brought huge architectural changes in Drupal 8, 9, and beyond that offer a platform for continuous innovation on the web and an easy upgrade path for end users.

The vision for Drupal's core strategic initiatives is determined by Dries Buytaert, Drupal project lead. These initiatives are backed by community collaboration and lead to significant developments driven by forces like:

  • Collaboration with the core maintainers
  • Survey data and usability studies
  • A vision to build a leading open source digital experience platform
  • Relevancy in the market by improving editorial, developer, and customer experiences
  • Validation by broader community discussions and collaborations
Once initiatives are proposed, they move ahead to the planned initiatives stage, where each initiative is nurtured with detailed plans and goals by a strong team of contributors. When an initiative passes through this stage, it moves to the active initiatives stage. Here's where the initiatives take structure and come alive.

Some of the most successful Drupal 8 initiatives, like Twig and Bigpipe, did not follow the traditional process. However, following a thoughtfully planned process will avoid a lot of bike-shedding.

In 2011, at DrupalCon Chicago, Dries announced that Drupal 8 would feature core initiatives that would cause big changes to Drupal's architecture. To support the transition, each initiative would have a few leads involved in decision-making and coordination with Dries. Some popular initiatives included:

  • Configuration Management Initiative (CMI): This was the first key initiative announced at the 2011 DrupalCon. The idea was to offer site builders more powerful, flexible, and traceable configuration handling in Drupal 8 core. As planned, the Configuration Manager module is now a Drupal 8 core module that allows deploying configurations between different environments easily.
  • Web Services and Context Core Initiative: This initiative aimed at embracing a modern web and turned Drupal into a first-class REST server with a first-class content management system (CMS) on top of it. The result? Drupal is now a competent REST server providing the ability to manage content entities through HTTP requests. This is part of why Drupal has been the leading CMS for decoupled experiences for several years.
  • Layout Initiative: This initiative's focus was on improving and simplifying the site-building experience by non-technical users, like site builders and content authors. This initiative came alive in Drupal 8 by introducing the Layout Discovery API (a Layout plugin API) in v.8.4 and the Layout Builder module (a complete layout management solution) in v.8.5 core.
  • Media Initiative: The Media Initiative was proposed to launch a rich, intuitive, easy-to-use, API-based media solution with extensible media functionalities in the core. This resulted in bringing in the Media API (which manages various operations on media entities) and Media Library (a rich digital asset management tool) to Drupal 8 core.
  • Drupal 9 Readiness Initiative: The focus of this initiative was to get Drupal 9 ready by June 3, 2020, so that Drupal 7 and 8 users had at least 18 months to upgrade. Since Drupal 9 is just a cleaned-up version of the last version of Drupal 8 (8.9), the idea was to update dependencies and remove any deprecated code. And as planned, Drupal 9 was successfully released on June 3, 2020. Drupal 8-compatible modules were ported to Drupal 9 faster than any major version upgrade in Drupal's history, with more than 90% of the top 1,000 modules already ported (and many of the remaining now obsolete).

The new strategic initiatives

Fast-forward to 2021, where everything is virtual. DrupalCon North America will witness a first-of-its-kind "Initiative Days" event added to the traditional DrupalCon content. Previously, initiatives were proposed during the Driesnote session, but this time, initiatives are more interactive and detailed. DrupalCon North America 2021 participants can learn about an initiative and participate in building components and contributing back to the project.

Dries proposed the Decoupled Menus Initiative in his keynote speech during DrupalCon Global 2020. While this initiative's broader intent is to make Drupal the best decoupled CMS, to accomplish the larger goal, the project chose to work on decoupled menus as a first step because menus are used on every project and are not easy to implement in decoupled architectures.

The goals of this initiative are to build APIs, documentation, and examples that can:

  • Give JavaScript front-end developers the best way to integrate Drupal-managed menus into their front ends.
  • Provide site builders and content editors with an easy-to-use experience to build and update menus independently.

This is because, without web services for decoupled menus in Drupal core, JavaScript developers are often compelled to hard-code menu items. This makes it really hard for a non-developer to edit or remove a menu item without getting a developer involved. The developer needs to make the change, build the JavaScript code, and then deploy it to production. With the Decoupled Menus Initiative, the developer can easily eliminate all these steps and many lines of code by using Drupal's HTTP APIs and using JavaScript-focused resources.

The bigger idea is to establish patterns and a roadmap that can be adapted to solve other decoupled problems. At DrupalCon 2021, on the Decoupled Menus Initiative day, April 13, you can both learn about where it stands and get involved by building custom menu components and contributing them back to the project.

The Easy Out-Of-The-Box Initiative

During DrupalCon 2019 in Amsterdam, CMS users were asked about their perceptions of their CMS. The research found that beginners did not favor Drupal as much as intermediate- and expert-level users. However, it was the opposite for other CMS users; they seemed to like their CMS less over time.

Hence, the Easy Out-Of-The-Box Initiative's goal is to make Drupal easy to use, especially for non-technical users and beginners. It is an extension of the great work that has been done for Layouts, Media, and Claro. Layout Builder's low-code design flexibility, Media's robust management of audio-visual content, and Claro's modern and accessible administrative UI combine to empower less-technical users with the power Drupal has under the hood.

This initiative bundles all three of these features into one initiative and aims to provide a delightful user experience. The ease of use can help attract new and novice users to Drupal. On April 14, DrupalCon North America's Easy Out-Of-The-Box Initiative day, the initiative leads will discuss the initiative and its current progress. Learn about how you can contribute to the project by building a better editorial experience.

Automated Updates Initiative

The results of a Drupal survey in 2020 revealed that automated updating was the most frequently requested feature. Updating a Drupal site manually can be tedious, expensive, and time-consuming. Luckily, the initiative team has been on this task since 2019, when the first prototype for the Automated Update System was developed as a contributed module. The focus of the initiative now is to bring this feature into Drupal core. As easy as it may sound, there's a lot more work that needs to go in to:

  • Ensure site readiness for a safe update
  • Integrate composer
  • Verify updates with package signing
  • Safely apply updates in a way that can be rolled back in case of errors

In its first incarnation, the focus is on Drupal Core patch releases and security updates, but the intent is to support the contributed module ecosystem as well.

The initiative intends to make it easier for small to midsized businesses that sometimes overlook the importance of updating their Drupal site or struggle with the manual process. The Automated Updates Initiative day is happening on April 15 at DrupalCon North America. You will get an opportunity to know more about this initiative and get involved in the project.

Drupal 10 Readiness Initiative

With the release of Drupal 10 not too far away (as early as June 2022), the community is gearing up to welcome a more modern version of Drupal. Drupal now integrates more third-party technologies than ever. Dependencies such as Symfony, jQuery, Guzzle, Composer, CKEditor, and more have their own release cycles that Drupal needs to align with.

The goal of the initiative is to get Drupal 10 ready, and this involves:

  • Releasing Drupal 10 on time
  • Getting compatible with the latest versions of the dependencies for security
  • Deprecating the dependencies, libraries, modules, and themes that are no longer needed and removing them from Drupal 10 core.

At the Drupal 10 Readiness Initiative day, April 16, you can learn about the tools you'll use to update your websites and modules from Drupal 9 to Drupal 10 efficiently. There are various things you can do to help make Drupal better. Content authors will get an opportunity to peek into the new CKEditor 5, its new features, and improved editing experience.

Learn more at DrupalCon

Drupal is celebrating its 20th year and its evolution to a more relevant, easier to adopt open source software. Leading an evolution is close to impossible without taking up strategic initiatives. Although the initial initiatives did not focus on offering great user experiences, today, ease of use and out-of-the-box experience are Drupal's most significant goals.

Our ambition is to create software that works for everyone. At every DrupalCon, the intent is to connect with the community that fosters the same belief, learn from each other, and ultimately, build a better Drupal.

DrupalCon North America, hosted by the Drupal Association, is the largest Drupal event of the year. Drupal experts, enthusiasts, and users will unite online April 12–16, 2021, share lessons learned and best practices, and collaborate on creating better, more engaging digital experiences. PHP and JavaScript developers, designers, marketers, and anyone interested in a career in open source will be able to learn, connect, and build by attending DrupalCon.

The Drupal Association is the nonprofit organization focused on accelerating Drupal, fostering the Drupal community's growth, and supporting the project's vision to create a safe, secure, and open web for everyone. DrupalCon is the primary source of funding for the Drupal Association. Your support and attendance at DrupalCon make our work possible.

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