Upgrade Your Drupal Skills

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

See Advanced Courses NAH, I know Enough
Feb 09 2024
Feb 09
Upgraded my blog from Drupal 7 to Drupal 10 in less than 24 hours with the open source Acquia Migrate Accelerate | Gábor Hojtsy on Drupal

Breadcrumb

Feb 08 2024
Feb 08

Introduction

This article captures the various benefits and advantages of remote work on productivity, and also highlights the potential challenges of working from home.

Productivity is an elusive magic bullet. And everybody is out to discover its best secrets and hacks.

There's a big debate on how remote work affects productivity. 

Some consider remote work a productivity killer, and some the opposite.

You may be considering these very questions.

Are there any benefits to working remotely? Can it be advantageous to work from home than an office? Can remote work help increase productivity? 

The straight answer is that, in most cases, remote work has been proven to increase people's productivity and efficiency.

Some research suggests that it also boosts creativity and enables remote workers to enjoy a better quality of life.

What Is Productivity?

It might seem odd to even talk about this. But people often have a crooked notion about being productive.

Productivity is entirely subjective, depending on where you work.

For a factory worker, productivity would mean churning out more products within a fixed period. For a judge, it would mean dispensing proper legal judgment on cases, which might have a bearing on similar cases later.

But in every scenario, people agree on the following definition.

Productivity measures how efficiently one uses their resources—time, effort, and skills—to achieve goals. 

It's not just about getting things done, but getting the right things done most effectively. 

In a corporate setting, that makes a worker more efficient and productive.

It's about optimizing one's workflow and constantly refining the approach. 

It's not a race against the clock but a strategic dance with it. 

Sometimes, you need to slow down to get creative and solve unique problems, and sometimes, it's like typing one to hundred like an old Western gunslinger; the fastest finger wins.

Interview practise session

The Benefits Of Remote Work For Productivity

There's a reason why people are finding it so hard to return to the office in person. 

Because once you've worked remotely, doing the same work you were doing in the office, you know. The cat's out of the bag.

Not much beats the benefits and advantages of remote work. 

In 2020, a study by Stanford University revealed remote workers to be 5% more productive than their in-office peers. By 2022, as businesses invested in adapting to better work practices and tools, the productivity gap increased by 9%.

Here are some reasons why working from home is good for you.

The Benefits Of Remote Work For Productivity

Flexibility To Design Your Workday 

In most mature workplaces—that offer remote work, or are completely remote like Axelerant—you can design your workday according to your needs and commitments in life.

In a traditional physical office, people are usually expected to punch in to work at their assigned shift timings.

Some even go as far as deducting half a day's compensation for being 15 minutes late.

It's no wonder that flexibility was voted as the top benefit in our organization.

Hetal Mistry, Director of Global Delivery, used this benefit to be there for her son and ailing husband during one of the most trying times in her life

Many team members, like Hetal, have clinched their promotions at work while successfully keeping their personal commitments—because of this ability to work from where they want, when they want.

In many cases, having flexibility at work becomes the difference between having a thriving career and being out of work.

A 2022 Future Forum report revealed that workers with full schedule flexibility experience 29% higher productivity and 53% greater ability to focus than workers with no ability to shift their schedule.

Extra Time To Do Whatever

Imagine not having to commute to work every day.

O, the joy of it! 

The pure pleasure of not getting up hours earlier to dress up, gobble down some gruel you'd tell yourself is breakfast, and jet out of home—just to be endlessly stuck in traffic. 

Remote work opens up a Pandora's box of extra hours in your life.

The Becker Friedman Institute at the University of Chicago discovered that remote work saved about two hours per week, per worker in 2021 and 2022.

Precious time that you can use to explore new coding languages, contribute to open-source projects or unwind with activities you love. 

It empowers you to transform your spare moments into opportunities for skill enhancement, creativity, or a well-deserved break.

Personalized Workspaces That Work For You

Remote work empowers individuals to shape their workspaces according to their preferences, fostering a more productive and comfortable environment. 

According to a study by Harvard Business Review, workers with control over their workspace reported a 32% increase in overall well-being and job satisfaction.

The study also notes that traditional office settings that don't provide any choice or control over a person's office settings hurt focus and productivity. 

The Journal of Environmental Psychology supports this, revealing that environmental control is positively associated with job satisfaction, enhanced focus, and creativity.

The overall result is increased, unhindered productivity.

In a remote setting, you can choose the location, ambiance, and tools that optimize your workflow, ultimately contributing to a more efficient and enjoyable work experience.

Here are some tips to set up your remote workstation.

Sourabhs message of thanks working remotely from a beach at Axelerant

No More Struggling To Keep Personal Commitments

Your days of being unable to make time for personal commitments are over.

No more will professional obligations keep you from attending your child's school play or taking that midday yoga class. 

Remote work liberates you from the rigid constraints of a traditional office schedule. 

You can seamlessly integrate personal activities into your day without compromising on productivity. Whether it's a quick grocery run, a doctor's appointment, or spending quality time with loved ones, you can fulfill personal commitments without the stress of work interference. 

Many team members use this advantage of working online to go on long workations, enjoying a harmonious blend of work and travel.

Global Exposure To Diverse Expertise And People

In a remote work setup, you get more than just a job; you gain a global network of diverse professionals

You will be colleagues with people from different continents with unique perspectives. 

This global exposure exposes one to diverse expertise, ideas, and working styles. 

It also opens doors to broader insights and collaborative learning, fostering a rich and dynamic professional ecosystem.

It's one of the strongest benefits of remote work—for employers and team members alike.

It enabled us to do meaningful work for clients like Doctors Without Borders, facilitating millions of dollars in donations through their website during wars and conflicts in Eastern Europe. 

Stress-Free, High Focus Workdays 

Many workers view the chance to work from home as an invaluable perk. 

A survey of 3,000 workers at top companies such as Google, Amazon, and Microsoft found that 64% would prefer permanent work-from-home over a $30,000 pay raise. 

Wonder why that is? 

Apart from the already stated benefits, working from home is much less stressful than in a traditional office setting (given that the organization has set up proper boundaries; more on this later).

It eliminates the stresses that come with:

  • Daily commute
  • Rigidity of conforming to a behavioral code of an office (which can often be toxic)
  • Rigidity of maintaining a fixed schedule
  • Dealing with people with hostile personality traits, in person, in an office
  • Confinement to a fixed workspace

And working from home empowers one by:

  • Reducing frequent interruptions from colleagues or unnecessary meetings
  • Giving you control over when and how you respond to people and protecting your precious, high-focus, high-energy hours for getting stuff done
  • Allowing you as many breaks as you want (nobody's looking over your shoulders to see how long you spent in the washroom)
Work-life flexibility is a top benefit at Axelerant

How Can You Increase Your Productivity While Working Remotely?

You can leverage the benefits of working remotely 

to increase your productivity remarkably.

Make yourself more efficient and enjoy the work-life people dream of.

The crux of mastering remote work is taking charge of your time and energy.

  • Decide your work schedule based on priorities: Divide your work based on how soon something needs to get done and for what impact
  • Plan and divide your work with useful tools: Use apps like Google Tasks and Todoist to set task reminders in specific time pockets
  • Pay extra focus to your energy: More people should be discussing energy management already. If you're a morning person, capitalize on this by scheduling your most challenging tasks during that hour. Save less demanding work for when your energy naturally dips
  • Plan for procrastination: Planning for it takes away feelings of guilt that come afterward. Keep a buffer time of 45 to 60 minutes spread throughout the day to not do your work
  • Communicate your work preferences to your team: Once you finalize what work you're doing and when, let your team in on your schedule for collaboration and meetings
  • Block time on your calendar: Set up your schedule on your work calendar that's preferably accessible to all team members to ensure better time alignment
  • Stick to your routine: This sounds radically simple, yet it is the most difficult to pull off. Sticking to the decided routine is key to a successful remote work experience and productivity, as your body and mind will know you mean business if you sit down at work consistently at the same time
  • Leave space for some flexibility: This sounds counterintuitive to the previous point. But you need to find a balance between a strict routine and spontaneity. People and commitments will come your way, and it'd sometimes be impossible to dodge them. Things often have a way of going differently than planned
  • Create or choose your ideal work zone: One of the absolute pleasures of remote work is designing your workspace how you want. Keep plants; don't keep plants. Have proper artificial lighting, or sit near the window. Work standing up or snug in a comfortable ergonomic chair. It's up to you
  • Track your progress: Always be on top of your progress. With the kind of autonomy and flexibility remote work offers, it's often a slippery slope if you don't keep track of your progress. Applications like Jira and Asana will come in handy if you transform your work into achievable goals and place milestones to gauge how well you're progressing
  • Build feedback loops: To avoid getting blindsided by critical performance feedback, create your own feedback loops. Ask questions that matter to you and tell you precisely where you are with your work and meeting expectations

You can learn about these points in more detail here.

Potential Challenges Of Remote Work You Should Know

Nothing is without its challenges. 

The same goes for working from home. 

And these challenges become stark for people new to this way of life.

Feelings Of Isolation

It's possible to feel isolated while working remotely, especially if you live alone or have few chances of social interaction.

Most conversations at work revolve around one's work. And that is completely fine. 

But in a remote setting, having conversations beyond the scope of work is critical—on hobbies, shared interests, or just talking about life in general.

We realized that conscious investment and building systems to foster team member connection were indispensable to a thriving remote work culture.

  • Team offsites in various locations
  • Dout calls
  • Organization-sponsored team meet-ups
  • Fun, team activities designed on shared interests like art workshops, parenting classes, stand-up comedy, singing shows, etc.
  • All team meet-ups and parties around sponsored food and out-of-work chats
  • Coaching by professional, in-house performance coaches to create psychologically safe spaces within teams to promote open, kind communication

These are some of the proactive steps we've taken to minimize feelings of isolation, and any organization that cares for its people can follow.

Overlapping Boundaries

This happens when people in leadership positions need more maturity to realize that a successful work culture needs boundaries.

One of the most fundamental boundaries is setting up, adhering to, and respecting an agreed-upon work schedule that works for the individual and the team.

This allows team members to maintain a healthy balance between work and downtime.

When companies lack or disregard such boundaries, people's work and personal lives flow into each other in a toxic way.

The result is taking client calls at midnight, waking up to the computer screen in the morning, struggling with work and personal commitments, and leaving the company behind in an embarrassingly short time. 

Burned out and dissatisfied.

Technical Challenges

Successful remote work requires proper tools to manage every aspect of the business and its operations.

There are numerous processes involved in running a business: payroll, people management, promotions, logistics, deliveries, analytics, communication, record-keeping, taxes, audits, profits, losses, and the list goes on.

Every process requires a designated tool to complete the work systematically and on time, while allowing for seamless collaboration.

Not having proper tools and associated healthy collaboration and communication practices can be draining for team members.

They will cause losses in time, resources, and valuable energy that could've been used to create and provide value to the clients.

Probable Distractions

In the absence of a proper home office setup, it is possible to be distracted from work.

We all have personal commitments at home requiring attention and time.

For instance, kids become more curious and conversational when they see their elders on video calls.

While the occasional peep-in is unavoidable, distractions can become a nuisance to work if not controlled.

One can minimize interruptions by using noise-canceling headphones, establishing a structured daily routine, setting a closed-door workspace, and communicating clear boundaries to family members.

Is Remote Work For You?

If you're still on the fence about a remote working opportunity, use these questions to introspect:

  • Where are you working now, and what made you think of changing?
  • Why do you want a remote position?
  • How do you see your ideal work life? Does it align with what the company has to offer for its people?
  • What does growth mean for you?
  • Do you enjoy your work? Would you do it even if nobody runs behind you? Or is it just a set of actions to make a livelihood and avoid the societal judgment of not working?

Honest answers to these questions should make it easier for you to take the next step.

One's remote work experience largely depends upon the organization. 

If it's not built to set you up for success, you might return to a physical office with an added spring to your step.

But what if it cares for its people and actively invests in their growth and well-being? 

Work would never be the same for you. 

The ball's in your court. Choose wisely.

Work-life flexibility is a top benefit at Axelerant
Feb 07 2024
Feb 07

This post is part 6 in a series about Symfony Messenger.

  1. Introducing Symfony Messenger integrations with Drupal
  2. Symfony Messenger’ message and message handlers, and comparison with @QueueWorker
  3. Real-time: Symfony Messenger’ Consume command and prioritised messages
  4. Automatic message scheduling and replacing hook_cron
  5. Adding real-time processing to QueueWorker plugins
  6. Making Symfony Mailer asynchronous: integration with Symfony Messenger
  7. Displaying notifications when Symfony Messenger messages are processed
  8. Future of Symfony Messenger in Drupal

Since Swift Mailer and its Drupal contrib integration were recently deprecated, many projects have naturally switched to its replacement: Symfony Mailer, either via Drupal Symfony Mailer or Drupal Symfony Mailer Lite.

This post outlines how you can take advantage of Symfony Mailer’s first class integration with Symfony Messenger brought to Drupal via the SM project. This integration allows for dispatching emails off-thread, potentially improving performance of the dispatching (usually web-) thread by offloading email-related tasks to dedicated Symfony Messenger workers. This setup can be considered an alternative to using Queue Mail.

Setup

As of writing, of the two Symfony Mailer implementations in contrib, Drupal Symfony Mailer Lite has built in support for Symfony Messenger. Drupal Symfony Mailer does not yet support it, an issue and merge request exist to add it. Apply a patch until the changes are merged.

Symfony Messenger itself does not require any special configuration, other than installing SM.

To run asynchronously, the \Symfony\Component\Mailer\Messenger\SendEmailMessage message must have routing configuration to a transport. Or at least the fallback transport must be configured. Without transport configuration, Emails will still be dispatched through Messenger, however they will be executed synchronously in the same thread they were dispatched.

Opting out

If you happen to have both Symfony Mailer and Symfony Messenger installed but do not want emails to be sent asynchronously, you can configure routing for the \Symfony\Component\Mailer\Messenger\SendEmailMessage message to instead use the synchronous transport.

If you’re using the SM Config submodule:

screenshot of routing

Sending emails and dispatching emails

Emails may be dispatched using the usual Drupal mechanism, or you can dispatch using Symfony Mailer directly by constructing an email object:

$email = (new \Symfony\Component\Mime\Email())
  ->to('[email protected]')
  ->from('[email protected]')
  ->subject('Hello world!')
  ->text('Some sample text.')
  ->html('

some sample text.

'); /** @var \Symfony\Component\Mailer\MailerInterface $mailer */ $mailer = \Drupal::service(\Symfony\Component\Mailer\MailerInterface::class); $mailer->send($email);

After the send method is executed, Mailer checks Messenger is available, creates a new SendEmailMessage message to wrap the \Symfony\Component\Mime\Email object. Then dispatches SendEmailMessage to the messenger bus.

As is typical with Symfony Messenger, email messages must be serialisable. Avoid including any Drupal entities or service references in an email object, and render email contents before sending it.

Processing emails

To process email messages, run the worker with sm messenger:consume. This command will either listen or poll for messages and execute them in a dedicated thread, ensuring quick processing after they are dispatched. For more information on the worker, please refer to post 3 of this series.

In the next post, we’ll explore how to add a user interface to notify users when relevant tasks have been processed.

Feb 07 2024
Feb 07

How to ensure detect web accessibility errors and ensure compliance with current Web Content Accessibility Guidelines (WCAG 2.2)?

Many automatic testing and scanning tools are available to help fast-track the process and uncover common, but frequently overlooked errors. The challenge: these tools vary widely in terms of types of errors they detect, usability, and the degree to which they can help ensure ADA Accessibility compliance. 

The following is an evaluation of seven of the most popular tools or extensions currently available, and what we consider to be the key advantages and drawbacks to each. 

Keep in mind that there are inherent limitations to all automated tools. While automated web accessibility testing tools provide a step in the right direction and an essential starting point, in order to accurately and thoroughly audit a website for accessibility, manual testing and intervention is also required.

1. BrowserStack

Designed as a tool for testing and monitoring web accessibility, BrowserStack features fast scanning capabilities, real screen readers, and automatic daily monitoring. Recent milestones include: detection of more than 8 million accessibility issues, more than 25,000 web pages.  

Pros

  1. The interface clearly shows which manual test reports have been conducted and when, along with a number of other high-level issues. 
  2. On a report, the summary of the issues, and ability to nail down relevant details is l very clean and user friendly.
  3. The screen reader option is a huge plus that not many other services, if any, would have. This feature is among one of the most significant advantages. 
  4. The manual "assisted test," which allows for the viewing of keyboard tabs in order, and highlighted, is a strong advantage.

 

Cons

  1. The tool is not designed to run through and entire site, and check all links/pages. 
  2. It’s not clear that "website scanner" provides the ability to generate a report from a site. It’s an important capability that should appear high up on the list. 
  3. The "how to fix '' is lacking in details, such as 4.5:1 ratios for color contrast issues, color recommendations, etc.
  4. When looking at errors on the page and selecting the item, it would be helpful if the tool highlighted the actual item that is in question.
     

2. DubBot

DubBot provides automated solutions designed to simplify website management, with tools that help organizations to detect vulnerabilities that include web accessibility, web governance, SEO, detection of misspellings, broken links, and accessibility task management.   

Pros

  • The DubBot dashboard is amazingly useful. The ability to not only see accessibility issues, but also broken links, governance red flags, and spelling mistakes is helpful at getting a high-level site summary. 
  • DubBot provides the ability to filter by accessibility error types, view all errors on a single page, site or group, as well as create tasks, mark errors as resolved, or ignore errors on a site or group basis. 
  • DubBot's support team extremely responsive, offering efficient access to subject matter experts who provide accurate and authoritative responses to questions and concerns. 
  • DubBot also allows users to configure reporting, that enables up-to-date information on any website's current accessibility state. Reporting includes an error summary and can be sent daily or weekly, (depending on configuration options). This is a very helpful tool during agile development.
  • DubBot runs on axe, which is helpful in leveraging automated accessibility testing due to an enterprise ready dashboard that has many configuration options. 

Cons

  • Unlike a few of the other tools, DubBot does not have a Chrome plugin, which means that a website's needs to be compatible with the DubBot crawler tool. 
  • Integrations with JIRA or other reporting/ticketing software would be helpful. 

3. WAVE

WAVE is a web accessibility evaluation tool developed by WebAIM for evaluating the accessibility of web contents. The tool is available for WAVE Firefox and Chrome extension or by entering the web page address (URL)

Pros

  • The WAVE Chrome and Firefox extensions allow you to review the accessibility of your site directly within the Chrome and Firefox browsers. 
  • No information is sent to the WAVE server. 
  • WAVE will show what errors are indicated and make some recommendations on how to correct these issues. 

Cons

  • WAVE provides an overlay of icons to indicate any potential accessibility issues however it gets confused by absolute positioning and doesn’t show any other information about the element. 
  • The overlay overlay of icons becomes further problematic when you are managing an element that is not visible on the page. It will take a bit of work with dev tools to determine which element is causing the issue. 

4. axe

axe is developed by Deque Systems for Chrome. axe analyzes a page for accessibility defects in just a few moments from a Chrome browser. The final output will show a list of accessibility issues with a link that provides the code that caused the issues and recommendations for fixing the issue. 

Pros

  • axe rates the impact of accessibility issues differently than WAVE. It does not use the “alerts” category, rather all errors are given a severity level. Using this system prompts more errors to be fixed than if some errors are labeled as alerts implying they are not important. 
  • axe will list elements that are not necessarily accessibility errors but warrant review based on the context of the element.

Cons

  • axe will point out some color contrast issues that still need to be tested manually. 
  • While not overtly a drawback with this tool, it does require a bit more knowledge by the user to understand the process for testing. 

5. Siteimprove

Siteimprove is an extremely popular tool especially within the areas of government and higher education. Siteimprove is available as a Chrome extension. It provides visual feedback concerning web content and highlights noncompliance issues visually on the page. 

Pros

  • Siteimprove analysis is done entirely within the Chrome browser, allowing secure evaluation of password-protected or non-public pages, multi-step forms, and dynamic content.
  • Siteimprove identifies accessibility noncompliance issues within the framework of WCAG, and points out instances where more than one guideline is being being violated. 

Cons

  • The format in which the errors are listed can be confusing for those not familiar with WCAG standards for accessibility. 
  • Several areas indicate manual testing is needed. As with axe, while not overtly a drawback for this tool, it does require a bit more knowledge by the user to understand the process for testing. 

6. Lighthouse

Lighthouse is developed by Google. If you are running an up-to-date version of Chrome, you most likely already have Lighthouse since it is built into devtools. Open devtools and go to the ‘Audits’ tab, then the ‘Perform an Audit’ button and you will be given a list of the audits Lighthouse can perform. 

Pros

  • Built into Chrome devtools. 
  • Can analyze more than just accessibility. Also analyzes factors such as SEO, performance and best practices. 

Cons

  • Not as robust as some of the other tools listed. Lighthouse does use axe-core for accessibility audit, but it does not run the full set of about 70 tests that the axe extension does. 
  • It is possible to get a 100% accessibility rating on Lighthouse and still have a site which is largely not accessible. 

7. Tenon.io

Tenon.io differs from the other tools listed here since it is a web service and not an extension. Use of Tenon.io simply requires a link or paste in the markup of the UI and it will generate a report. There are also many ways to integrate Tenon, but this is a paid service. 

Pros

  • Does not require anything to be downloaded or installed on your computer. 

Cons

  • Since Tenon works by passing the URL to a browser, your site/UI need to be publicly available. 
  • Can be slower than the other tools covered here. 

Automated tools can serve to significantly streamline the evaluation of a website for ADA accessibility and detect important instances of noncompliance. Manual follow-up is always recommended, however, for an accurate analysis and assurance of WCAG compliance.

As one, small example of the limitation of automated accessibility tools: automated tools check to ensure the presence of alt text, but if the alt tag is inaccurate such as alt="cow" for a picture of a chicken, the automated tool will not detect it—although some will point an issue that needs to be verified.  

Download Promet's Accessibility Checklist for Content Editors.

Looking for help in determining the automated tool that’s appropriate for your needs, or consultation concerning the process of ensuring WCAG 2.2 compliance? We can help! That's what we do! Let's talk!

Feb 07 2024
Feb 07

Instead of showing the original author of a node, show the last person to edit it.

Drupal's content listing at admin/content shows us the creator of a node, but does not allow us to add a field to show us the last person who edited the node. 

I did some Googling for it, and it turns out the ability during the latter stages of Drupal 8 development, but I wasn't aware of it. I'd like to see this added to the default admin/content view so we wouldn't have to figure it out.

So ... here's how to do it:

Feb 07 2024
Feb 07

Support for Drupal 7 will end next year. If you're running your website on this version of the system, now is a great time to figure out what to do with it. Is upgrading to Drupal 10 a good idea? And how about choosing other technologies to migrate your site? Join our free webinar on February 22nd to discover your options as Drupal 7's end-of-life becomes a reality.

Why is it crucial to think about life beyond Drupal 7?

The official date for Drupal 7 end of life has been set for January 5, 2025. After that time, a lot will change for websites that run on this version of the system. What can you expect?

Support from the Drupal community and the Drupal Security Team will no longer be available. Official system updates and development and security patches for Drupal 7 will stop appearing. As a result, your web page will become vulnerable to hacking attacks, and you’ll have to do all the fixes and improvements yourself.

Droptica Webinar: The Future After Drupal 7. Exploring Alternatives and New Opportunities


What topics will we cover during the webinar?

To prevent the above situation, it's a good idea to take action on your website well in advance. From our webinar, you'll learn what you can actually do with your web page when Drupal 7 is no longer officially supported.

During the live stream, Maciej Lukianski - CEO and co-founder of Droptica - will present effective strategies and possible ways to develop the website that aren't limited to upgrading to Drupal 10. Our expert, with more than 11 years of experience working with Drupal, will share practical tips.

What is on the webinar agenda?

  • Upgrading to newer versions of Drupal,
  • Migrating to other systems (e.g. Symfony)
  • Other methods tailored to your needs and web page structure (e.g., progressive migration of complex websites),
  • Maintaining Drupal 7 after official support ends.

Sign up for our free webinar

Want to learn best practices so you can implement them before the end of Drupal 7 support complicates your website's operations? Register for our free live stream. The online webinar will take place on February 22 at 3:00 pm CEST on the Zoom platform. The event will conclude with a Q&A session where the speaker will be happy to answer your questions.

Watch our previous webinar on supporting and maintaining Drupal websites

"The Future After Drupal 7" is the next event in Droptica's webinar series. Last time, live stream attendees had the opportunity to learn the ins and outs of supporting and maintaining websites on Drupal. Maciej Lukianski presented a number of best practices and specific tools to help secure, monitor, and develop your web page.

Couldn't attend the Drupal support webinar? Nothing is lost! Check out the video replay of the session. It’ll give you specific steps you can take on a regular basis to take care of your website and keep it in the best possible shape.

Maciej Lukianski led a webinar on maintaining and supporting Drupal websites, sharing practical tips


By watching the recording of the webinar "Get the most out of Drupal: How to maintain, secure, and grow a Drupal website," you’ll learn about such topics as:

  • web page audit,
  • security updates,
  • uptime monitoring,
  • types of development works,
  • manual and automated testing.

Join us for a webinar about Drupal 7

If you have a website on Drupal 7, find out what to do with it when official support for this version of the system ceases. Sign up for our free webinar, where you'll learn many possible strategies. The live stream on Zoom will take place on February 22 at 3 pm CEST.

Feb 06 2024
Feb 06

This post is part 5 in a series about Symfony Messenger.

  1. Introducing Symfony Messenger integrations with Drupal
  2. Symfony Messenger’ message and message handlers, and comparison with @QueueWorker
  3. Real-time: Symfony Messenger’ Consume command and prioritised messages
  4. Automatic message scheduling and replacing hook_cron
  5. Adding real-time processing to QueueWorker plugins
  6. Making Symfony Mailer asynchronous: integration with Symfony Messenger
  7. Displaying notifications when Symfony Messenger messages are processed
  8. Future of Symfony Messenger in Drupal

QueueWorker plugins

@QueueWorker plugin implementations require no modifications, including the method of dispatch, data payload, or the processItem . The data payload must of course be serialisable. Fortunately, most QueueWorker plugins already comply since their data is serialised and stored to the queue table. As always, avoid adding complex objects like Drupal entities to payloads.

Runners

With queue interception, the sm command can be solely relied upon. Legacy runners such as Drupal web cron, request termination cron (automated_cron.module), and Drush queue:run will be rendered inoperable since they will no longer have anything to process. Consider decommissioning legacy runners when deploying queue interception.

Setup

Queue interception is a part of the primary SM module. Adding a single line in settings.php is the only action required to to enabling this feature:

$settings['queue_default'] = \Drupal\sm\QueueInterceptor\SmLegacyQueueFactory::class;

SM module will need to be fully installed before this line is added. Consider wrapping the line in a class_exists(SmLegacyQueueFactory::class) to enable in a single deployment.

Existing per-queue backends

Setup may be more complex if projects are utilising per-queue backends or anything other than the default database backend for queues, such as Redis. In that case, carefully evaluate whether to convert all or specific queues to use Symfony Messenger.

Whether per-queue backends are utilised can be determined by looking for queue_service_ or queue_reliable_service_ prefixed items in settings.php.

Routing

@QueueWorker jobs are converted to \Drupal\sm\QueueInterceptor\SmLegacyDrupalQueueItem messages in the backend. Knowing this class name allows you to configure transport routing. If routing for this message is not explicitly configured, it will naturally fall back to the default transport, or execute synchronously if there is no routing configuration.

Running the jobs

As usual, when a transport is configured, all you need to do is run sm messenger:consume to execute the tasks. The worker will either listen or poll for messages, and execute them in a very short amount of time after they are dispatched, in a dedicated thread. More information on the worker can be found in post 3 of this series.

The next post covers how Drupal emails can be dispatched to messages, so the web thread can execute faster.

Feb 06 2024
Feb 06

To continue automated testing, projects must convert to GitLab CI and contributors must switch from patches to merge requests by July 1, 2024.

As of July 2023, contributed projects are fully equipped to adopt GitLab CI. In October 2023 we announced that Gitlab CI testing of Drupal core was already five times faster than the legacy DrupalCI system. In our December 2023 maintainer email we announced that our legacy DrupalCI will be retired as soon as July 2024. Now we are announcing further details.

What's happening?

The DrupalCi to GitLab Ci transition visualized

Some DrupalCI features are already turned off

Projects without DrupalCI testing configured cannot add it anymore. Direct access to log output and artifacts on DrupalCI is no longer available. Results are still summarized on the Automated Testing tab of those project's pages.

With the exception of Drupal 7, it is not possible to run tests on patches against Drupal core anymore. Even for Drupal 7, patches need to be sent for testing manually.

Changing DrupalCI schedules ends on April 30, 2024

After April 30, 2024, DrupalCI schedules can not be added or changed, except to remove DrupalCI testing. Tests will keep running with existing configured schedules until removed.

DrupalCI and all patch testing will be turned off on July 1, 2024

No DrupalCI tests will be executed after this date. It will also no longer be possible to run tests on any patches on Drupal.org on any project. Existing test results will be kept for six months.

All results from DrupalCI tests will be removed on January 1, 2025

This is the end of DrupalCI data retention. No testing results will be available beyond January 1, 2025.

What to do about it?

Most projects can start GitLab CI testing with a provided template .gitlab-ci.yml

Using GitLab CI for testing may seem intimidating at first but the Drupal Association engineering team and a number of community volunteers have spent a lot of time to make it as easy as possible for you to adopt GitLab CI for testing.

There is a preconfigured .gitlab-ci.yml template that will set up everything you need to test your project. This template has several useful features, including a variables file that will be automatically updated by the Drupal Association, to make sure you’re always testing against the currently supported versions of Drupal.

Most project maintainers won’t have to make any changes to the template, just commit the template to your project and your testing should work right away!

Set up GitLab CI for your drupal.org project today.

Contributors must use merge requests on all projects to get automated testing after July 1, 2024

GitLab CI, like almost all modern CI systems, is designed to test merge requests. If you have ever contributed to a project on GitHub, you pretty much already know how it works. The advantage of Drupal.org merge requests is that they are collaborative by default, so you and fellow contributors can work in the same fork.

Read the best practices for contributing through merge requests.

Feb 06 2024
Feb 06

Authored by: Nadiia Nykolaichuk.

One of the earliest known calendars was created by ancient Egyptians, who used hieroglyphics and carvings to represent the months, days, and important events. Today, visually appealing and user-friendly calendars are easily created on websites, all thanks to powerful CMSs like Drupal. We’ll share some modules in Drupal that are available for calendar creation and management, and carefully walk you through the key steps of building a calendar. 

Drupal modules for calendars

A calendar is essentially a collection of dates arranged in a month or week layout, with specific events displayed for specific dates. When it comes to creating collections of items, nothing equals Drupal Views. That’s why many modules for calendars in Drupal are based on Views and provide special, calendar-style formatters. Once a view for the calendar is set up, it’s easy afterwards for editorial teams to add or edit events to it on a regular basis like any other content.

Each module also adds more specific features for better calendar handling. The modules are built on different tools, often JavaScript libraries, which makes calendars more interactive. Some popular calendar modules based on Views are as follows:

In addition, the Calendar Systems module adds support for alternative calendar systems to Drupal. Also, if you need to create functionality for making reservations, there is a nice Bookable Calendar module. The full list of calendar-related modules that are compatible with Drupal 10 can be found here.

Let’s take a closer look at the steps needed to create a calendar using two great modules that are supported in Drupal 10 and have had fresh stable releases during the last year — Fullcalendar View and Calendar View.  

The Fullcalendar View module in Drupal

Fullcalendar View is a popular and feature-rich module that enables you to create a calendar with Drupal Views with the help of the FullCalendar JavaScript library it uses under the hood. A calendar is automatically created from a view thanks to a special formatter, and the event dates on the calendar are pulled from date fields in content.

Some of the module’s great features include:

  • Calendar display by day, week, or month.
  • Calendar events can be created by double clicking, edited inline, resized (for all day events), and drag-and-dropped around.
  • Events can have different colors based on taxonomy or content type.
  • Recurring events are supported.
  • Multilingual functionality is supported.

A basic guide to creating a calendar with the Fullcalendar View module

1. A note on the installation

Install the module per normal. Based on the information from the module’s page, Fullcalendar View depends on several JavaScript libraries, but installing them locally is optional — if you don’t, they will be loaded for you from a CDN.

2. Creating date fields

Now it’s time to add a date field to a content type that represents your calendar events (for example, “Event”). You can do it by going to Structure > Content types > Event > Manage fields. The module supports various field types such as Date, Timestamp, or Date Range. 

To keep it simple, we’ll use the standard Date field. However, we’ll create two fields of this type:

  • a field for the start of an event
  • a field for the end of an event

That’s because the module supports the start and the end dates in Views as separate fields, creating a nice colored display of how long an event spans.  

In this screenshot, we’re showing how the field creation process looks in the revamped Field UI that is one of the new features in Drupal 10.2, which you also might want to check out. 

Adding a date field with the new Field UI in Drupal 10.2.Adding a date field with the new Field UI in Drupal 10.2.

3. Creating event categories (optional) 

It’s not a must, but you might want to add another tweak to this setup. As mentioned earlier, the module can show different types of calendar events in different colors, which can be based on one of these two options:

  • content types (different content types can be created to represent different types of events, for example, “Webinar” and “Workshop”)
  • taxonomy (a taxonomy vocabulary with categories — terms — for different types of events can be attached to the general “Event” content type, enabling editors to select a specific event type for each event from a dropdown or select list)

In this example, we’ll opt for a taxonomy vocabulary, which can be done in Structure > Taxonomy > Add vocabulary. Let’s name it “Event types.” Event categories (Webinar, Forum, Summit, etc.) can be added as taxonomy terms.

Creating a taxonomy vocabulary for event categories.Creating a taxonomy vocabulary for event categories.

Next, a taxonomy field will need to be added to the Event content type similarly to how we’ve added a date field. The main difference is that the initial field type to choose will be “Entity reference” (or just “Reference” in the new Field UI). Next, select “Taxonomy term” and finally, in the next step of the field configuration, select the specific “Event type” vocabulary.

Adding a reference field for taxonomy.Adding a reference field for taxonomy.

4. Creating events with a date

Create content of “Event” type and specify the start and end date for each event. Content titles will appear as event titles in your future calendar. Also, specify the event type by selecting the category from the newly-created “Event types” taxonomy vocabulary.

5. Creating a view for the calendar

To create a new view, go to Structure > Views > Add view. Under “View settings,” select to display content of the Event type. After clicking “Create a page,” under “Page display settings,” select the display format as the “Full Calendar Display” of “fields.” That’s a special format provided by the module.

Selecting Full Calendar Display in Drupal Views.Selecting Full Calendar Display in Drupal Views.

Once the view is created, we’ll be most interested in the “Fields” section for adding fields and the “Format” section for configuring the display.

As far as fields, you’ll need the following:

  • title (which is created by default)
  • event start date
  • optionally, event end date
  • optionally, event type (the taxonomy vocabulary we’ve created earlier)
The calendar view settings with the list of fields highlighted.The calendar view settings with the list of fields highlighted.

 As the next step of configuring the date fields, you’ll be able to select the specific date format. 

The choice of the date format in the field settings.The choice of the date format in the field settings.

Once done with the fields, go to the “Format” section of the view and click “Settings” next to the “Full Calendar Display” format. It opens an impressive list of settings:

  • default date
  • the fields to be used for the start date, end date, and title (these are some of the most important settings in this view)
  • lots of display options such as default view (month, week, list, etc.), default mobile view, start and end time (required), and much more
Specifying the event start and end date fields.Specifying the event start and end date fields.Part 1 of display options for the the “Full Calendar Display” format.Part 1 of display options for the the “Full Calendar Display” format.Part 2 of display options for the the “Full Calendar Display” format.Part 2 of display options for the the “Full Calendar Display” format.Part 3 of display options for the the “Full Calendar Display” format.Part 3 of display options for the the “Full Calendar Display” format.

An interesting section at the bottom of these settings block is “Legend colors.” Here, you can specify the taxonomy field and vocabulary and then set different colors by RGB values for different event categories.

Selecting legend colors for different event types.Selecting legend colors for different event types.

In the “Advanced” section of the view, change “Use AJAX” from “No” to “Yes” to enable AJAX navigation. 

Enabling AJAX in the calendar view.Enabling AJAX in the calendar view.

As a result of this setup, there is a calendar view that shows events marked with different colors based on category. By clicking on each event, you can open it for editing. It’s possible to drag-and-drop events around the calendar to change their date. By double-clicking on an empty date, you can create a new event. It’s possible to navigate the calendar using the “Previous/Next” labels and choosing between the month, week, day, or list layouts. 

A simple calendar example created with the Fullcalendar View module.A simple calendar example created with the Fullcalendar View module.

The Calendar View module in Drupal

Next up is the Calendar View module, which is a lightweight tool for displaying the results of Drupal Views as a calendar. During the last year, the module has received multiple updates, including the new major version 2.x, and generated some buzz in Drupal circles.

Just like the previous module, this one uses dates from date fields in content to show in an automatically created calendar. It offers monthly or weekly calendar displays with tooltips and AJAX navigation.

Calendar View is compatible with the Smart Date module and supports the recurrent events functionality of the latter. The Calendar View Multiday submodule is great for events that span on multiple days. The module can also work together with the Bookable Calendar module for reservations.

A basic guide to creating a calendar with the Calendar View module

1. Creating a date field

With the module installed per normal, you can start by adding a date field to an “Event” content type similarly to how it was shown for the previous module. All types of date fields are supported, including ones with the date range. We will add only one standard date field to the content type to keep things simple. 

2. Creating events with a date

Create content nodes of “Event” type and specify a date in each of them. Content titles serve as event titles in the calendar. You might also choose to use body text as descriptions for your events.

3. Creating a view for the calendar

Similarly to configuring the previous module, you can create a new view in Structure > Views > Add view, and select to display content of the Event type. This module provides two main formats to select from the start — after clicking “Create a page,” you can select “Calendar by month” or “Calendar by week” of “fields.”

Selecting “Calendar by month” format for a view.Selecting “Calendar by month” format for a view.

Once the view is created, you can add the date field under “Fields.” As the next step of configuring the date field, you’ll be able select the specific date format. 

Adding a date field to the view.Adding a date field to the view.

You can also add a body field to the view in a similar way if you want event descriptions to be displayed in the calendar. 

The next setting is very important for this calendar view. Go to “Format” and click “Settings” next to your “Month” or “Week” format and, under “Date fields,” select the date field to be used as the source. Configure the other options as desired (such as starting a week on Monday, showing the default date as the current month, etc.).

Specifying the date field to be used as the source.Specifying the date field to be used as the source.

In the “Pager” section of the view, select navigation by month/week or other options. In the settings for the Pager, you can also configure whether navigation should be managed by “Previous/Next” labels. By default, it is.

Selecting calendar navigation by month.Selecting calendar navigation by month.

Just like for the previous module, go to the “Advanced” section of the view and enable AJAX navigation. 

With this setup completed, there is a calendar showing all the events for a month. It shows tooltips on mouse hover. 

A simple calendar example created with the Calendar View module.A simple calendar example created with the Calendar View module.

That was a simple setup, but when it comes to recurrent, multiple-day, and events with a date range, this looks like on the following screenshot from the module’s official page.

An example of a calendar with more complex dates.An example of a calendar with more complex dates.

Enabling visitors to find events (possible with all modules)

When creating calendars with Fullcalendar View, Calendar View, or other modules based on Views, you can also enable visitors to easily find specific events thanks to filters (for example, by category, by city, by in-person/online event type, and more).

Exposed filters in a calendar view.Exposed filters in a calendar view.

In a nutshell, this is achieved by adding filters to the view and making them exposed. Countries, cities, event types, and similar options can be created by adding a Drupal taxonomy field — first to a content type, then to the view (just as described in the “Creating event categories” part for the “Fullcalendar view” module). Next, the “Expose this filter to visitors” checkbox must be checked to make the filters visible to users and manageable by them.

That is not something specific to any calendar modules but the essential functionality of Drupal Views you might want to learn more about. 

Configuring exposed filters for a calendar view.Configuring exposed filters for a calendar view.

Final thoughts

We’ve walked you through the steps for creating a calendar with two great modules, showing just the basics of what can be built. An array of endless possibilities goes far beyond the above examples. We haven’t covered recurrent events or personal calendar creation with the help of contextual filters in Drupal Views among many others.

In addition, it’s possible to do all imaginable customizations and, of course, style the calendar to match your design guidelines. Ensure your calendars align with your needs and are consistently filled with successful events!

Feb 06 2024
Feb 06

With a career spanning over two decades, Mariano Crivello has established himself as an expert Solutions Architect in the realm of software development. His journey in the software industry began in 1997 in highschool where he built the schools first website. Since then, Mariano has dedicated himself to mastering the intricacies of technology, software, and now artificial intelligence. Since embracing Drupal in 2007, his career has taken him around the world and back where he has had the opportunity to work with brilliant minds and challenging projects throughout.

Beyond his professional pursuits, Mariano is a dedicated family man who balances his tech-driven career with his love for the environment and adventure. As an avid waterman, he travels the world in search of challenging waves to surf, while also committing to beach cleanups and work with various environmental organizations.

Mariano's unique blend of technical prowess, environmental consciousness, and family values make him not just a skilled Solutions Architect, but also a well-rounded individual dedicated to making a positive impact both in the digital and natural worlds.

Feb 06 2024
Feb 06

Webform is a Drupal module that allows you to create forms directly in Drupal without using a 3rd party service.

It can be used to create basic “Contact Us” and complex application forms with custom field logic and integration.

In this getting started guide you’ll learn how to:

  1. Create a form
  2. Add elements to form
  3. Customize form with conditional logic
  4. Embed the form
  5. Send submissions to Google Sheets

This tutorial accompanies the video above.

Feb 06 2024
Feb 06

A local Drupal event in Hamburg

For the Global Contribution Weekend, we opened the doors of our office space to allow members of the Drupal community to come and collaborate in person. On both days, about a dozen people joined us and contributed to Drupal. As hosts of the local Drupal user group for Hamburg and Schleswig-Holstein, we have hosted in-person events in the past. Alongside the hosted event in Berlin for the local community, we provided the only other Drupal event in Germany during this year’s edition of Global Contribution Weekend.

The outcome

Two days of contributing and collaborating — we achieved a lot together with the local community during the Drupal Global Contribution Weekend. After collecting everyone’s work, we were impressed by the amount of contribution we ended up with — not only in terms of issues worked on, but also in terms of pushing several module releases. 

Releases

As for module releases, we’ve been able to update a number of modules to Drupal 10. In addition, some modules maintained by our Factorial colleagues have been pushed to a new release. See the full list below:

Arguments

String

Revision Graph

Entity Form Mode (Drupal 10 Update)

Paragraphs Grid (Drupal 10 Update)

VOTE! (Drupal 10 Update)

Issues worked on

Besides the new releases, we also spent time on several issues related to Drupal modules as well as issues related to Drupal core. With our work, we were able to prepare certain modules for upcoming releases and also support local initiatives. Interestingly, we did a lot of non-code contributions during the weekend. Here’s the list of things we worked on:

Group: Implement the new access policy API

Autotagger: Improve project page

Core: Computed field cacheability

Advanced Queue: Add support for unique jobs

German Drupal Website : German Translations

Drupal Business e.V.: Content update

Continuous community efforts regarding Drupal

We at Factorial have been committed to the Drupal community for many years (read more about our work with Drupal here). As a Premium Supporting Partner and Gold Member of the Drupal Association, we are happy to contribute to the open source community. Through this event, we supported individual efforts to advance Drupal, as well as giving the local community a chance to come together and share ideas. We thank everyone who attended and look forward to returning in 2025.

Feb 05 2024
Feb 05

Symfony Scheduler provides a viable replacement to hook_cron wherein messages can be scheduled for dispatch at a predefined interval. Messages are dispatched the moment they are scheduled, and there is no message duplication, making tasks more reliable and efficient.

This post is part 4 in a series about Symfony Messenger.

  1. Introducing Symfony Messenger integrations with Drupal
  2. Symfony Messenger’ message and message handlers, and comparison with @QueueWorker
  3. Real-time: Symfony Messenger’ Consume command and prioritised messages
  4. Automatic message scheduling and replacing hook_cron
  5. Adding real-time processing to QueueWorker plugins
  6. Making Symfony Mailer asynchronous: integration with Symfony Messenger
  7. Displaying notifications when Symfony Messenger messages are processed
  8. Future of Symfony Messenger in Drupal

With this, the sm worker provided by the SM project, the Symfony Messenger integration with Drupal, can be solely relied on. Rather than legacy runners such as Drupal web cron, request termination cron (automated_cron.module), Drush cron, and Ultimate Cron.

Scheduler functionality is implemented by the Symfony Scheduler component. The Drupal integration is provided by the SM Scheduler module

Schedule provider

Create a message and message handler as usual, then create a Schedule Provider:

add(
      RecurringMessage::every('5 minutes', new MyMessage()),
    );
  }

}

A schedule provider is:

  • a class at the Messenger\ namespace
  • with a #[AsScheduler] class attribute
  • implementing \Symfony\Component\Scheduler\ScheduleProviderInterface
  • implements an getSchedule method. This method returns a message instance and the schedule frequency.

For dependency injection, schedule providers have autowiring enabled.

What would normally be the contents of a hook_cron hook would instead be added to the message handler. The message itself does not need to store any meaningful data.

Instead of intervals via RecurringMessage::every(...), crontab syntax can be used:

\Symfony\Component\Scheduler\RecurringMessage::cron('*/5 * * * *', new MyMessage());

Running the worker

Lastly, schedulers must be run via the consume command with a dedicated transport. The transport name is the schedule ID prefixed by scheduler_. For example, given the scheduler ID my_scheduler_name from above, the transport name will be scheduler_my_scheduler_name.

The command finally becomes: sm messenger:consume scheduler_my_scheduler_name .

Timing

Messages will be dispatched the moment their interval arrives. Normally intervals begin when the worker is initiated, however you can set a point in time to begin interval computation using the \Symfony\Component\Scheduler\RecurringMessage::every   $from parameter.

The worker must be running at the time when a message is scheduled to be sent. The transport won't retroactively catch-up with messages not dispatched during the time it wasn't running.

The next post outlines how to intercept legacy Drupal @QueueWorker items and insert them into the message bus.

Feb 05 2024
Feb 05

Today we are talking about AI within Drupal, How AI can help, and Modules to use with guest Martin Anderson-Clutz. We’ll also cover Augmentor AI as our module of the week.

For show notes visit:
www.talkingDrupal.com/436

Topics

  • Terminology
  • IMF analysis
  • Prompt engineering
  • AI in Drupal
  • Best way to try modules
  • Best use of AI
  • Other ways of integrating

Resources

  • Augmentor AI
  • Open AI
  • Prompt Engineering: Get the Most From Your Drupal Site's AI Integration
  • Terminology
    • NLP - work with text provided in a conversational format, understand the intended meaning, and provide a relevant response
    • AI - A subset of CS that aims to develop systems that can mimic human response, or automating sophisticated behavior
    • ML - subset of AI that aims to act without explicit guidance, by extrapolating from known data
    • Deep learning - a subset of ML which uses artificial neural networks with representational learning to develop and leverage their own means of classification and other feature detection
    • LLM - an AI algorithm that uses Deep Learning techniques to accomplish NLP tasks such as responding to unstructured user prompts. LLMs are trained on massive data sets, often gathered from the internet, but sometimes using more specialized data
    • Typically the AI interfaces our listeners are already using are based on an LLM, but the nature and recency of the data they’ve been trained on can vary widely. Recently Mike Miles created Drupal Droid, a GPT model specifically trained for Drupal developers, and you can find a demo of that in our YouTube channel
  • Mike Miles Drupal Droid
  • AI module list
  • OpenAI Image
  • Search API Pinecone
  • TMGMT Translator OpenAI

Guests

Martin Anderson-Clutz - mandclu

Hosts

Nic Laflin - nLighteneddevelopment.com nicxvan
John Picozzi - epam.com johnpicozzi

MOTW

Correspondent

Martin Anderson-Clutz - mandclu
Augmentor AI

  • Brief description:
    • Have you ever wanted a highly configurable way to integrate multiple AI services with your Drupal site? There’s a module for that.
  • Brief history
    • How old: created in Oct 2022 by murrayw of Morpht, though recent releases are by elonel
    • Versions available: 1.1.2 which works with Drupal 9.5 and 10
  • Maintainership
    • Actively maintained, most recent release was earlier this month
    • Documentation available
    • Number of open issues: 11, 3 of which are bugs
  • Usage stats:
  • Module features and usage
    • To use Augmentor AI, you need to define one or more “augmentor” configuration entities. An augmenter entity implements an augmentor type, which determines what AI service it can use, what configuration options it will have available, and so on.
    • The augmentor will define one or more “messages” that provide structure to the prompt that will be passed to the AI model in order to generate a response. It can also be configured in a variety of ways, such as how much randomness to use, a maximum response length, and more.
    • You can expose your augmentor(s) to content creators by adding a CKEditor button, or by adding fields to your site’s entity forms. For each field use can choose the widget to use, and how it should interact with any existing data in the field you want to target.
    • For example, you could have it generate a summary from your body field and have it automatically populate the summary field. Or, you can have it suggest tags, but the specialized widget renders each suggestion as a clickable element that will add the tag to a core tag field.
    • There are currently modules available to integrate Augmentor AI with ChatGPT, Google Cloud Vision, AWS AI, and more.
Feb 05 2024
Feb 05

Fun fact. Drupal was started in 2001 — two years before WordPress was released. According to W3Techs, this CMS powers 1.1% of all websites, from blogs to e-commerce and government sites, holding a 1.6% market share.
Building a website with Drupal is a good idea. But remember: a poorly optimized Drupal site is vulnerable, has lower response times, and results in database delays. When talking about its performance optimization, the tricks include different architectural changes, modes of caching, and other ways to speed up website load time. 
Let’s discuss ways to improve Drupal website speed, ensuring faster loading times and a better visitor experience. In this blog post, we will explain why page speed is crucial, how to measure it, and learn seventeen Drupal caching strategies you can use to improve website performance.

Why is page speed important?

Imagine the situation: you have created a perfect site, made a stunning design, and filled the pages with expert content, but… All your efforts do not bring any results. Oh, you are not alone. This is a common problem for developers and marketers who don't understand how search engines work or don't consider user experience. Both are related to website load time. 
The speed of your site plays a crucial role. Google considers page load time as the core ranking parameter. A quality website performance tuning makes it more prominent among the search results. Simply put, this is like a reward for a website that provides Google customers with better performance.
However, is Google ranking an end in itself?
Your main goal and priority should be user experience (UX). If your web pages are sluggish, it can hurt the perception of your brand. Visitors will perceive a company as vulnerable and unreliable. Improving page loading speed is a key to customer satisfaction, which results in more leads and new revenue. 
So, the answer to "Why is Drupal website speed important?" is this: higher user satisfaction, greater conversions, and increased sales.

Is Your Drupal Website Fast Enough?

Over time, Drupal has gained many features, such as Drupal's built-in Dynamic Page Cache. Still, building a highly performant and functional website on it can be challenging. You can face the problem of slow website load time while developing and after releasing it. You never know when it will happen or what it will cause for your business. 
The right thing to do is to implement Drupal performance optimization, which starts with gauging the current page performance. You can use Google PageSpeed Insights to measure website speed. It is a free Google-supported tool. It provides information about site performance on both desktop and mobile devices. Additionally, the service advises on improving page loading speed.
Keep in mind that regular performance testing keeps your website running smoothly and faster.

17 Ways to Increase Your Drupal Website Performance

Google requires a minimum two-second page load time. For e-commerce and some other sites, its performance should be even faster. If you have yet to reach that goal, 17 caching solutions can help you implement your page speed optimization into life. 
We will address general ways to speed up site loading and some specific Drupal tools and modules.

  1. Keep your Drupal core, modules, and themes updated. Outdated software weighs down the website, making it vulnerable and sluggish in all browsers. Make sure your CSM regularly updates to stay secure and highly-performance.
  2. Implement a content delivery network (CDN). CDN is a third-party tool that helps to speed up Drupal website performance. It stores different parts of your site, such as CSS, media, etc., on separate servers. CDN companies run data centers across the world, reaching users from the closest location.
  3. Optimize images. Large images affect page loading speed, making it slow. Use the Image Optimize module to change the compression ratio of images without sacrificing quality.
  4. Bandwidth optimization. In addition to optimizing images, aggregation of CSS and JavaScript files improves frontend performance and load times. It reduces the total number of HTTP requests, making web pages work faster.
  5. Disable unnecessary modules. Every module you enable on your Drupal site adds overhead and increases the execution time of the code. Uninstall unnecessary modules like the Administration Menu, Devel node access, CCK Content Permissions, Module Filter, Forum, Tracker, Statistics, etc.
  6. Use a lightweight theme. A light theme will use less code and resources, which can improve performance.
  7. Choose a reliable hosting provider. Using a performance-optimized hosting solution greatly impacts your Drupal website speed. It is better to choose the service that specializes in Drupal.
  8. Use a PHP accelerator. A PHP accelerator can improve your site's performance by caching compiled PHP code.
  9. Page caching. This stores a copy of the rendered HTML page in memory so that it can be served directly to users without generating the page dynamically each time.
  10. Mem caching. Memcache allows you to strug your database load to a minimum by caching database objects in RAM. It can store data in the format as little as a number or as big as a complete HTML page.
  11. File caching. By using the file caching technique, developers can reduce the number of times that the server needs to read files from disk. This is especially beneficial for file-intensive server workloads.
  12. Varnish caching. This reverse proxy software can be used to cache static and dynamic content in addition to Redis. It handles many static files and anonymous page views for the website. 
  13. Redis caching. Redis, or Remote Dictionary Server, is an in-memory data structure store that can be used to cache data and code. It can store a database, cache, message broker, and streaming engine.
  14. Twig caching. Twig caching is a way to improve the performance of Drupal 8 themes by storing compiled Twig templates in memory. This means that the templates do not need to be compiled every time a page is loaded, which can save a significant amount of time.
  15. BigPipe caching. It is the Drupal 8 module for improving the Drupal website performance by loading pages in parallel. This means that different page parts can be loaded simultaneously, making the page load more quickly.
  16. Activate fast 404 modules. The Drupal Fast 404 module uses less than 1 MB of memory compared to 60-100 MB of memory to deliver a 404. 
  17. Pay attention to configuring the cron file. Make sure to carefully configure your cron file, which is responsible for running scheduled jobs, such as the search indexer, log clearing, and temporary file clearing.

WRAPPING UP

The above practices for Drupal site speed optimization are easy to put into any website, from implementing a CDN to Twig caching. Even beginners can handle these tips, but we recommend consulting a specialist to get the best result. 
Ensuring that your website works correctly and pages load smoothly helps you focus on other sides of your business. For many companies, the website is their “face” and the main communication channel with their customers. Don’t mess it up — be fast and optimize!

Feb 02 2024
Feb 02

UPDATE!

We have confirmed with the Drupal Association that Nonprofit Summit breakout leaders will receive FREE admission to the conference. So submit your ideas today!

You don’t have to be a developer to lead a discussion! We still need topic ideas that include the experiences of Drupal site builders and Drupal users, content editors, and decision-makers, in addition to technical topics.

(Side note to CiviCRM fans: we've heard you loud and clear. This topic is thoroughly represented.)

Original Message

Hey nonprofit Drupal users! The DA is interested in supporting community-driven content that is specifically relevant to nonprofit organization staff and related agencies at DrupalCon North America in Portland, Oregon, at the Nonprofit Summit on May 9, 2024.

We are looking for volunteers who would be interested in giving back to the community by contributing some subject matter expertise via a day of informal breakout sessions or other group activities. We are open to ideas!

Who are we looking for?

Do you have some Drupal expertise or a recent experience with a Drupal project that you would like to share with others? Is there something about Drupal that you think is really cool that you would love to share with the nonprofit Drupal community?

What’s required?

You will not be required to make slides! You don’t need to have lots of (or any) speaking experience! All you need is a willingness to facilitate a discussion group or engaging activity around a particular topic, and some expertise or enthusiasm for that topic that you wish to share. 

How to Submit an Idea or Topic

Please fill out this form by February 13th and we will get back to you as soon as we are able. Thank you! https://forms.gle/MJthh68rsFeZsuVc8

Discussion leaders will be selected by the Nonprofit Summit Planning Committee and will be notified by the end of February. 

Questions? 

Email [email protected].

Feb 01 2024
Feb 01

Last December, I wrote about AI as a tool for Drupal development – a concept that, for many, sounds like a huge leap forward, and it is. But it’s just the beginning. We’re not far from AI acting as an actual Drupal developer.

AI tools capable of doing developer-like work already exist in various forms. Among them GPT-4 and Google Bard. Tools such as these can analyze code, allowing conversations where errors and concerns are discussed and solutions are recommended.  The result is often a significant increase in efficiency.

AI can also be leveraged as a development tool to generate code from scratch, seek suggested revisions, receive helpful feedback, and a lot more. At some point, AI may drive the entire Drupal web development process. 

We’re not there yet, and here are five hurdles that need to be cleared.

Current Limitations to AI-Driven Web Development

1. There are limits on amount of input AI models can handle without having to compress the conversation. 

Code creation involves a lengthy conversation back and forth between the developer and the AI powered Large Language Model (LLM).  When the maximum input size supported by an LLM model is reached, the conversation must be automatically compressed so that it can continue. 

During a lengthy code-creation conversation with GPT-4, using tools such as Bard and chatGPT, developers are not alerted to the fact that maximum conversation size has been reached. Instead, the conversation up to that point is automatically compressed and the process moves forward. This results in the AI "forgetting" details which can reduce the quality of its feedback.

While the compression algorithm used by various LLM apps may not be known, we know that it basically takes chunks of content from the conversation and reduces it to a manageable size. In many cases, this might not be a problem. There is, however, the potential for details to be lost in the process – particularly if we are talking about an activity such as code creation where there's no room for ambiguity.

To illustrate this limitation, here's a simple example created with GPT-3.5-Turbo that asks for essays about food from each country:

User: Please generate essays on foods for each country of the world.  When I say continue, please generate an essay on the next country until you have generated essays for all countries.  It is okay if you can't fit the whole essay in a single response; I will say continue and then you can proceed with the current essay.  Please order the countries alphabetically and then start with the first country.

GPT: Let's start our culinary journey around the world with Afghanistan.

Afghanistan, a land of rich cultural heritage and breathtaking landscapes, offers a cuisine that reflects its history, geography, and diverse influences. Afghan cuisine is a fusion of flavors from various regions, including Central Asia, the Middle East, and South Asia. It's characterized by hearty dishes, aromatic spices, and a focus on fresh ingredients.

One of the most iconic dishes of Afghan cuisine is Kabuli Pulao...

After generating additional essays in the same conversation up to "China", I asked GPT to remember the first dish it listed in the first country's essay but it was not able to remember that far back and gave an incorrect response:

User: What was the first dish in the first country listed?

GPT: The first dish listed in the essay for the first country, which was Burkina Faso, is Tô, a thick porridge made from millet or sorghum flour, cooked with water and stirred until it reaches a smooth consistency.

One approach to avoiding the potential loss of detail due to compression is to start a new conversation. The challenge, however, is that the new conversation might not accommodate all relevant information without also requiring compression.

Another approach is to ask one-off questions in separate conversations; if the AI does not need the full context from the main conversation, asking those questions elsewhere helps avoid excess clutter, thus reducing the amount of compression needed to maintain the conversation.

In the near future, it's likely that new versions of GPT and other LLMs will be able to manage larger inputs. As longer, non-compressed conversations become possible, we will move from AI assisting with code snippets to larger files and then, ultimately, allow analysis and modification of entire repos with AI's generating pull requests.  

As longer, non-compressed conversations become possible, we will move from AI assisting with code snippets to entire files and then, ultimately, allow analysis and modification of entire repos with AI's generating pull requests. 

Input limitations is key among the reasons why AI is not yet positioned to step into the role of a Drupal developer. And there are others.
 

2. AI Models are prone to inaccurate guesses.

One facet of leveraging LLM's for development is their tendency to "hallucinate" incorrect output that may seem correct but is factually wrong.

I’ve had this happen when asking GPT-4 to generate a snippet of code, and then it proceeded to generate code that would be valid if certain functions and methods existed in Drupal. But they don’t. When I asked why it made up an invalid solution, it first apologized and then, when pressed, admitted it did not know and that it cannot "introspect." This makes sense as LLMs simply guess the next best word. This behavior illustrates the benefit of techniques such as chain-of-thought where the LLM is asked to talk through its process first rather than immediately output a solution.  

Likely what’s needed to overcome the frequency of hallucinations is a bigger model which has been trained on more data. GPT-4 is bigger than GPT-3, and seems to be less prone to hallucinations. When GPT-4.5 or GPT-5 is released in the next few months, the occurrence of hallucinations is likely to decrease further.

3. Solutions might not match the current version of Drupal.

Another issue that I’ve encountered with GPT-4 is that solutions are sometimes suggested that would have been appropriate for Drupal 7 or Drupal 8, when I’m doing Drupal 10 work. 

This kind of error could be the result of the target Drupal version, mentioned at the beginning of a conversation, being excluded due to compression or it could be another form of hallucination.  To mitigate this, I'll periodically remind the AI we are talking about Drupal 10 as the conversation progresses.

Sometimes, a suboptimal solution can be corrected by pointing it out to the AI. The AI might then apologize and generate an alternate version of that code snippet.

4. Judgment might simply be bad.

The fourth risk is bad judgment. The AI model might offer solutions that work, but are not necessarily good solutions that follow best practices. When a developer is leveraging AI as a tool for Drupal development, bad advice is something that can be sifted through and discounted. The picture is very different when you are looking to AI to function as a developer, because it might create code that technically works, but is it future-proof or as scalable as code written by an expert human developer?

On one level, the potential for bad judgment can be explained by the fact that LLM's are modeled on the human brain, which also has the potential for mistakes and bad judgment. That said, GPT-4 shows improvements in judgment over GPT-3.5 and there is every reason to expect that judgment will continue to improve with subsequent versions.

5. And of course, security.

Currently, the most prominent AI solutions are hosted remotely by huge companies: OpenAI, Google, Microsoft, and Amazon. As such, there are inherent questions about the security of software developed by AI – particularly if sensitive data is at stake.


There is no guarantee that future AI models will not be trained on sensitive data that hackers might seek to get access. At this point, developers need to ask: “If the work I’m doing was shared publicly, would that be okay?”

Given how useful AI tools are, it's worth finding solutions to mitigate security risks. For example, sanitizing or encoding sensitive data before submitting it to the AI and then decoding its response; solutions are already being created to play this role.


Fortunately, for those of us who are Drupal developers, our work is often open source. When I’m leveraging AI to write an open source Drupal module, I’m not worried that others might get access to the code. In fact, that might actually be a good thing since future LLM's could suggest that module as a solution.

Imagine a dynamic similar to current Search Engine Optimization (SEO) strategies used to help a website come up higher in search rankings. This kind of thinking is still hypothetical, but in the future, a secondary motivation for integrating AI tools into a website might be to ensure future LLM models have information about the website baked into their training so they can suggest it to users.


 

What’s Next? Future Possibilities for AI Web Development 

Now that we’ve covered what I view as the key reasons why we are not there yet, let’s look at how GPT-5 or GPT-6 might act as a developer.


The first limitation mentioned above is the input size. It's very likely that input capacity will only increase, possibly to the point that an AI will be able to hold an entire website “in its mind.” Vast new possibilities would emerge at that point.

Let’s compare an AI-driven world to current development workflows. Current processes for a Drupal support request can be summed up as follows:

  • A client requests to make a change to their website.
  • A developer provides a level of effort in terms of hours and a Jira ticket is created. 
  • The project manager calculates costs and coordinates with the client for approval to proceed.
  • The project manager schedules the work with the developer.
  • The development team completes the work and forwards it to QA.
  • The client reviews the work and either requests revisions or okays it for deployment.
  • The work is deployed.
  • Post-deploy QA testing is done.
  • The client confirmed work was deployed correctly.

In the future, as tools get smarter and can handle bigger inputs with better judgment, all of these steps could be handled by AI. 

Imagine a Jira ticket containing a "chat widget" containing dialogue between an AI project manager, fine-tuned for managing the project and coordinating the work, talking to an "AI developer" and "AI QA specialist". They would collaborate like humans would, but much faster.

I've experimented with this kind of interaction, manually simulating a conversation between multiple AIs by copying and pasting prompts from one AIs conversation to another, where each AI is given unique information at the beginning of its conversation; current AI capabilities could actually handle all of the above steps, but the quality and judgment would not be there and the required troubleshooting and oversight would outweigh any efficiencies.

Ultimately, this kind of technological capability may raise the level of abstraction so human stakeholders can focus more on the big picture and less on micromanaging smaller details. It will still be possible to "zoom in" on details and refine them, but as AI tools improve, the probability that they will complete tasks correctly the first time will improve as well.
 

Transitioning to AI Driven Drupal Development

At this point, an interesting next step in transitioning from human developers to AI efficiencies would be incremental automations of every step in the process, until we get to the point that we’re confident of AI’s judgment and capacity. 

Here's how this might look:

  • A client submits a request.
  • The AI reads it and applies judgment concerning the level of complexity and how to best proceed.
  • A human developer would then review the AI's recommendations to determine whether the approach is correct.

It's a good idea to start experimenting with AI-driven development workflows now even though the technology isn't there yet.  By prototyping this kind of activity, its performance can be evaluated across a range of criteria as new LLM models are released and the following questions come into focus:

  • How much code can the LLM properly understand at once?
  • How often does it hallucinate? 
  • How often does it give bad advice or have bad judgment?
  • How quickly does it generate output?
  • How well does it follow directions?

The transition to AI-driven web development will be a snowball effect. We're now at the point of using AI to make work more efficient. Next steps will be toward the creation of more automation, as we move toward systems that are self-maintaining and self-upgrading.

We’re now at the point of using AI to make work more efficient. Next steps will be toward the creation of more automation, as we move toward systems that are self-maintaining and self-upgrading.
 

Next-Level Security

Moving forward, remotely hosted AI models might not be the only option available. Considering the fact it wasn't long ago that a room full of mainframes was needed to accomplish what can now be done in a cell phone or watch, it’s realistic to envision advancements in AI technology where self-hosted models are within reach for organizations.

Rather than relying on OpenAI, for example, and having to trust that your data would not be hijacked, it might be just a matter of time before individual companies can run their own data centers and spin up their own LLM's that they could train, customize, and secure. 

Security levels of different AI systems might be audited and serve as a competitive differentiator. 
 

Will AI Take Jobs from Web Developers?

Yes.

Ultimately, AI driven efficiencies will take on much of the work that web developers are currently responsible for. That’s the downside. 

The alternative to becoming obsolete is to lean into AI as Promet is doing.  Moving to AI-driven development will be a paradigm shift similar to moving from print media to the Internet; the companies and individuals that embrace AI will prosper. 
 

Interested in continuing the conversation about how AI may impact Drupal development, as well as how it can be leveraged to make your website better, right now? Let’s talk.


 

Feb 01 2024
Feb 01

We've made it to the final blog post (for now?) in our spotlight on Symfony in Drupal.

Spotlight on Symfony in Drupal

Utility Symfony components used in Drupal

Let's look at the other components.

We're using the term, "utility components", to group together Symfony components that provide useful functionality. It's a great idea to familiarize yourself with these. You can make use of them in your own modules, or bring them into other PHP application code.

Console

For Drupal developers, there are at least 2 readily-available options for building custom command-line utilities or applications: Symfony Console and Drush.

Symfony's Console component is useful for building command-line utilities for PHP applications. Remember the Drupal Console project? While no longer maintained, it used Console under-the-hood.

Drush has several points of extension including creating custom Drush commands. Drush includes the Drupal Code Generator project, a code scaffolding tool which you can extend to create custom commands.

If you're interested in adding Console functionality in Drupal core, check out this issue: Provide core CLI commands for the most common features of Drush.

Yaml

The Yaml component loads and parses YAML files. Drupal's configuration management system uses this one a lot.

Process

The Process component runs commands in a sub-process. It can handle system commands like exec, passthru, system, or git, and handles differences in operating systems for us.

Mime

The Mime component provides useful methods for working with MIME types and sending emails.

Polyfill

Symfony backports features from the latest PHP versions into polyfill components. These are automatically included depending on your configuration and PHP version.

Translation

Symfony's translation tools support the internationalization of an application.

Serializer

The Serializer component handles the encoding and decoding of objects among formats like XML, JSON, and Yaml.

Validator

The Validator component provides more of a design pattern, or an API of sorts that other modules can use to define what types of data they work with. These rules are defined as Constraints, and the code that actually evaluates the logic are called Validators.

Learn more

Explore Symfony in Drupal for yourself:

  • Look in vendor/symfony for Symfony components.
  • Browse core/lib/Drupal/Core and core/lib/Drupal/Component for classes that are original to Drupal. This is where you'll find Drupal's customizations of Symfony components.

Recap

We've taken a high-level look at key Symfony components in Drupal. If this article has sparked your curiosity, dig into the Symfony components documentation. Learn how to extend and alter Drupal. Looking under the hood of both Symfony and Drupal improves our understanding and makes us better developers. And these skills can transfer to other PHP projects that use Symfony.

Jan 31 2024
Jan 31

DrupalCon is the most significant open-source tech event in North America. Mark your calendars, as DrupalCon Portland is returning to the City of Roses this 6-9 May 2024! Whether you're a seasoned Drupal pro or just starting your open-source journey, DrupalCon Portland 2024 has something for everyone.

You might wonder why you should attend DrupalCon. Read on to learn why DrupalCon Portland 2024 is a must-attend event!

Elevate Your Skills

Power up your expertise! DrupalCon Portland will gather the brightest minds in the Drupal ecosystem. Attend mind-bending sessions, interactive workshops, and cutting-edge keynotes to amplify your skills. Elevate your Drupal game and bring a competitive edge to your projects. You’ll also have access to job fairs and opportunities to develop your resume. Students and recent alums of universities, colleges, high schools, trade schools, and Drupal training programs can take advantage of $50 student-priced tickets!

Forge Powerful Connections

Connect and conquer! DrupalCon isn’t just about code; it's about connections. Network with industry leaders, fellow developers, and creative minds. Forge partnerships, exchange ideas, and immerse yourself in a community that fuels success. Your next extensive collaboration might just be a handshake away.

Ride the Wave of Drupal Trends and AI

Stay ahead of the curve! DrupalCon is your gateway to the latest trends in Drupal. From groundbreaking features to emerging technologies, ride the wave of innovation. Gain insights into the future of Drupal and position yourself as a pioneer in the ever-evolving tech landscape.

Unleash the Drupal Spirit

It is more than an event – it's a celebration! DrupalCon is where the Drupal spirit comes to life. Engage in fun activities, socialize with like-minded individuals for robust conversations, and celebrate the strength of our community. Let's make memories together at DrupalCon Portland 2024!

Vibrant social after-hour events

Unwind and celebrate with the community at after-hours gatherings and explore the charming city of Portland. This year’s event will have a revamped Welcome Reception party with interactive elements and an exciting Trivia night on Thursday! There are also sponsored events from our partners for attendees to enjoy.

For more details on DrupalCon Portland 2024, register for the event on 6 February! We can’t wait to see you in the City of Roses.

Jan 31 2024
Jan 31

In our latest Tag1 Team Talk, our Drupal migration experts delve into the intricacies of migrating media and files in the context of moving from Drupal 7 to Drupal 10. With Drupal 7 nearing its end of life and Drupal 10 in General Availability, this discussion is more relevant than ever!

Hosted by Janez Urevc, Strategic Growth and Innovation Manager at Tag1, and featuring key Drupal contributors Lucas Hedding and Mauricio Dinarte, this talk offers an in-depth look into the world of Drupal migrations. The episode covers various critical aspects, including the evolution of the media landscape from Drupal 7 to Drupal 10, the challenges in migrating locally stored versus remote media, and handling inline embedded media.

Additionally, our guests provide practical advice on leveraging Rsync for efficient file transfers, managing large file libraries, and dealing with unique challenges such as remote media migrations and cloud storage solutions like S3. Gain valuable insights from anecdotes shared by the experts, highlighting real-world scenarios and problem-solving techniques used in their migration projects. This episode is a must-watch for anyone involved in Drupal migrations, offering expert guidance to navigate this complex but essential process. Watch now to enhance your understanding of Drupal migrations and equip yourself with the knowledge to tackle media and file migrations successfully!

[embedded content]


For a transcript of this video, see Transcript :: Moving from Drupal 7 to Drupal 10: Managing Complex File and Media Migrations.

Links

Please let us know if you have specific migration-related topics you'd like to see us cover. Or, reach out and let us know if we can be an active part of ensuring your migration is a success!

Photo by Christin Hume on Unsplash

Jan 31 2024
Jan 31

In this installment of our series on Symfony's role in Drupal, we're focusing on the Routing component. Even if it may seem simple looking from the outside, routing in Drupal is a complex task with lots of customized parts. The routing component's job is to match incoming requests to the correct controller, which is then responsible for building the response.

If you want to get into the details of routing in Drupal, check out our in-depth course on Routes and Controllers in Drupal. But for now, let's take a high-level glance at how Drupal has built upon Symfony's Routing component.

Spotlight on Symfony in Drupal

  1. Part 1: HttpKernel in Drupal
  2. Part 2: EventDispatcher in Drupal
  3. Part 3: Routing in Drupal
  4. Part 4: Utility Components in Drupal

Symfony's routing component in Drupal

Find the heart of Symfony's routing component in Drupal in /vendor/symfony/routing/Router.php. There's a lot going on in this file, but we're going to take a look at its 2 primary methods: getRouteCollection and match.

    /**
     * @return RouteCollection
     */
    public function getRouteCollection()
    {
        return $this->collection ??= $this->loader->load($this->resource, $this->options['resource_type']);
    }

The getRouteCollection method loads all the route mappings defined by the application. As an example, Drupal might define routes like this:

system.admin:
  path: '/admin'
  defaults:
    _controller: '\Drupal\system\Controller\SystemController::systemAdminMenuBlockPage'
    _title: 'Administration'

As you might imagine, loading all these routes is computationally expensive, so there is code here to help us cache and optimize this information.

Now let's look at the match method.

    public function match(string $pathinfo): array
    {
        return $this->getMatcher()->match($pathinfo);
    }

The match method identifies which route in our collection corresponds to the current request's path. It's instrumental in understanding which part of our code will respond to a particular request. You can see an example matcher implementation in the /vendor/symfony/routing/Matcher/UrlMatcher.php file. The UrlMatcher class is the main matcher for translating between the path of an incoming request and the route that will ultimately generate a response.

How Drupal enhances Symfony's routing component

You can find Drupal's version of the Router in the core/lib/Drupal/Core/Routing directory. There's a lot more going on here than in the base Symfony routing component, all because Drupal adds several enhancements to meet its needs.

One of the most useful additions Drupal provides is access control at the route level. Have a look at AccessAwareRouter class's implementation of the matchRequest method:

  public function matchRequest(Request $request): array {
    $parameters = $this->router->matchRequest($request);
    $request->attributes->add($parameters);
    $this->checkAccess($request);
    // We can not return $parameters because the access check can change the
    // request attributes.
    return $request->attributes->all();
  }

Here, Drupal matches a URL to a controller and checks that the route has the correct access permissions, giving developers a helping hand in managing complex permission requirements. Our Add Access Checking to a Route tutorial can give you an in-depth understanding of this.

Next, you might be curious about how Drupal gathers information about routes. Delve into this by looking at the RouteBuilder.php file. It's packed with information on how Drupal builds its unique routing system.

// ...
 public function rebuild() {
    // ...

    $collection = new RouteCollection();
    foreach ($this->getRouteDefinitions() as $routes) {
      // The top-level 'routes_callback' is a list of methods in controller
      // syntax, see \Drupal\Core\Controller\ControllerResolver. These methods
      // should return a set of \Symfony\Component\Routing\Route objects, either
      // in an associative array keyed by the route name, which will be iterated
      // over and added to the collection for this provider, or as a new
      // \Symfony\Component\Routing\RouteCollection object, which will be added
      // to the collection.
      if (isset($routes['route_callbacks'])) {
        foreach ($routes['route_callbacks'] as $route_callback) {
          $callback = $this->controllerResolver->getControllerFromDefinition($route_callback);
          if ($callback_routes = call_user_func($callback)) {
            // If a RouteCollection is returned, add the whole collection.
            if ($callback_routes instanceof RouteCollection) {
              $collection->addCollection($callback_routes);
            }
            // Otherwise, add each Route object individually.
            else {
              foreach ($callback_routes as $name => $callback_route) {
                $collection->add($name, $callback_route);
              }
            }
          }
        }
        unset($routes['route_callbacks']);
      }
      foreach ($routes as $name => $route_info) {
        // ...
        $route = new Route($route_info['path'], $route_info['defaults'], $route_info['requirements'], $route_info['options'], $route_info['host'], $route_info['schemes'], $route_info['methods'], $route_info['condition']);
        $collection->add($name, $route);
      }
    }

    // DYNAMIC is supposed to be used to add new routes based upon all the
    // static defined ones.
    $this->dispatcher->dispatch(new RouteBuildEvent($collection), RoutingEvents::DYNAMIC);

    // ALTER is the final step to alter all the existing routes. We cannot stop
    // people from adding new routes here, but we define two separate steps to
    // make it clear.
    $this->dispatcher->dispatch(new RouteBuildEvent($collection), RoutingEvents::ALTER);

    $this->checkProvider->setChecks($collection);

    $this->dumper->addRoutes($collection);
    // ...
    $this->dispatcher->dispatch(new Event(), RoutingEvents::FINISHED);

Here we can see the key steps that make Drupal's router more robust than the one provided by Symfony.

  1. Drupal gets all the route definitions described in YAML configuration throughout the codebase. These get added to a $collection variable.
  2. The rebuild method uses the EventDispatcher to send (dispatch) a RoutingEvents::DYNAMIC event. This enables any contributed module or custom code to register their own dynamic route and add them to the route collection.
  3. Drupal dispatches another event, RoutingEvents::ALTER, to allow any other code to alter route definitions compiled thus far. This is akin to a menu_alter hook in older versions of Drupal (<= Drupal 7).
  4. The dumper adds collected route information to a database table using the \Psr\Log\LoggerInterface.
  5. The rebuild method fires off one more event, RoutingEvents::FINISHED, in case any application code needs to react to the route collection rebuilding.

By making use of the Event system, Drupal is able to support dynamic routes and the altering of existing routes. This makes the system more flexible and helps provide the functionality that the ecosystem of contributed modules have come to expect over the years.

Learn more

Next up

  • We'll take a look at what we're terming "utility components". Other Symfony components that are included in Drupal, but that aren't extensively customized by Drupal (if at all).
Jan 31 2024
Jan 31

Big news! Ticket sales for MidCamp 2024 are on sale and ready for you to buy!

Early bird sales are on until Feb 12, with tickets just $50.  Your ticket includes:

  • 24 high-quality sessions over two days,

  • coffee, lunch, (and maybe even snacks),

  • conversations with 100+ awesome Drupal folks, and,

  • evening socials that are as accessible and inclusive as we can make them

Get your early bird ticket!

Important Dates:

  • Early bird pricing ends: February 12

  • Speakers announced: mid-February (all speakers are eligible for a free ticket, and anyone who submits a session that is not accepted will be eligible for early-bird pricing even after it closes)

  • Regular ticket pricing ends: March 13

  • MidCamp 2024: March 20-22

Sponsors Get Early, Exclusive Access

Get early and privileged access to new talent and customers by sponsoring MidCamp. We have a variety of sponsorship packages available.

Starting at $600, sponsoring organizations can target their jobs to a select group of experienced Drupal talent, maximize exposure by sharing space with dozens of jobs instead of millions, and have three days of being face-to-face with applicants.

Our sponsorship packages are designed to showcase your organization as a supporter of the Drupal community and provide opportunities to:

Check out the sponsorship packages here, we look forward to working with you to get your organization involved for 2024!

View Sponsorship Packages

Stay In The Loop

Please feel free to ask on the MidCamp Slack and come hang out with the community online. We will be making announcements there from time to time. We’re also on Twitter and Mastodon.

We can’t wait to see you soon! Don’t forget, cancel all those other plans and make MidCamp the only thing happening on your calendar from March 20-22, 2024.

Jan 30 2024
Jan 30

As per our charter, the EOWG opened elections in December for the one expiring seat.

Nominations were open for just over a month and we were extremely excited to have two highly-qualified nominees:

  • Mike Miles (mikemiles86) - New England Drupal Camp organizer and Boston Drupal Meetup group lead
  • Mike Richardson (richo_au) - DrupalSouth Treasurer and DrupalAsia Steering Committee chair

Nominations were closed after a month (with an extension due to the holidays) and voting took place from January 15-19. We conducted voting via Google Form, and ballots were open to anyone with a Drupal user ID. Everyone who voted was given issue credit for contributing to the decision.

With 44 votes submitted, Mike Richardson won with 66% of the votes.

Mike Richardson was informed of the result and accepted the position for a two-year term on the Board.

After internal discussion, the existing board also agreed to offer Mike Miles a non-voting position on our Advisory Committee.

We're excited to begin work with our new members - particularly in expanding the conversation outside of North America.

The Board would also like to extend our deepest thanks to Matthew Saunders for serving two terms with us. Matthew has been an invaluable source of guidance from our formation to ongoing issues surrounding organizational structures and processes. We appreciate his time so far, and his continued dedication as an advisor.

Get involved with the Event Organizers

The Event Organizers Working Group supports community-led teams to grow Drupal through local events. Stay connected with the event organizer community:

  • Join the #event-organizers channel in the Drupal Slack workspace
  • Join our monthly open meetings in #event-organizers, the
    2nd Tuesday of the month starting at 16:00 UTC / 11:00 am ET
  • Jump into our Issue Queue
Jan 30 2024
Jan 30

As of writing this blog post in January 2024, LakeDrops is 13 years old, has 4 team members, maintains 60 Drupal modules on drupal.org and gets constantly credited for contributions. All this is happening purposefully, since LakeDrops allocates 20% of its resources towards Drupal contributions. That's one full day from each team member every single week.

A lot of that goes into code contribution, but that's not all:

  • writing documentation
  • organising local meetups
  • sharing knowledge as speakers at events
  • providing support, e.g. on Drupal Slack
  • writing blog posts
  • recording video tutorials

Those and more activities created a reputation for which the Drupal Certified Partner status in silver has now been assigned, and everybody in and around LakeDrops is celebrating this.

Why do we contribute?

Without Drupal, LakeDrops wouldn't be a thing. None of LakeDrops' projects would have been possible. Likewise, Drupal will be the foundation of every future project as well. For that selfish reason, it is the most logical business decision to do whatever the company can afford, to help the Drupal project to do well. At the same time, Drupal isn't much without its outstanding community, so that being an active part of it is not only rewarding but also fun, most of the time.

However, a project and community of that size can hardly sustain itself without governance. And that's why we're grateful for the Drupal Association (DA) as an organisation and every single person that's being involved in the DA to provide the framework for all of that. For many years, LakeDrops has advocated for the DA and supported them financially.

How can we afford 20% contribution?

We get this question a lot, and our response often seems to be a surprise. This is certainly not applicable to every organisation, but the maths for LakeDrops is simple: the cost for sales and marketing is actually zero, simply because it doesn't exist. Instead, we spend the equivalent "amount" in Drupal contribution. And that turns into a double win, just for ourselves: not only does this help the Drupal project, it also drives our own business; customers find us, we don't have to find our customers.

This might be an oversimplification, yes. Still, it has worked for so many years already, and there's no sign of getting worse. We hope this can work for others too, maybe this post is encouraging, and we'd be delighted to discuss this in more detail if you were interested. The more we all do together, the bigger the benefit for all of us.

Jan 30 2024
Jan 30

Drupal is one of the most popular content management systems that has been evolving for years. The latest release in use is Drupal 10. This version introduced several improvements empowering the user experience and content editing process. Among the features are new frontend (Olivero) and backend (Claro) themes, an enhanced CKEditor 5, and decoupled menus. Let's take a look at what else Drupal 10 has to offer. 

Drupal 10 release date

Drupal 10 made its debut on December 14, 2022 (the latest update, Drupal 10.2, happened one year later on December 15). It is one of two supported major versions of Drupal (another one is Drupal 7 - here, support ends on 5 Jan 2025). Drupal 10 has brought new features and improvements compared to Drupal 9.

Drupal 10 features

Users of Drupal 10 can expect a better digital experience. The system's latest version offers more satisfactory customization, performance, and editing capabilities. The appearance of the frontend and backend also changed significantly. "The ten" is designed to be more accessible to new visitors. It looks modern, is easier to use, and allows excellent expandability.

Developers also got the new Starterkit theme, which significantly influences the template-building approach compared to Drupal 8 or 9. Drupal 10 also brought refreshed JavaScript components, which replaced jQuery UI. What other novelties deserve attention?

Symfony 6.2 and PHP 8.1 as a base 

Of course, as was the case with the transition from Drupal 8 to 9, the main change that somewhat initiated the creation of Drupal 10 is the new version of Symfony. Drupal is based on the Symfony framework, and its code depends on it. 

Adapting Drupal 9 to a newer version of Symfony would require a lot of work, not only related to Drupal core but also to additional modules. Therefore, a more sensible approach was to create a new version of Drupal, conforming with the standards of the latest release of Symfony while implementing new solutions and concepts – without worrying about backward compatibility.

Drupal 10 relies on Symfony 6.2 with security and console improvements, enhanced components, and built-in attributes (e.g., cache, security, template, and Doctrine attributes). As such, it also requires using at least PHP version 8.1. 

Claro - easy-to-navigate administration theme

The time-worn Seven theme, created in 2009 for Drupal 7 and slightly refreshed in Drupal 8, was deterring new users and giving the impression of an outdated system. In Drupal 10, it has been replaced by the Claro theme, designed in accordance with the latest standards, and adapted to take advantage of the full capabilities of the newest version of this CMS.

In Drupal 10, a new admin panel skin - Claro -  will appear

Source: Drupal.org

Claro offers a sleek and modern interface that has changed how administrators experience it. This administration theme is visually appealing, responsive, and easy to use. More importantly, Claro was designed with accessibility in mind. As a result, users with disabilities can easily navigate the panel.

Olivero- slick frontend theme 

Not only the administration panel has got a new look. Users browsing the web page can also feast their eyes on the modern and fully responsive appearance. Olivero is a new default theme introduced in Drupal 10 that is clean, fast-loading, and light. It allows website owners to implement various elements, graphics, color schemes, or typography. Now, the backend and frontend can go hand in hand. 

Olivero - a new front end theme in Drupal 10 will make it more user-friendly


Source: Drupal.org

The Olivero theme has been created to take full advantage of the new system's capabilities and be compatible with the functionalities that are well-liked by the users, such as Layout Builder. The default theme is also WCAG AA-compliant, respecting accessibility. 

CKEditor 5 for better editing experience

Another significant change in Drupal 10 is the new WYSIWYG editor. It's hard to call it just an update of CKEditor from version 4 to 5, as all the code was written from scratch. The authors used a new proprietary data model and architecture. Unlike the DOM used in version 4, CKEditor 5 has an extensive API, giving great opportunities for expansion and integration with modern technologies such as Angular, React, etc. 

CKEditor 5 is an intuitive editor in Drupal 10 with a modern interface and practical features.

Source: CKEditor.com

CKEditor 5 has introduced several enhancements to the editing process. Here are some worth-noting elements:

  • Modern and intuitive UI - the interface has a lighter, more responsive design and an improved toolbar mechanism.
  • Improved media management - CKEditor 5 comes with additional media widgets and a dedicated toolbar to adjust embedded images and videos.
  • New collaboration features - adding the Premium module lets you get handy collaboration solutions. This means that several users can work on the same content page at the same time. These extra features also include track changes, revision history, comments, and more. 
  • Customizable core - CKEditor 5 is flexible and extensible. Although it has many built-in features, you can always add new ones to customize the editor to your needs. Among additional options are find and place, and word and character count.

Starterkit for easier theme customization

Drupal 10 has a change in the approach to template building compared to Drupal 8 or 9. Thanks to the Starterkit theme, we don’t extend the base theme but can generate a clean template as a starting point for building our theme. This prevents inheriting the entire template, which has minimal update options due to maintaining backward compatibility.

The concept of sub-theming remained unchanged – we still can create additional themes that inherit the design elements from our main theme. The generation of the theme itself is automated and performed by built-in Drupal scripts.

php core/scripts/drupal generate-theme mytheme

The Starterkit theme provides tools and customizable templates that make the work of developers and designers easier. Like other elements in Drupal 10, it has also been designed with accessibility in focus. All the resources enable you to create accessible and intuitive themes. 

Decoupled menus

We've known for a long time that Drupal works great as a headless CMS. Version 10 has brought changes in this area as well. One of the most important initiatives in this release is decoupled menus – a functionality that allows you to easily update the menu from the admin panel. This is possible because the menu presentation is wholly separated from the backend management layer, and its data is stored in Drupal.

Thanks to this, websites using frontend frameworks such as React, Vue, or Angular are easier to use and don’t require developers to make minor changes to the web page. If you want to implement this concept in your system, you’ll need a decoupled menu module or a custom integration. 

What are the upcoming features of Drupal 10?

There are also two new functionalities that are still under construction to become core features in Drupal 10. However, it's already possible to test them as a separate module (in the first case) or in the beta version (in the second one). 

Automatic updates

Making Drupal more effortless to use by the average website administrator is a priority. The vast step is automatic updates, a feature that has long been around in most popular CMSs.

Automatic updates include security and Drupal's core updates and can detect and report problems at different stages of the process. There are also plans to expand this feature to support minor updates and the updates of contributed modules and themes. By now, it functions as a separate module developed by the Drupal community, but ultimately, it is to become a core feature. 

Project Browser and one-click installation

In pursuit of other popular CMS systems, the Project Browser module introduces a built-in module browser that makes it easier to find and install a given tool from the administration panel. This is another functionality intended to make Drupal more accessible, especially for new users. The interface is developed to be fast, easy to use, and streamline the view of projects. 

Currently, installing modules in Drupal consists of several steps, and in some cases (e.g., installation using Composer in the command line) requires some technical skills from the user. The module browser has many features, such as intuitive filtering and proposed tools and modules, most often used by the community.

The module browser will greatly simplify the multi-stage process of installing modules in Drupal


Source: Drupal.org

How to upgrade your website to Drupal 10?

As you can see, Drupal 10 offers features and tools that can positively impact your website. If you have one of the earlier system versions, discover how to upgrade to "ten."

Drupal 9

If you’re running your website on Drupal 9, we recommend you upgrade your system to version 10 as soon as possible. Why is this? “The nine” is no longer officially supported since it reached its end of life on November 1, 2023. This means there are no more security fixes or improvements for this version.

You can check your website with tools such as Rector or Upgrade Status, which will help you estimate how much work it will take to update and which modules won’t be compatible with the latest version. Upgrading from version 9 to 10 is the same as any minor Drupal core update. Unfortunately, it does require some technical skill on the part of the user. There are two ways to do it: using Composer or manually.

Drupal 8

Drupal 8 met the end of its life on November 2, 2021, and is no longer officially supported. Its users should update the system to version 9 and then – to version 10. Drupal 8 isn't significantly different from version 9, so upgrading to Drupal 9 isn't complicated at all. The process consists of several steps and is described in the official documentation. You can also use the Upgrade Status module.

Drupal 7

Drupal 7 will be supported until January 2025, but since migration to Drupal 10 is a more complex process, it's worth considering now. 

Migration from Drupal 7 to 10 consists of several key steps. You need to:

  • determine which subpages and features you want to move to a new website,
  • review all the modules in use,
  • plan data structure and the overall architecture,
  • migrate data, content, functionalities, SEO elements, and more,
  • test the migration,
  • deploy the Drupal 10 website on the production server.

This description is only an abbreviated version of the tasks to be performed. It is best to entrust these actions to qualified professionals who can handle the whole migration.

Drupal 10 features – summary

With Drupal 10, users and administrators can experience greater customization, editing process, and intuitive interface. On the other hand, developers get handy tools and themes to develop. It's worth considering moving to this system version, which provides you with security and business continuity. If you’d like to upgrade your Drupal to 10, our team can help you through the entire process, including migration from Drupal 7.

Jan 29 2024
Jan 29

Today we are talking about web design and development, from a group of people with one thing in common… We love Drupal. This is episode #435 UI Suite initiative.

For show notes visit:
www.talkingDrupal.com/435

Topics

  • Elevator Pitch
  • What do you mean by implementing design systems
  • Is this to thel themers or site builders
  • What is the expected outcome
  • The project page says initiative, but this is not on the community initiatives page, is this an intitiative
  • How does this implement public design systems
  • Does this work with Single Directory Components
  • Youtube Channel
  • Getting involved
  • Roadmap
  • Use cases
  • Do you see this going into core

Resources

Guests

Pierre Dureau - LinkedIn pdureau

Hosts

Nic Laflin - nLighteneddevelopment.com nicxvan
John Picozzi - epam.com johnpicozzi

MOTW

Correspondent

Chris Wells - chrisfromredfin

  • Brief description:
    • Have you ever wanted simple but accessible dropdown navigation on your Drupal website? There’s a module for that.
  • Module name/project name:
  • Brief history
    • How old: created in Nov 2022 by Jay Huskins of Redfin Solutions
    • Versions available: 2.1.5 which works with Drupal 9 and 10
  • Maintainership
    • Actively maintained, most recent commit is less than a month ago
    • No Test coverage at this point
    • Documentation - via README.md
    • Number of open issues: 2, neither of which are bugs
  • Usage stats:
  • Maintainer(s):
    • Jay Huskins, with support from Redfin
  • Module features and usage
    • Provides a new menu block that includes markup for disclosure buttons, that make it easier for users on assistive devices to navigate drop-down menus
    • Activating the button will toggle the visibility of nested menu items
    • Also includes ARIA labels to provide clarity around what the buttons do
    • Worth mentioning that Drupal’s Olivero theme also includes disclosure buttons in its mWe’ll also cover Disclosure Menu as our module of the week.
    • Guest Introenus, but there isn’t a straightforward way to pull the menus implemented there into your custom theme
    • Also had a write-up in the Drupal advent calendar we talked about last month, so listeners can also check that out if they want more information
Jan 29 2024
Jan 29

Introduction

The demand for marketing automation has surged significantly in recent years. As per the Marketing Automation Report 2021, organizations leveraging marketing automation solutions witness an impressive 80% increase in lead generation.

The statistic shows how marketing automation is critical in optimally implementing effective strategies and generating leads. 

Marketing automation empowers organizations to leverage customer data, launching targeted campaigns that provide meaningful customer experiences and guide them through the conversion funnel.

Explore further insights into marketing automation and its potential impact on your business.

Marketing Automation Report

What Is Marketing Automation?

Marketing automation helps organizations reach customers with automated messages across various channels, such as websites, social media, emails, and text messages. This seamless approach creates impactful customer journeys, converting potential customers into clients.

Within Customer Relationship Management (CRM), marketing automation is a crucial tool predominantly utilized by marketing departments to eradicate repetitive tasks, enhancing overall marketing efficiency.

Organizations often deploy marketing automation tools to maximize efficiency, collectively forming the MarTech stack. This integrated stack proves to be instrumental in driving lead generation through strategic social media campaigns and targeted email marketing.

How Does Marketing Automation Work?

Understanding how marketing automation works is essential for businesses to streamline their marketing efforts and enhance customer engagement. This transformative approach involves leveraging technology to automate repetitive tasks, allowing marketers to focus on strategic aspects that drive results.

Key Components of Marketing Automation:

  • Data Collection:
    Marketing automation begins with collecting relevant customer data across various touchpoints, like demographics, behaviors, and interactions.
  • Customer Segmentation:
    The collected data is then analyzed to segment customers based on shared characteristics. This segmentation allows for personalized and targeted communication.
  • Campaign Design:
    Marketers design targeted campaigns based on customer segments. These campaigns could include email sequences, social media posts, or personalized content tailored to specific audience groups.
  • Multi-Channel Automation:
    Marketing automation operates across multiple channels, such as email, social media, websites, and more. Automated messages are deployed strategically to reach customers through their preferred communication channels.
  • Lead Scoring:
    Automated systems assign scores to leads based on their interactions and engagement levels. This helps prioritize leads and identify those more likely to convert.
  • Personalized Content Delivery:
    Marketing automation delivers personalized content to customers at the right time. The content types include product recommendations, promotional offers, or educational content.
  • Analysis and Optimization:
    Continuous analysis of campaign performance is integral to marketing automation. Marketers assess key metrics, such as open, click-through, and conversion rates, to refine and optimize future campaigns.

Exploring Features of Marketing Automation Software

Marketing automation software is instrumental in handling various aspects of marketing campaigns, utilizing data analytics to craft highly personalized content that boosts revenue and engagement. Artificial Intelligence (AI) applications, including chatbots, play a role in automating information delivery and guiding users to web pages to drive sales or gauge interest.

These tools also facilitate customer satisfaction surveys and collect product usage feedback, fostering continuous organizational improvement. Other notable features include:

  • Inbound Marketing:
    Attracting prospects through valuable content to establish credibility and guide them through the sales funnel.
  • Account-Based Marketing (ABM):
    Targeting specific high-value accounts with tailored communication to key decision-makers.
  • Lead Management:
    Efficiently tracking and nurturing leads to ensure seamless progression through the sales funnel.
  • Campaign Management:
    Streamlining the planning, execution, and monitoring of marketing campaigns for optimal performance.
  • Marketing ROI (Return on Investment):
    Measuring the return on investment for each campaign through robust tracking mechanisms.
  • Social Marketing:
    Integrating social media capabilities to automate campaigns, schedule posts, and analyze social engagement metrics.
  • Targeting and Segmentation:
    Excelling in targeting specific audiences through segmentation based on demographics, behaviors, and preferences.

These features collectively empower marketers to navigate the intricacies of modern campaigns, from data-driven insights to personalized engagement, enhancing the overall efficiency and effectiveness of marketing strategies.

Types Of Marketing Automation

The realm of marketing automation encompasses various types designed to address specific business environments and target audiences. Two significant categories are B2B Marketing Automation and B2C Marketing Automation.

B2B Marketing Automation

Traditionally, the focus of marketing automation has centered on the business-to-business (B2B) sector. This emphasis is rooted in the unique characteristics of B2B prospects, constituting a small, focused target market involved in multi-stage procurement processes or maintaining ongoing relationships with organizations.

In the B2B landscape, marketing automation places a crucial emphasis on education and awareness building. Unlike the B2C sphere, where purchase decisions can be impulsive, B2B decisions are rational and involve multiple stakeholders. This extended decision-making process, spanning weeks to months, underscores the necessity for a composable architecture to nurture leads effectively.

The optimal use of the marketing automation platform in the B2B context necessitates a comprehensive understanding among marketers and stakeholders. Shamir Duverseau, Co-Founder of Smart Panda Labs, provides insights into these challenges in a recent episode of DXP Deconstructed with Prateek Jain.

[embedded content]

 

B2C Marketing Automation

In contrast, B2C marketing automation caters to individual consumers rather than businesses. This category requires a heightened focus on personalization and data-driven decision-making to resonate with direct customers.

Within the B2C realm, marketing efforts must be finely tuned to align with the personal preferences and behaviors of end-users. The decision-making process in B2C scenarios is often more impulsive, necessitating agile and responsive automation strategies.

B2B vs B2C Marketing Automation

Benefits of Marketing Automation:

  • Time Efficiency:
    Automation reduces the time spent on repetitive tasks, allowing marketers to focus on strategy and creativity.

  • Improved Lead Nurturing:
    Automated workflows nurture leads through the sales funnel, providing relevant content and information at each stage.

  • Enhanced Personalization:
    Customer data enables highly personalized communication, increasing the relevance of marketing messages.

  • Data-Driven Decision-Making:
    Marketing automation platforms provide valuable insights, enabling data-driven decision-making for future campaigns.

Benefits of Marketing Automation

What Marketing Automation Can Do For Your Business

According to the Marketing Automation Report 2021, 91% of organizations assert that marketing automation is indispensable for their business. This widespread acknowledgment is attributed to the myriad benefits marketing automation brings:

Create Personalized Customer Journeys:

Marketing automation software plays a pivotal role in collecting customer data, enabling robust personalization. This results in tailored customer journeys where personalized content is strategically delivered to assist potential customers in overcoming specific barriers to purchase.

Effectively Target Leads:

The wealth of customer data gathered through marketing automation software, integrated into a Digital Experience Platform, empowers organizations to target potential customers with the most relevant content precisely. This ensures that each lead is nurtured down the funnel until conversion.

Identify Strong Leads:

Marketing automation software simplifies the lead scoring process, assessing the likelihood of a lead purchasing a product or service. Points are assigned for each action a lead takes, and upon reaching a predefined total, the lead is seamlessly handed over to the sales team.

For instance, leads exhibiting high engagement like opening all emails, signing up for webinars, and visiting a landing page, may be classified as warm, while sporadic engagement may categorize a lead as cold.

Cold Lead Vs Warm Lead

Segment Customer Base:

Marketing automation platforms facilitate easy segmentation of the customer base, enabling targeted strategies for different groups. Marketers can enhance customer relationships by segmenting based on location, pages visited, and buying preferences.
For instance, an accountancy firm might tailor its strategy based on a visitor's interest in tax, year-end accounts, or payroll services.

Higher Conversion Rates:

Automation-driven marketing campaigns generate clean customer data, simplifying the process of identifying and re-targeting leads. Precision in targeting leads increases the likelihood of successful sales by delivering tailored offers to the right contacts.

Better Employee Productivity:

Employees are liberated from manual and repetitive tasks by embracing marketing automation solutions. This empowerment allows marketers to redirect their focus toward strategic initiatives that drive more leads and sales, fostering overall productivity.

Drive and Optimize Revenue Growth:

Marketing automation bridges the gap between sales and marketing teams, optimizing campaign expenditures and accelerating the generation of marketing-qualified leads. It empowers marketers to guide prospects through the buying journey, easily identifying the most effective campaigns and strategies, thereby streamlining revenue growth.

Improve Customer Retention:

Marketing automation supports loyalty programs and other retention strategies, fostering brand loyalty. It also opens avenues for upsell and cross-sell opportunities, building enduring and robust customer relationships.

A Short Tale: How Axelerant Helped Implement A Marketing Automation Platform For Franklin Madison

Franklin Madison is an industry pioneer with over 50 years of experience facilitating insurance products and marketing service administration. The organization wanted to re-engineer its platform due to missing functionalities like lack of automation, navigational inconsistencies, limited CMS capabilities, and limited scalability.

Axelerant aligned with the Franklin Madison team on their short-term and long-term vision by taking a hyper-collaborative approach. The experts at Axelerant helped engineer a digital platform that unifies Franklin Madison's Service Experience and Marketing Automation by using Drupal CMS, Acquia Site Studio, and Acquia Campaign Studio.

As a result, Franklin Madison now has a fast-performing platform built for scalability. The platform's responsiveness enables intuitive content authoring, reduces the time to create new microsites, and enables custom feature development within minutes.

Axelerant Case Study

Essential Tips for Crafting a Successful Marketing Automation Strategy:

  • Define Clear Objectives: Clearly outline specific and measurable goals for your automation efforts.
  • Understand Your Audience: Segment your audience based on demographics and preferences for personalized communication.
  • Map the Customer Journey: Identify touchpoints and interactions at each stage to create targeted automation workflows.
  • Integrate with CRM: Ensure seamless integration with your CRM system for improved collaboration and efficiency.
  • Start with Simple Automation: Begin with basic processes, gradually expanding as you gain insights and experience.
  • Create Compelling Content: Develop engaging content tailored for each customer journey stage.
  • Implement Lead Scoring: Prioritize high-value leads by assigning points based on interactions and behaviors.
  • Regularly Update Your Database: Maintain a clean and updated database for accurate targeting and improved performance.
  • Foster Collaboration: Encourage collaboration between marketing, sales, and customer support teams for valuable insights.
  • Monitor Key Metrics: Continuously analyze KPIs such as click-through and conversion rates for optimization.
  • Implement A/B Testing: Experiment with variations to identify the most effective elements for your audience.
  • Stay Compliant: Ensure compliance with data protection regulations and obtain consent for automated campaigns.

How You Can Get Started With Marketing Automation

Implementing a successful marketing automation platform is a crucial step for organizations aiming to harness the benefits and capabilities of marketing automation.

But how can organizations initiate and navigate this process effectively? Here's a step-by-step guide:

Steps of Marketing Automation

Step 1: Know Your Sales Process

Understanding how marketing automation aligns with your sales process is foundational. Tailor your approach based on the nature of your sales cycles. For instance, businesses with extended sales cycles can automate multiple interactions, while those with shorter cycles may leverage automation for activities like abandoned cart emails or promotion updates.

Step 2: Know Your Customers

Central to marketing automation is the creation of meaningful customer journeys. Gain a deep understanding of your customers, their preferences, and touchpoints with your products and services. This knowledge forms the basis for crafting personalized and effective automation strategies.

Step 3: Define The Strategy

Craft a comprehensive marketing automation strategy by mapping the customer journey at each funnel stage. Ensure that stakeholders fully comprehend customer needs before implementing any strategy. This strategic foundation is vital for effective automation implementation.

Step 4: Create The Required Collateral

Develop high-quality marketing collateral, including blog posts, videos, and eBooks, for customers to interact with. Allocate time to create compelling content and establish a consistent publishing schedule to engage your audience effectively.

Step 5: Keep Everyone In Loop

Successful marketing automation relies on collaboration across teams and departments. Communication is key – sales teams must convey the types of leads they require, and customer support can provide valuable insights into customer challenges. This cross-functional input enriches the automation strategy.

Step 6: Implement And Test

Execute the marketing automation strategy and conduct thorough testing to ensure all components function as intended. Leverage metrics such as click-through rate, time on page, conversion, and open rates for analysis. Implement A/B testing to discern the effectiveness of different marketing efforts and fine-tune the strategy accordingly.

By following these steps, organizations can set a solid foundation for their marketing automation endeavors, ensuring a seamless integration that maximizes efficiency and drives optimal results.

Exploring the Landscape of Marketing Automation Tools and Their Capabilities

In the ever-evolving marketing realm, automation tools are indispensable assets, revolutionizing how businesses engage with their audience. These tools are designed to streamline and enhance marketing processes, offering many capabilities that empower organizations to achieve greater efficiency and effectiveness.

Diverse Functionality:
Marketing automation tools encompass various functionalities, from data analytics to campaign management. These tools leverage advanced algorithms and artificial intelligence to automate repetitive tasks, giving marketers more time to focus on strategic initiatives.

Personalization at Scale:
One of the standout capabilities of these tools is their capacity for personalization at scale. By harnessing customer data, marketers can tailor messages and content to specific segments, creating highly personalized experiences that resonate with individual preferences and behaviors.

Lead Nurturing and Scoring:
Marketing automation tools are pivotal in lead nurturing and scoring. They enable the systematic tracking of leads throughout the customer journey, assigning scores based on interactions. This process identifies strong leads and facilitates targeted and timely engagement to guide leads through the conversion funnel.

Multi-Channel Engagement:
In an era where consumers interact across various channels, marketing automation tools excel in providing a unified approach. Whether through email, social media, or websites, these tools ensure cohesive and synchronized communication, delivering a seamless experience to the audience.

Data-Driven Decision-Making:
These tools thrive on data analytics, offering marketers valuable insights into campaign performance, customer behavior, and overall effectiveness. This data-driven approach empowers informed decision-making, allowing organizations to refine strategies and optimize future campaigns.

Campaign Optimization:
From inception to execution, marketing automation tools contribute to optimizing marketing campaigns. They facilitate A/B testing, enabling marketers to experiment with different elements and tactics to identify the most effective approaches for their target audience.

Integration with CRM Systems:
Many marketing automation tools seamlessly integrate with Customer Relationship Management (CRM) systems. This integration ensures a unified approach to customer interactions, aligning marketing and sales efforts for a cohesive customer experience.

Scalability and Flexibility:
Marketing automation tools offer scalability and flexibility as businesses grow and evolve. They adapt to changing needs, accommodating increased data volumes, expanding campaigns, and incorporating new technologies to keep pace with the dynamic landscape.

Empowering Marketers:
Ultimately, marketing automation tools serve as invaluable allies for marketers. By automating mundane tasks, providing in-depth analytics, and fostering personalized interactions, these tools empower marketers to drive results, enhance customer experiences, and confidently navigate the complexities of the modern marketing landscape.

The Evolving Landscape of Marketing Automation: Future Trends

As we progress, the horizon of marketing automation is set to expand, ushering in a new era of capabilities. Technological advancements, particularly in Artificial Intelligence (AI), will play a pivotal role in amplifying the potential of marketing automation. AI-driven solutions will empower organizations to delve deeper into data, enabling marketers to make informed decisions grounded in logic while simultaneously eliminating manual tasks.

Simultaneously, the capabilities of Customer Relationship Management (CRM) systems will undergo continuous evolution, aiming to ensure seamless customer engagement. This evolution is poised to impact the overall buyer experience profoundly. Integrating composable solutions will emerge as a key strategy, allowing organizations to construct a comprehensive view of their customers.

Curious about the forthcoming trends in marketing automation? Connect with the experts at Axelerant for insights and guidance as we navigate the exciting future of automated marketing solutions.

Jan 26 2024
Jan 26

Aegir is a hosting system built in Drupal, for Drupal.

It lets you easily create new Drupal sites and create databases, filesystems, virtual hosts etc. for the sites. You can manage hundreds or thousands of sites using a simple Drupal based UI. As simple as you would manage a list of 100 blog posts, you can manage 100 Drupal websites.

Currently the latest released version of Aegir is: Aegir 3.

Aegir 3 relies on Drush 8, which means it can work with: Drupal 7; Drupal 8 and Drupal 9. But not Drupal 10. Oh.

I have need for it to work with Drupal 10. Specifically we have a large collection of Drupal sites, that currently Drupal 9, but ready and waiting to jump to Drupal 10. Yes, we've left it too late, we should have done this a long time ago, but we are where we are.

I've spent the day looking into various options, they are roughly:

  • Move to BOA
  • Get Aegir 3 to work with Drupal 10
  • Move to Aegir 4
  • Move to Aegir 5
  • Move to something else

My terms of reference

I'm looking for a solution that changes as little as possible in the current stack. We've got a big, beefy server, and lots and lots of Drupal sites on it. The Drupal sites themselves run fine and we're after the management of them really. We don't need to scale out particularly, and if we do, we've got options on the hardware side vertically. We also don't need some fancy multi-datacenter approach, and ideally keep with our Nginx, Varnish and Apache sandwich.

I do want to manage things in the old school way, but I need a few, select, non-technical users to be able to manage the sites in a friendly UI like Aegir's hosting system.

Lots of the new hotness out there are essentially orchestrating Kubernetes, and that's great, but I don't actually want 100 containers all running PHP which is how I understand all of these systems would essentially function.

I used to be an Aegir maintainer, and I have a deep knowledge of how Aegir works and even helped write some of the inter-process communications stuff in Drush 8. 

Move to BOA

The first option is one that has shown to be working, and requires a custom fork of Drush 8, some core patches and using BOA. BOA is quite an aggressive fork of Aegir, and I'm not sure I want all the changes and whatnot that comes with it. I think I have to discount it, because the last time I looked there would simply be too much change on the nginx side of things at least, and it was doing all kinds of things I don't simply understand and thus won't be able to reason about.

The main inspiration I take from BOA is that they've got it working! Well, they've got something working. It looks like they've essentially forked Drush 8, applied some Drupal core and Aegir patches. This makes it so that Aegir can still use it's aliases, code and talk to Drupal 10 sites. How they've been able to do this is very impressive indeed. I feel like it's just a matter of time before it breaks though, surely Drupal 10 is going to change something in it's lifecycle and cause issues. I don't quite see how this can work with Drush commands in contrib modules. For example, during deployments on our sites we revert features, but that's a features module provided Drush command, which won't be callable from Drush 8 in Drupal 10.

Get Aegir 3 to work with Drupal 10

This I feel is the least effort option. Find some way to get standard Aegir 3 to communicate with Drupal 10. Now, Drush 8 can't directly bootstrap a Drupal 10 site. Aegir 3 uses Drush 8 to be both the backend storage for all the data about the sites to host, and to bootstrap the sites it manages.

This worked really well in the Drupal 5/6/7 days, and just about coped with Drupal 8/9, but hasn't for Drupal 10. Think of it this way, what if instead of hosting a Drupal site, it was a Wordpress site? Aegir simply wouldn't be able to neatly bootstrap into a Drupal site and do it's stuff. It's the same with Drupal 10.

How much stuff does it really do though? I'm not 100% sure. I know that it gets the currently installed packages for example, but what else does it do. It looks to me like it often hands off a Drush subprocess do the heavy lifting. Maybe we can hand off to another subprocess, one that runs a site-local Drush 12+ instance, passing in all the options it needs to bootstrap and run the actual commands on the site.

Please, if this is a completely crazy way to go, someone please comment and let me know!

Move to Aegir 4

So there is a 4.x branch of Aegir, and apparently it can work with Drupal 10 sites. It does this by replicating the aliases to YAML files and then running a global Drush 11, which can then bootstrap the Drupal sites. Apparently it also has replaced some of the Drush invocations with standard process invocations. I guess it had to do this because the Drush to Drush process communication stuff was in Drush 8 and got removed.

It seems like Aegir 4 also brought in a lot of other changes too, and that's not particularly something I want or need. Also, it's never been officially released/tested by the community etc.

Move to Aegir 5

This got announced in a few blog posts a while back, and I've not heard anything since. It's possible that it's there and ready to go, but as far as I understand it, it's a whole change to how the sites would be managed and hosted, and while an import from Aegir 3 is on the roadmap, it seems like it would import the sites into something completely different, not some simple vhosts and a DB server.

Also, even if it does exist, it'll have had minimal testing and eyes on it.

Move to something else

I think this is my preferred long-term option. These sites don't really need Drupal. They could actually be static sites plugged into a central content repository. That would drastically simplify lots and lots of things. Or we keep the Drupal sites, but move them to Kubernetes and using something like Amazee's Lagoon to host them etc. This would be very cool, but probably quite expensive in terms of having enough resources to host all the containers.

One for the long term future I think.

Get Aegir 3 to work with Drupal 10

I might give this a go in that I think what I can do is this:

  1. Get Aegir running normally.
  2. Install a Drupal 9 site.
  3. Get a single Aegir task running that doesn't bootstrap the Drupal 9 site with Drush 8. I'm thinking something like getting the one-time login link. This has data flowing in both directions, and I think, Drush 8 trying to bootstrap Drupal to the run the provision command. Getting this working would involve calling a site local Drush based on the data from the alias, but not actually using the alias.
  4. If that works, put something into settings.php that throws an exception if Drush 8 is detected, and then try to get everything else working for my use-cases.
  5. Then try and set up a Drupal 10 site.

I'd love to know your thoughts on this. Do you have an old Aegir running sites, and you don't know what to do with it? Or do you think I'm crazy and want to offer me a better way to go, use the comments below, please!

Updates/notes

So looking at the provision commands, the actual provision command to say, get the one-time login link bootstraps the Drupal site. So that would need to change that command so that it no-longer bootstrapped Drupal at all, but instead changed to be a pure Drush command. Then it could load the data from the alias etc.
I'm tempted to go ahead and get a dev instance of Aegir running and the add a new Drush command, that doesn't bootstrap Drupal, but does attempt to grab data from an alias and see what I can do. That possibly an even simpler proof of concept, as it's an entirely new Drush command, but one I then know could be called by provision's task runner instead of the current one.

Further updates

So that approach did seem sort of promising, but also, a decent amount of work. I decided to re-investigate the approach that Omega8cc advised, a custom version of Drupal 8 and then a platform of Drupal 10 code with some modifications shall we say. It worked. It has some rough edges, but I'm going to see if we can get the required bits and pieces into the mainline of Aegir 3.

Jan 26 2024
Jan 26
The Web ChefsThe Web Chefs

At Four Kitchens we keep several lists of “Hot Topics” to share our learnings across the dozens of sites that we care for. Are you upgrading a Drupal site to CKEditor5? We’ve tidied up one of these internal wiki documents into this set of general upgrade guidelines that might pertain to your website.

Rough steps to upgrade

The level of effort needed for this upgrade will be different for each site. It may take some time to figure out. CKEditor 5 is available in Drupal 9.5 and beyond. You can try switching/upgrading on a local site or multidev and assess the situation.

First, create a list of CKEditor enhancement modules on the site and check if they are Drupal 10 ready (the reports from Upgrade Status and this Drupal.org page may help). Common modules to look for include Linkit, Anchor Link, Advanced Link, IMCE, Entity Embed, Video Embed Field, Footnotes, and anything with the word “editor” in the title.

As a best practice, you should test both the creation of new content, and editing existing content in several places. This will help make sure that some lesser used HTML isn’t treated differently in the new CKEditor. Run visual regression tests (if available).

You may need to point out key interface changes to your clients or stakeholders (e.g., contextual windows for links/media/tables instead of modals, etc.). While it is a bit of a change, it’s overall an improved user experience, especially for new people who are coming in cold.

Anchor links

Anchor link gives editors the ability to create links to different sections within a page.

For “better integration with Drupal 10, CKEditor 5, and LinkIt” there is a 3.0.0@alpha version. If your project isn’t using wikimedia/composer-merge-plugin, you must require northernco/ckeditor5-anchor-drupal package and add the following to the repositories section of composer.json:

{
	"type": "package",
  "package": {
      "name": "northernco/ckeditor5-anchor-drupal",
      "version": "0.3.0",
      "type": "drupal-library",
      "dist": {
          "url": "https://registry.npmjs.org/@northernco/ckeditor5-anchor-drupal/-/ckeditor5-anchor-drupal-0.3.0.tgz",
          "type": "tar"
      }
  }
}

Issue

Branch

Embedded media

Depending on the age of your site, it might be using one of several techniques to embed media into the WYSIWYG:

If your site is using the video_embed_field module (most sites are probably using Drupal core’s media module), there is a patch that adds support for CKE5. Insert Image works slightly different (though this is probably not the case if your site uses core’s media module). It’s worth considering if there is a way to enhance this for user experience, if necessary.

If your site uses custom Entity Embed for media, consider switching to the core media library. It may provide a better administrative user experience in some cases.

The insert image button in CKEditor functions a little differently than it used to. Rather than bringing up a modal with fields to upload an image like the image below:

Insert image button in CKEditor5

It now immediately pulls up your computer’s file system for you to search for images like so:

Filesystem image search in CKEditor5Filesystem image search in CKEditor5

After adding your image, the alt tag box prompts you underneath the image:

CKEditor5 alt tag promptCKEditor5 alt tag prompt

After submitting your alt tag, you can adjust alignment and sizing:

CKEditor5 image sizingCKEditor5 image sizing

Moving general styles to link styles

It was common in CKEditor4 to use its “Styles” feature to provide a way to add variations of links (to make them look like buttons, or to add icons).

There are a few UX problems with that approach. Either the styles are set to apply on , which means that they can be applied to non-links, or the styles are set to apply on , which means that they are mysteriously grayed out most of the time (until you select a link). Either way, it’s not intuitive how to apply a link style. In CKEditor5, we can switch to using the Link Styles module.

Change in Styles dropdown behavior

In CKEditor4, when integrated with Drupal, the Styles dropdown only allowed applying one style to an element (e.g., “external link”). If you tried to apply a different style, such as “locked link,” the previous style would be removed.

The Drupal implementation of CKEditor5 allows for multiple styles to be applied to elements via the Styles dropdown. This change may be unexpected for some, and could result in elements that look broken, such as when a link has both the “external link” and “locked link” styles.

CKEditor5 introduced a new API for adding theme-specific styles. The new architecture might cause the CKEditor5 theme to bleed into the admin theme. To know how to deal with these issues, review new API for adding theme-specific styles in CKEditor5.

You’ll likely run into an issue with styles bleeding outside of the editor, so see the other section within this page.

Cut and paste

Paste-from-Word, paste-from-Google-Docs, etc. is now built-in to CKEditor5. (At least for 90% of use cases.) There’s a paid plugin for more esoteric needs.

There is no paste-as-plain-text plugin for CKEditor5. You can use Ctrl-Shift-V (or Cmd-Shift-V) to paste as plain text. If you want to get rid of all formatting (including bold, links, etc.) in existing text, you can highlight the text, use Ctrl-C to copy, then Ctrl-Shift-V to paste it back as plain text.

Many of our Behat automated test broke after the update because there were multiple structural changes, so this is how we solved it: First, here is the doc about how to get the editor instance in case you want to know more about it. This is how we rewrite our custom step to fill out the CKEditor during testing. (We found the code in an article post-post).

/**
   * A step to help fill in a ckeditor wysiwyg.
   *
   * @param string $locator
   *   The css locator of the field that ckeditor has taken over.
   * @param string $value
   *   The html value you wish to fill in to ckeditor.
   *
   * @Then I fill in wysiwyg on field :locator with :value
   */
  public function iFillInWysiwygOnFieldWith($locator, $value) {

    // https://ckeditor.com/docs/ckeditor5/latest/support/faq.html#how-to-get-the-editor-instance-object-from-the-dom-element
    $ckeditor5_drupal_editable_element = "div.form-item-$locator .ck-editor__editable";

    $this->getSession()
      ->executeScript(
        "
        var domEditableElement = document.querySelector(\"$ckeditor5_drupal_editable_element\");
        if (domEditableElement.ckeditorInstance) {
          const editorInstance = domEditableElement.ckeditorInstance;
          if (editorInstance) {
            editorInstance.setData(\"$value\");
          } else {
            throw new Exception('Could not get the editor instance!');
          }
        } else {
          throw new Exception('Could not find the element!');
        }
        "
      );
  }

and the mink step for regular field:

And I fill in wysiwyg on field "field-summary-0-value" with "Some Teaser Text"

And for a field inside a paragraph:

And I fill in wysiwyg on field "field-sidebar-content-0-subform-field-simple-text-0-value" with "Behat Side Nav Body Text"

Preventing custom styles from bleeding into admin theme with CKEditor5

See the new API documentation about implementing theme styles in the new way. This may require some adjustments on your end.

One of the major changes with CKEditor5 is that it pulls WYSIWYG styles onto the whole page when there is a WYSIWYG on the page. In CKEditor4, styles were only pulled into the CKEditor iframe. This can be extremely frustrating when the admin theme looks odd or different on pages that contain a WYSIWYG.

Limit the number of stylesheets being pulled into the WYSWIYG. (First, note that this method has only been confirmed to work on newer versions of Sous using specific webpack settings. If you are having problems with it, make sure your webpack settings allow for multiple manifests to be generated. You may need to refer to a newer site to see how it is configured.)

The first step is to create a new stylesheet (a manifest) called wysiwyg.scss in the same directory as your styles.scss file, which assembles all the stylesheets used in your theme. For this stylesheet, we’ll only want to include the stylesheets that our WYSIWYG needs. For example, I have one that looks like this:

@import url('https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,400;0,700;1,400;1,700&display=swap');
@import '~normalize.css/normalize';
@import '~breakpoint-sass/stylesheets/breakpoint';

// Components
@import '00-base/**/*.scss';
// Include all atoms except form items.
@import '01-atoms/00-links/**/*.scss';
@import '01-atoms/01-text/**/*.scss';
@import '01-atoms/02-lists/*.scss';
@import '01-atoms/tables/*.scss';
@import '01-atoms/images/**/*.scss';
@import '05-pages/colors.scss';
@import '05-pages/base.scss';

In this example, we are pulling in a couple needed files from node_modules (normalize and breakpoint), and then any .scss files from base, and then select files from atoms (links, text, lists, tables, and images).

Compile and make sure that it has created the new files at /dist/css/wysiwyg.css. If you get any errors, you may need to include another file that has a variable you need, or something along those lines.

1.) Update your .info file In your theme’s .info file, set CKEditor5 to use your new stylesheet:

ckeditor5-stylesheets:
  - dist/css/wysiwyg.css

2.) Review the WYSIWYG. Visit a page with a WYSIWYG on the page, and verify that the limited styles are loading properly within the WYSIWYG. Try all the dropdowns and buttons that are included in the WYSIWYG settings. If anything appears unthemed, review your styles to see if there’s a stylesheet missing from your manifest.

3.) Review the rest of the page. Now review the page around the WYSIWYG and note how if differs from other pages that do not have a WYSIWYG. Common differences to look for are: heading styles, text styles, buttons — basically anything that you included in your manifest.

4.) Limit styles

  • Find the page’s body class for node edit pages (in our test case, .gin--edit-form). It may depend on your admin theme.
  • Find the wrapper class for the WYSIWYG. Most likely the best choice is .ck-content. Our approach will be to hide styles from .gin--edit-form, but then add them to .ck-content.

For example:

body {
  background-color: clr(background);
  color: clr(text);

  @include body-copy;
}

becomes:

body:not(.gin--edit-form),
.ck-content {
  background-color: clr(background);
  color: clr(text);

  @include body-copy;
}

And for buttons:

.main .button {
  @include button-base;
  @include button-color-primary;
  @include button-medium;
}

it becomes:

body:not(.gin--edit-form) .button,
.main .button,
.ck-content a.button {
  @include button-base;
  @include button-color-primary;
  @include button-medium;
}

With any luck, the styles used apply mixins, which makes it easy to filter out where to apply the styles. In some cases, the overriding of styles may become hard because of the order in which the stylesheets are loaded. Try to avoid !importants and instead use things like an additional element or class to firm up your override.

One issue that may come up is your overrides here end up overriding things in your custom theme, depending on how they are defined. In this case, don’t wrap the styles in the body classes, but rather undo the custom theme’s style on the admin page items manually. Luckily, since we’re narrowly applying custom styles, only things used in the WYSIWYG will need to be addressed.

For instance:

// Apply general link styles to all links.
a {
  @include link;
}

// Overrides for Admin pages containing CKEditor (you will need a body class only on admin pages).
.user-logged-in {
  a {
    background-image: none;
    transition: none;
  }

  .horizontal-tabs-list a,
  .toolbar a {
    font-weight: normal;
  }
}

// Reapply link styles to links within the WYSIWYG
.ck-editor a {
  @include link;
}

Continue to review your page and adjust it until it no longer differs from other admin pages.

Editor explodes out of its container in deeper paragraphs

This issue seems to occur only with rich text fields within a paragraph. It might be limited to the Gin theme.

This issue might be because of the container’s width. If input fields inside the container have a specified size exceeding the screen width, it can lead the editor to inherit the container’s width, extending beyond the screen. You can see this as a Drupal Core/CKEditor5 bug in Drupal.org: CKEditor5 toolbar items of multivalue field (typically Paragraphs) overflowing on narrow viewports and overlapping with node form’s sidebar on wide viewports.

To resolve this quickly, set the input fields to 100% width, making sure everything works seamlessly. Be sure to include this in a stylesheet of your admin theme.

.node-form input[size] {
  width: 100%;
}

We can also modify the ‘flex-wrap’ property of the CKEditor buttons to make sure they stay within the container’s width:

.ck-editor .ck.ck-toolbar.ck-toolbar_grouping > .ck-toolbar__items {
    flex-wrap: wrap;
}

Additional resources

Making the web a better place to teach, learn, and advocate starts here...

When you subscribe to our newsletter!

Jan 26 2024
Jan 26

We all know such an effective and common way of demonstrating content as a slideshow. Similarly, visual content was shown even before the invention of computers on ancient mechanical devices that used slides. This is where the name comes from.
But, sometimes, a simple carousel of pictures is boring. Today, the Drupal web development agency tells you how to add slideshows using Drupal views effectively and creatively.

About the Drupal Views module

The Drupal Views module is a very convenient tool. You can create slideshows from various types of visual and text content. The controls are pretty simple, but many users do not thoroughly study the module and are unaware of many useful functions. Using a comprehensive list of features and a creative approach to creating slideshows can increase the audience's interest and the time spent on the site.
You can create sliders from different types of content, not just images. This could include carousels of videos, blog posts, comments, and reviews. The module consists of a base/plugin system/API and a module implementing that base. However, advanced users can create their own implementations.

How Slideshows Impact Your Core Web Vitals

Standard, primitive methods for creating slideshows sometimes do not bring the desired effect. Let's talk about how effective, creative slideshows impact your website's performance. So, this helps keep the user on the page longer, which is always essential. Also, the percentage of exits from a website in the first 15 seconds decreases, which is another significant indicator. But there are a few pitfalls here.
One of the most important aspects is page loading speed. This largely depends on optimization and also on the hosting plan you choose. If you manage to create attractive, unusual, personalized slideshows while the website loads quickly, the user will definitely like it. Another critical point is information content. The slideshows you create on your website should be on topic, explain key issues, and redirect the user to more information.

What Are Slideshows Good for?

Visual content in the form of slideshows is used everywhere, so it is difficult to say what type of sites it is not suitable for. A slideshow can be used for a landing page for the sale of goods or services, for a small business website, for a landing page, or for a company website. The only difference is in approaches and creativity. You can select the most optimal solutions for different types of sites and create the kind of slideshow that will best convey information to the user.

Exploring the Different Website Slider Types

There are many slideshows using Drupal, and now we will briefly describe the main ones:

  1. Horizontal carousels of pictures. You can scroll through These horizontally placed images and view each photo. A universal solution that is familiar to everyone. Here, choosing the right type of carousel for specific tasks is important. In this case, simplicity and efficiency will work for you.
  2. Video sliders. A carousel that uses videos instead of pictures. Where to apply? One of the most obvious options is, for example, a musician's website. But this could also be a company website where a video carousel is used for a live demonstration of products or services.
  3. Text sliders. These sliders use text instead of images—an excellent solution for displaying customer reviews.
  4. Multilayer sliders. For this purpose, Drupal has the Layer Slider plugin. After installing the plugin, you will be able to use more than 200 2D & 3D transitions, images, and even videos.
  5. The thumbnail slider is a universal solution. It can be used to display products or photographic works; the scope of application depends on your imagination. It is a carousel of thumbnails; a large image opens when you hover over a thumbnail.
  6. Hover Gallery. When you hover over an image in the gallery, a transformation occurs. For example, an additional darkened layer with text appears. It can be used, for instance, as a button to go to a website page or display brief information about the product.
  7. Carousel of 3D images. The images are arranged in a specific order, for example, in a circle. The user can rotate the circle and select a particular image to view.

 Top 5 Drupal modules for creating carousels & slideshows in 2023

To create a slideshow in Drupal, you need modules and plugins. Drupal Views is not the only solution. There are many such modules and plugins; now we will look at the 5 most effective in 2023.

  • Layer Slider - we have already mentioned this plugin above. It is excellent for various tasks, has over 200 2D & 3D transitions, is suitable for pictures and videos (YouTube & Vimeo), and has many settings. You don't need to specifically adapt the slider for smartphones, tablets, and computers; Layer Slider does it independently.
  • Nivo Slider is a module from Ukrainian developers with fantastic transition effects. It is considered the most popular worldwide and has more than 3,000,000 downloads. It doesn’t have many settings, but simultaneously, the module is as versatile and adaptive as possible.
  • The 3D Views Carousel module is a popular tool for creating 3D image carousels. 
  • PhotoSwipe is a convenient solution for creating various image galleries. It could be a thumbnail slider, zoom, or another type of carousel, and the choice is yours.
  • To use the Bootstrap Image Gallery module, you must have a base Bootstrap theme. The slideshow can consist of images or videos; there is a full-screen mode and various transition effects. The module is adapted for computers and mobile devices and is an extension of Blueimp Gallery, a customizable gallery of images and videos.

Contemporary trends in slideshow creation

Modern solutions in creating sliders, of course, include 3D carousels, animations, and transition effects. These interactive elements give you a new way to look at image carousels. Thanks to the various impacts, transitions, and animations, we can make personalized slideshows, achieve better user engagement, arouse user interest, and evoke positive reactions. Animations can be used in image galleries, carousels, and navigation icons for website pages.
Contemporary trends in slideshow creation include a creative approach. Sometimes a simple slideshow, used correctly, can attract a client, but the most modern slider with 3D animation installed in an unnecessary place will irritate. In order to understand how to use certain tools properly, you need not only imagination but also the study of modern trends. Modern design, using many convenient interactive visual elements, is always intuitive and wins the audience's approval. So, contact us for advice on using website slideshows to engage users and clients on your website!

Jan 25 2024
Jan 25

Note: This blog was first published on June 17, 2011, and has been updated to reflect new information and insights.

Takeaway: Choosing a CMS for a municipal website demands a solution that prioritizes public service, transparency, and secure citizen engagement. While both Joomla and Drupal offer powerful tools, understanding their key differences is key to making the best choice.

This guide dissects Drupal vs Joomla, comparing features, support, ease of use, and security to help you identify the ideal platform for your city's online presence.

Joomla homepage

Public information and services

Municipal websites serve as a critical bridge between governments and citizens. They offer a wealth of public information, from official documents and announcements to online forms and service portals. Choosing the right CMS for your municipal website, therefore, hinges on its ability to effectively manage and deliver this crucial content.

Joomla

Joomla is a user-friendly platform known for its intuitive interface and robust content management tools. Joomla excels at:

  • Content organization: Content managers are able to easily create clear and structured page layouts, catering to different content types like news articles, council minutes, and service pages. These can also be organized using categories and subcategories.
  • Forms and media managers: Content managers can streamline citizen interaction with online forms for service requests, applications, and feedback mechanisms. You can also choose between different kinds of form extensions depending on the capability you’re looking for. For images and files, they can be securely stored and managed using file managers for public access.
  • Multilingual capabilities: Developers can set up a multilingual Joomla site to make content accessible and inclusive to a wider range of audience.

Having users across the globe access our site meant we needed to provide support for multiple languages. Joomla has robust multilingual features built in that allow us to easily create Spanish, French, German, and Italian translations throughout our site without needing to install any extra plugins. Managing separate versions of menus, articles, and other content for each language was straightforward with Joomla's detailed control panels and translation tools. Supporting global users was seamless.

Eric Lam, Head of Business Strategy, Energy Credit Transfer

Drupal

Designed to handle complex information systems, Drupal is highly customizable and secure. Drupal shines in:

  • Easy content management: Content managers can organize and categorize information using taxonomies for easy searchability and navigation. Multiple content types can also be created by developers to make content creation faster for content managers.
  • API integrations: Connect your website seamlessly with external systems like GIS maps, online payment gateways, and data libraries.
  • Multilingual capabilities: Ensure all your constituents can easily access your information and services by enhancing your site with Drupal’s robust multilingual capabilities.

The "ideal" CMS depends on your city's specific needs and technological capabilities. Evaluate your content types, project complexity, and future growth projections to determine which platform can best manage and deliver public information in a transparent and accessible manner.

For example, Marin County Health & Human Services needed alerts, stats, and new information to be created and displayed immediately during the height of the pandemic. Using Drupal made it possible for Promet Source to help the organization display critical information in a timely manner.

Citizen engagement and transparency

Beyond providing information, municipal websites act as vital platforms for citizen engagement and fostering trust in local governance. Choosing a CMS that empowers citizens to participate actively and access government processes transparently is crucial for building a strong and connected community.

Joomla

  • Online forums: Developers can install forum extensions to create dedicated spaces for discussions and feedback on local issues, allowing residents to voice their opinions and concerns directly.
  • Community features: Joomla users can facilitate online registration for volunteer programs, neighborhood watch groups, and community events through surveys, polls, and discussion tools.
  • Social media integration: Social media platforms can be connected to Joomla for real-time updates, announcements, and interactive communication with citizens.

Drupal

  • Interactive dashboards: Content managers can present key city metrics, budget information, and service performance data through dashboard modules. This helps empower residents to understand local decision-making processes.
  • Public comment tools: Developers can implement secure and structured mechanisms for citizens to submit feedback and comments on proposed policies, ordinances, and projects through commenting and forum modules.
  • Secure e-government functionalities: Forms enable online applications for permits, licenses, and public services. This can help streamline procedures, improve accessibility, and reduce administrative burden by reducing phone calls to staff.

If your residents have a history of high civic engagement, it’s crucial that your website won’t be just there to display information (although that’s important too). For example, Martin County, Florida’s website homepage encourages their residents to perform a task on their site by frontloading their search bar and services.

Martin County, Florida website homepage

Accessibility and compliance

A truly effective municipal website is accessible to all citizens, regardless of their abilities. It should also comply with relevant regulations to avoid legal and ethical concerns. Choosing the right CMS for your municipality requires careful consideration of both accessibility features and compliance capabilities.

Joomla

  • Built-in accessibility features: Administrators can head over to the dashboard and enable the accessibility features so backend and frontend users can experience an accessible site.
  • Accessibility extension options: Joomla! also has other accessibility extensions to help your website be more compliant with WCAG standards.
  • Community resources: Joomla has a variety of documentation available on making your website accessible, such as their programmers documentation, introduction to content accessibility documentation, and accessibility standards documentation.
  • Privacy features: Joomla has privacy features created in response to GDPR, making it easier for developers and content managers to manage user data.

Drupal

  • Strict adherence to accessibility standards: Drupal core adheres to WCAG 2.0 Level AA standards, ensuring a high baseline for accessibility. Drupal is currently working to be WCAG 2.1 AA compliant.
  • Community resources: Drupal has accessibility coding standards as part of their GAAD (Global Accessibility Awareness Day) pledge, along with introductory documentation and additional resource recommendations.
  • Compliance with data privacy regulations: Drupal offers robust features and modules to comply with data privacy regulations like GDPR and CCPA. They also offer documentation on privacy.
  • Developer-friendly platform: Drupal's modular system allows developers to create custom accessibility solutions for specific needs.

Accessibility and privacy compliance are ongoing processes. Although having a great, accessible and privacy-conscious CMS from the get-go is a huge help, compliance to standards still needs actual checking by experts.

Regularly assess your website's accessibility features and update content to meet evolving standards. Investing in accessibility and compliance not only ensures inclusivity for all citizens but also demonstrates your commitment to transparency and ethical governance.

Security and data recovery

Online threats are a reality for municipal websites. Data breaches, cyberattacks, and natural disasters can disrupt critical services and erode public trust. Choosing a CMS that prioritizes security and offers robust disaster recovery options is crucial for protecting your city's online assets and ensuring website continuity.

Joomla

  • Regular updates: Joomla’s Security Strike Team releases regular security updates to patch vulnerabilities and address emerging threats.
  • Security extensions: Joomla’s extensions directory contains a wide range of security extensions to enhance protection, including firewall tools, spam filters, and malware scanners.
  • Backup options: Developers can download extensions for backup and restore functionalities. This allows for quick recovery in case of data loss, hacking, or website malfunction.

My experience with Joomla has been a testament to its robust security features. Navigating the internet requires a platform that prioritizes user safety, and Joomla excels at providing a secure environment.

Its built-in security measures and regular updates contribute to a resilient defense against potential threats. In a world where online vulnerabilities are a constant concern, Joomla's commitment to safeguarding user data and maintaining a secure ecosystem sets it apart.

It has empowered me to build and manage websites with confidence, knowing that the platform will automatically protect valuable digital assets. Joomla's security features make it a reliable choice for anyone seeking a trustworthy and safe content management system.

Perry Zheng, Founder and CEO, Pallas

Drupal

  • Robust security architecture: Drupal's core architecture is built with security in mind, featuring sandboxing, user permissions, and brute-force detection.
  • Regular updates and security advisories: Because of Drupal’s strong number of developers, and their dedicated security team, security issues are quickly detected, fixed, and documented. Developers are also dedicated to consistently updating both Drupal itself and its modules to ensure any vulnerabilities are addressed.
  • Multi-layered disaster recovery plans: Drupal offers modules and documentation for disaster recovery, including data backups, server redundancy, and failover options.

Drupal security team page

Our team at Promet Source are strongly dedicated to website security. We advocate that you regularly review your security features, update software, and test disaster recovery plans to ensure your municipal website remains protected and resilient against any potential threats.

Scalability and future growth

Municipal websites are not static entities. As your city grows, its online presence needs to be resilient and flexible to meet new demands and accommodate increased traffic. Choosing a CMS that can scale efficiently and handle future growth is crucial for ensuring your website remains a valuable resource for your citizens.

Joomla

  • Flexible extensions: Joomla's extensive library of extensions (around 6,000 according to ScalaHosting) allows you to add new functionalities and features as your needs evolve.
  • Adaptable to moderate growth: Although Joomla does have a history of being used for large sites, the majority of information available suggests that the CMS is better suited to handling moderate increases in traffic and content volume, making it ideal for smaller to medium-sized municipalities.
  • Low upfront costs: Joomla’s initial investment can be affordable depending on the hosting and maintenance you choose, making it a cost-effective option for budget-conscious municipalities.

Drupal

  • Highly scalable architecture: Drupal's architecture is designed for large-scale deployments, capable of handling complex data structures and high traffic volumes.
  • Future-proof platform: Owing to the active community that updates Drupal constantly and creates new modules (there are about 40,000+ by December 2023), the CMS can easily adapt to new technologies and integrate with other platforms, ensuring your website remains relevant in the long run.
  • Potential for high maintenance costs: It’s not a secret that Drupal is a technical CMS and requires more technical expertise for implementation and maintenance, which may lead to higher long-term costs.

Scalability is not just about handling increased traffic. It's about adapting to your city's changing needs and technological landscape. Consider your future growth projections, potential for new functionalities, and long-term budget constraints when evaluating the scalability of each CMS.

Community support and need for maintenance

Municipal websites—like all websites—require constant care and maintenance to ensure optimal performance and security. Choosing a CMS with robust support options and a thriving community can significantly ease this burden and keep your website running smoothly.

Joomla

  • Active community forums: Access a large and active community of Joomla users and developers for troubleshooting, advice, and resource sharing, with over 700,000 active users on the forum.
  • Paid support options: Because Joomla is open source, there are companies that offer professional support packages for additional assistance with complex issues or customization.
  • Extensive online resources: Joomla has a wealth of documentation, tutorials, and knowledge bases to help developers find answers to common questions and learn new skills.

The level of support available in the Joomla community has been a standout aspect of my experience. Whether it was troubleshooting a technical issue or seeking advice on best practices, I found an active community of users and experts always ready to assist. This support extended beyond mere problem-solving; it was a learning opportunity that enriched my understanding of web development and enabled me to enhance my sites in ways I hadn't initially considered.

Josh Steppling, Broker Associate, Treasure Coast Real Estate

Drupal

  • Large and dedicated community: Drupal developers benefit from having a support system that has more than a million members actively supporting each other through documentation, tutorials, and events.
  • Professional support channels: Since Drupal is open source, website owners who choose Drupal can access paid support services from experienced Drupal agencies for ongoing maintenance, security updates, and custom development.
  • Long-term stability: Drupal was released in 2001, while Joomla was released in 2005. Those four years have made a difference in building a well-established community to ensure long-term support and compatibility with future software versions.

[embedded content]

Community support and maintenance are ongoing investments. Allocate resources for professional support if needed and actively engage in the community to leverage its expertise. A well-maintained website not only functions smoothly but also reflects your city's commitment to technology and service excellence.

Total cost of ownership

Choosing a CMS isn't just about features; it's about making a financially sound decision that considers both upfront and long-term costs. Evaluating the total cost of ownership helps you understand the financial impact of each platform and choose the one that best aligns with your budget and priorities.

Joomla

  • Open source goodness: Joomla is an open-source platform, meaning there are no licensing fees to use the platform.
  • Need for paid support and maintenance: While Joomla extensions are often free, ongoing maintenance and customization might require hiring developers or agencies if you don’t have Joomla developers in-house.
  • Limited scalability: Joomla's scalability reaches a limit, potentially requiring migration to another platform if your city's website needs grow significantly.

Drupal

  • Open source means technically free: Drupal is also an open-source platform, meaning it’s completely free to use.
  • Potentially higher maintenance costs: Drupal's robust architecture and community support can minimize maintenance needs if you have a Drupal developer, but Drupal’s scalability also means higher costs.
  • High scalability: Drupal's architecture can handle large-scale deployments and future growth, eliminating the need for platform migration in most cases.

We now have the advantage of an Open Source CMS that is aligned with the worldwide Drupal Community. The result is big benefits. Taking all factors into account, we estimate that the annual cost savings will exceed $100,000.

—Quazi Hashmi, Program Manager, County of Orange, California

Consider your city's budget, technical expertise, and future growth projections when evaluating the cost of each CMS. Check which would be more cost-effective in the long run for your municipal website.

User-friendliness and learning curve

For your municipal website to thrive, your team needs to be comfortable using and exploring it. Choosing a CMS with a user-friendly interface and manageable learning curve can save time, resources, and headaches in the long run.

Joomla

  • User-friendly interface: Joomla offers a straightforward and intuitive interface, making it relatively easy for non-technical users to add content, manage pages, and perform basic tasks.
  • Wide range of tutorials and resources: Joomla has its repository of online tutorials, documentation, and community forums make learning Joomla accessible, even for beginners.
  • Plenty of customization options: Joomla’s extensions and themes make it a good choice for those who want to ensure their website looks inviting to their constituents.

Joomla's user-friendly interface and straightforward layout make navigating it a pleasure. Content managers feel in total control of the development process because the admin panel and dashboard lack confusing clutter. For me, I like that the WYSIWYG editor does not require knowledge of code. The user experience is improved by the simplicity of inserting photos using drag-and-drop, which makes Joomla a dependable option for individuals who value utility over complexity.

Paul Phelps, Managing Director, Solent Power

Drupal

  • Steeper learning curve: Drupal's robust features and flexible architecture come with a steeper learning curve, requiring technical knowledge or training for effective use.
  • Developer-friendly platform: Drupal caters to a developer-focused community, offering powerful tools and APIs for extensive customization and functionality.
  • Strong customizability options: With the amount of modules and themes Drupal has, customization is one of its strongest suits. Promet Source also built Provus®, a component-based design system, to make content creation, editing, and customization much easier for developers and content managers.

Promet was very responsive to our needs and really cared. Our new site meets the moment. We got exactly what we wanted and feel very proud of how it looks and what we’ve achieved.

—Nicole Bronzan, Vice President of Communications and Content, Council on Foundations

REQUEST A PROVUS® DEMO

Consider your team's technical skills, available resources, and potential for ongoing training when between Drupal vs Joomla. A balance between user-friendliness and advanced features can empower your team to manage your website effectively and adapt to your needs.

Should you choose Drupal or Joomla for your municipal website?

After comparing the two platforms based on the above criteria, we can see that both platforms have their strengths and cater to different needs. Here's a quick summary:

Public information and services

  • Both offer robust tools to organize, manage and deliver public information and services. 
  • Joomla excels at intuitive content organization, forms/media managers and multilingual capabilities.
  • Drupal stands out in taxonomies for searchability, API integrations, and multilingual support.

Citizen engagement and transparency

  • Both enable online forums, community features and social media integration.
  • Drupal has more advanced options like interactive dashboards, public comment tools and secure e-government functions.

Accessibility and privacy compliance

  • Joomla has built-in accessibility features, extensions and documentation to aid compliance.  
  • Drupal adheres strictly to accessibility standards, offers in-depth resources and a modular system for customization.

Security  and data recovery

  • Joomla provides regular security updates, extensions like firewalls/malware scanners, and backup extensions.
  • Drupal has security architecture built into its core, along with a dedicated security team, updates, and sophisticated recovery options.

Scalability and future growth

  • Joomla is ideal for small to mid-sized cities with its extensions model and lower cost.
  • Drupal excels at enterprise-level scale with advanced architecture designed for complexity.  

Community support and need for maintenance

  • Joomla has an active community forum, paid support options and extensive documentation.
  • Drupal enjoys a huge dedicated developer community, professional assistance services and long-term stability.

Total cost of ownership

  • Joomla is open source and has no licensing fees, but it may need paid support/maintenance if no in-house Joomla experts.
  • Joomla has limited scalability may require platform migration.
  • Drupal is also open source, so it's technically free to use, but there could potentially be high ongoing costs for maintenance because of its scalability.
  • Drupal is highly scalable to handle future growth, lessening the need to switch to another platform.

User-friendliness and learning curve

  • Joomla has an intuitive admin interface for ease of use.
  • Joomla has online tutorials and documentation to make learning accessible.
  • Joomla’s extensions enable customization without coding skills.
  • Drupal has a steep initial learning curve for content managers and developers.
  • Drupal is built to be developer-friendly with powerful modules for customization.
  • Drupal has strong overall customization capabilities.

Overall, while both Joomla and Drupal are powerful CMS platforms, Drupal is better suited for larger municipal websites that demand enterprise-level content and data management, citizen engagement capabilities, and long-term expandability. 

On the other hand, Joomla offers a more lightweight and affordable solution for medium-sized municipalities on more modest budgets that still needs robust public services and transparency. We suggest to carefully evaluate your city's online needs before deciding between these two quality open-source systems.

Ready to have a municipal website that's ready to serve your constituents? Contact our Drupal experts today!

Jan 25 2024
Jan 25

In most cultures worldwide, December is reserved for friends and family, for holidays.

People reflect on the past year and welcome the new one steeped in joy and festivity.

Many Axelerant team members, too, go on long holidays with their loved ones.

In the winter of 2023, we wanted to do something to celebrate this joyous time of the year with all Axelerant team members—before out-of-office emojis began adorning their Slack profile pictures.

We wanted to celebrate. Not for a day or two. 

But for an entire week. 

It All Started With A Challenge

The year 2023 went well.

Clients were happy, and the work was good. 

We bagged some big and prestigious awards for our work—and work culture

Team members were happy, too.

And they wanted Axelerant to share in their happiness with tangible tokens of appreciation. Like gifts.

At first we thought: Sure, why not? What a lovely idea! 

After all, we were feeling grateful for how the year went, for the small and big wins that came our way.

And none of it could’ve happened without people’s hard work. 

But there was this one little thing. . .

We did gifts, but were certain that it had to be something more than mere tangible presents landing on people's doorsteps.

Even more challenging was aligning that “something” with our culture. 

Gifts To Appreciate. . .? Meh

Before you start judging—we don't have anything against gifts. We love them. 

And we love surprises, too.

But. . .isn't it a little too convenient and a little less thoughtful to just send the same gifts to everyone?

Sure, it takes effort. But at the end of the day, it's just material that people can buy themselves.

Plus, every organization that wants to show some semblance of appreciation already does that.

So, you see, it had to be something more. (We didn't do away with gifts altogether, though. We aren't monsters!)

First, We Got Our Intention Straight

We brainstormed. 

(A fair amount of ideas, half ideas, fractured words, sounds, and rhymes were thrown about pell-mell.)

We stepped back and asked ourselves: what do we want team members to feel?

And the answer was similar to what we were trying to convey: gratefulness. 

We were thankful to every team member for their efforts and for trusting, working, and growing with us.

We wanted to say thank you.

We wanted them to truly feel the spirit of gratefulness from us, their team members, and, if possible, from within.

And we had to do it in a way that was fun—like, Godzilla busting a move in party-wear fun.

Click here to check out our open positions.

And That’s When It Hit Us: A Gratitude Week

At first, we wanted to do it small—a half day of virtual meetings where people get gifts and food vouchers and share things they are grateful for at work.

But if there's one thing you should know about us, it is this: we don't play it safe or small.

So, the "half-day" time slot soon became an entire week.

A week dedicated to gratitude.

Sprinkled with games, activities, reflections, creativity, and, most importantly, togetherness.

Dec 8 Announcement - Gratitude Week Schedule

Practicing gratitude has many surprising and not-so-surprising benefits for individuals.

To ensure that the practice took life in people's lives, we structured the week under the Observe, Think, Feel, Do model. 

Each day's activities corresponded to this model to bring a structure to the week and the practice.

A Week Of Celebration That Brought Everyone Together

Usually, we keep all kinds of participation optional until it concerns core work roles. (As it should be, right?)

Even then, joining meetings is mostly optional.

So, frankly, we were—slightly—worried about how team members would receive the whole idea. 

Everything was in order operationally. And we held our breath.

We Kicked Things Off With A Session

Gratitude Session at Axelerant

We dove into the week with a session from our Coaching Director, Mridula Ujjwal

The session helped open ourselves up to the week's possibilities and brought everyone on the same page.

The concept of gratitude is quite simple. 

But consciously practicing it? A whole other thing.

Simple things are usually the hardest to do—like sticking to a routine.

How often do we notice and consciously appreciate the little things floating by that make us feel good?

Axelerant team member recognizing Mridula_s session

Took Time Out To Appreciate The Magical Blessings Surrounding Us

The second day was all about observing.

Noticing Prompts To Practice Gratitude For Our Surroundings

Every little thing that made people's lives better, comfortable, livable, enjoyable.

It wasn't limited to material objects. Some team members put down access to morning sunlight in their room as something they felt grateful for.

They noted each item on pieces of paper and used these to fill gratitude jars. 

And people decorated these jars with whatever beauty meant for them without any specifications.

Gratitude jar

These now sit on people's work desks—its contents an ever-ready reminder that no matter how bleak a day feels, we are surrounded by items that make our lives spectacular.

There was a word puzzle, too. Filled with gratitude words. (You can create your own from scratch from this website.)

Dec 12 Word Search

How many could you discover?

And The People Without Whom We Couldn’t Have Made It This Far

The third day was all about thinking.

Most of us have people who put in tremendous effort to make us reach where we stand today.

Not just one's immediate family. A childhood teacher, a friendly neighbor, a friend who's always been there through thick and thin.

Team members had to discover these people and their contributions. 

Then, write letters showing honest appreciation for their contributions to their lives.

And send them.

This structure helped them along the path of introspection.

Path of introspection.

We also played a fun game—the Cricket Team of Life.

The theme was simple.

If your life were a cricket match, which of your people (friends, family, colleagues, neighbors, etc.) would make the cut?

Ananya Shekar, Engagement Manager, facilitated the game with precise questions that made one introspect about the people they depend and count upon, with or without realizing.

Day 4—QOTD

Dedicated Bucket-Loads Of Songs To Each Other

The fourth day was all about feeling.

And we toned down on activities to allow for people to feel.

All team members had to do was tune in to our very own in-house Zoom channel-turned-radio station—with a handpicked playlist of songs. Yup!

Songs that go with the spirit of gratitude.

Then came song dedications.

For the team members, by the team members, from the team members.

Ankur Gupta_s song dedication to the executive team

I’d be trivializing the impact of this activity by saying that this was a hit. 

This was a hit alright, all the way to the finish line.

Axelerant team member Sharayu getting recognized for playing the radio music marathon during Gratitude Week

People here really seem to like each other.

So much so that we had to close the dedication form—before time!—because playing them all would’ve kept us glued to our screens till late night.

Unwrapped Our Gifts Of Choice

You didn’t think we’d do away with presents, did you? 

There’s something nice about having presents delivered to one’s doorstep.

And this week was all about making team members feel nice.

So we curated three sets of presents and let people have the option to choose whichever they fancied.

Axelerant gratitude week gift

Premium chocolates, healthy snacks, gratitude diaries, and self-pampering kits were some items in those little gift boxes. 

Appreciated The People Who Make Work Awesome

The fifth and the last day of the week was about doing. 

Sending love to the people one worked with—within and outside one’s team.

And we did it through a game of bingo with prompts.

Gratitude Week BINGO card

Team members had to follow the prompts, which focused on expressing gratitude through personal messages to people who make their work life awesome and help them grow.

Then, take screenshots of those messages and paste them into a PPT.

And when all the messages for the prompts were sent and the screenshots pasted, share the PPT with everyone.

At the day’s end, we all got on a call and reflected on the week and how it impacted us. 

Axelerant CEO Ankur Gupta praising the efforts behind Gratitude Week

And Spread The Gratitude Spirit To Where It Matters The Most

At Axelerant, we believe in giving back.

Not as a public relations stunt. Giving back to where it truly matters.

Many of our team members usually devote time to contributing to developing open-source platforms like Drupal and WordPress. 

And we couldn't let this spirit of giving back slide during this week.

That's why we selected a list of charities to donate at the event's end.

Message about charity donations during Axelerant_s Gratitude week

If you've made it this far, you, too, can celebrate the spirit of gratitude in your team.

It's so worth the effort.

And if your workplace isn't ready for this kind of activity that celebrates its people and their work, consider a new workplace?

This week has renewed us and brought us together. 

And it has certainly renewed our commitment to live our core values of kindness, openness, and enthusiasm every single day.

Click here to check out our open positions.
Jan 25 2024
Jan 25

Introduction

Personalization is crucial for businesses to stay competitive at scale. But one of the main challenges in delivering personalized experiences is the reliance on inaccurate or incomplete customer information.

By implementing a Customer Data Platform (CDP) in personalization strategies, organizations can:

  • Gain individual-level customer intelligence
  • Utilize insights from customer experiences across various channels
  • Standardize and make data accessible to the entire tech stack
  • Create real-time, targeted, and multi-channel experiences that go beyond marketing

Learn how organizations can leverage their data-first CDP to enhance personalization efforts. 

What Is A CDP?

Gartner defines a CDP as

a marketing system that unifies a company’s customer data from marketing and other channels to enable customer modeling and optimize the timing and targeting of messages and offers.

A Customer Data Platform (CDP) is a solution that allows organizations to gather, consolidate, and oversee customer data from multiple sources, including website visits, email interactions, and social media. This data is then combined and structured to generate a holistic understanding of each customer.

This comprehensive view is utilized to provide personalized experiences, improve customer engagement, and inform data-backed decision-making. CDPs update data in real-time, providing businesses a complete understanding of each customer's interactions and behaviors. This allows businesses to gain valuable insights and deliver tailored experiences.

For instance, consider a clothing retailer that utilizes a CDP to collect data from its website, emails, and in-store purchases. The CDP enables the retailer to create a comprehensive customer profile, including purchase history, preferences, and behaviors.

Leveraging this data, the retailer can deliver personalized customer experiences like customized promotions and product recommendations. For example, if a customer prefers athletic wear, the retailer can send personalized email promotions for new athletic wear products.

Sam Leclerc, Account Executive at Acquia, also shared interesting insights about CDPs.

[embedded content]

Types Of CDPs

There are different types of CDPs available in the market.

1. Acquia CDP

Acquia CDP is a comprehensive platform designed to assist businesses in collecting, unifying, and leveraging customer data from various sources to create personalized and seamless experiences. With Acquia CDP, organizations can consolidate data from multiple touchpoints, such as websites, applications, email interactions, and more, into a unified customer profile.

Key features of Acquia CDP include:

  • Data Unification: Acquia CDP aggregates data from various sources to comprehensively view each customer's journey and behavior.
  • 360-Degree Customer Profiles: The platform merges data points such as demographics, browsing history, transaction records, and engagement patterns to create individual customer profiles. This holistic view helps marketers understand customer preferences and needs.
  • Segmentation & Targeting: Acquia CDP utilizes data insights to help create highly specific customer segments. These segments help launch personalized marketing campaigns and experiences.
  • Personalization: Acquia CDP facilitates personalized content recommendations, product suggestions, and tailored messages across various channels.
  • Cross-Channel Engagement: The platform enables seamless communication across channels, ensuring a consistent and relevant experience for customers.
  • Real-Time Insights: Acquia CDP offers real-time insights and reporting, empowering marketers to make informed decisions and optimize campaigns based on data.
  • Data Privacy & Compliance: The platform prioritizes data privacy and compliance with regulations. This helps ensure secure handling of customer data and adherence to relevant laws.
  • Integration Capabilities: Acquia CDP integrates with various marketing tools, third-party platforms, and Customer Relationship Management (CRM) systems. This enhances its capabilities and provides a comprehensive view of customer interactions.

How Acquia CDP Helped Sun & Ski Sports Improve Customer Targeting To Enhance Engagement Rates & ROI

Sun & Ski Sports, a specialty outdoor retailer, faced the challenge of providing customers with relevant information for making informed buying decisions. Sun & Ski Sports also frequently launched several offers and wanted to share those with customers without overwhelming them.

Acquia CDP was implemented to solve these challenges. It helped aggregate customer data from various sources, build customer segments through Machine Learning (ML), and utilize omnichannel data to deliver personalized experiences.

As a result, Sun & Ski Sports experienced significant improvements, including:

  • 1500% increase in direct mail response rate
  • 1100% improvement in incremental net profit per name
  • 200% increase in paid social clickthrough rate
  • 25% reduction in cost per click for paid social efforts

Acquia CDP Case study

2. Twilio Segment’s CDP

Twilio Segment's CDP is a robust solution that empowers businesses to gather, unify, and leverage customer data. This data can create personalized and impactful marketing campaigns and customer experiences.

Key features of Twilio Segment's CDP include:

  • Data Integration: The CDP enables businesses to integrate data from diverse sources like websites, mobile apps, email interactions, and more into a centralized platform.
  • 360-Degree Customer Profiles: The platform creates comprehensive and dynamic customer profiles by integrating data from various channels. This gives businesses a complete understanding of customer preferences and requirements.
  • Audience Segmentation: Twilio Segment's CDP enables businesses to segment their customer base into specific groups. This can be done by using criteria such as behavior and demographics.
  • Personalization: Leveraging the unified customer profiles, the CDP facilitates personalized content recommendations, product suggestions, and messaging tailored to each customer's interests.
  • Real-Time Activation: Businesses can trigger real-time actions based on customer behavior using Twilio Segment's CDP, such as sending personalized messages or notifications when specific actions are taken.
  • Cross-Channel Consistency: The CDP ensures that customer data remains consistent and accurate across different marketing and communication channels, creating a smooth and cohesive experience.
  • Data Privacy & Compliance: Twilio Segment's CDP prioritizes the privacy and compliance of data. It assists businesses in securely handling customer data.
  • Integration Capabilities: The platform integrates with a variety of marketing tools, analytics platforms, and third-party systems, empowering businesses to leverage their existing technology stack.
  • Analytics & Insights: Twilio Segment's CDP offers robust analytics and reporting features, providing valuable insights into customer behavior and supporting data-driven decision-making.
  • Flexible API: The CDP provides a flexible API that allows businesses to customize how customer data is collected, utilized, and managed.

 

How IBM Utilized Twilio Segment’s CDP To Scale Customer Data Foundations And Increased Revenue

IBM Cloud users often struggle with the diverse portfolio of over 150 products, leading to a lack of value and missed cross-selling opportunities for IBM. To address this, IBM implemented the Twilio Segment to send real-time personalized notifications to educate users about new products, increasing adoption and retention.

By tracking and tagging customers, creating tailored recommendations, and delivering targeted messaging, IBM improved user engagement and uncovered new expansion opportunities. This helped increase product adoption by 30% and revenue by 70%.

IBM CDP Case Study

 

3. Sitecore CDP

Sitecore CDP, formerly Sitecore Experience Platform, is a solution for managing customer experiences across multiple digital touchpoints. It enables businesses to deliver personalized and engaging interactions throughout the customer journey by collecting, organizing, and utilizing customer data.

Key features of the Sitecore Experience Platform (CDP) include:

  • Comprehensive Customer Profiles: Sitecore CDP brings together customer data to form comprehensive profiles that include demographic information, browsing history, purchase behavior, and engagement.
  • Segmentation & Targeting: Businesses have the ability to segment their audience using specific attributes, behaviors, and preferences. This enables the creation of tailored content and personalized experiences.
  • Personalization: The platform analyzes customer preferences and interactions to deliver personalized content, product recommendations, and offers.
  • Multi-Channel Campaigns: Sitecore CDP empowers marketers to design and execute multi-channel marketing campaigns that provide consistent messaging and experiences across websites, email, social media, and other digital platforms.
  • A/B Testing & Optimization: Marketers can utilize A/B testing and optimization techniques to determine the most effective content and strategies for enhancing customer engagement and driving conversions.
  • Real-Time Engagement: Sitecore CDP enables businesses to engage with customers in real-time, allowing them to respond promptly to customer actions and enhance overall engagement.
  • Customer Journey Mapping: The platform provides tools for mapping and visualizing customer journeys, aiding businesses in identifying touchpoints, pain points, and opportunities for enhancing the customer experience.
  • Content Management: Sitecore CDP integrates robust content management capabilities, empowering businesses to create and manage digital content that aligns with customer journeys.
  • Analytics & Reporting: The platform provides analytics and reporting features that offer insights into customer behavior, campaign performance, and other key metrics.
  • Integration Capabilities: Sitecore CDP seamlessly integrates with various third-party systems, such as CRM, e-commerce, and marketing automation tools, ensuring smooth data flow and a unified view of customer interactions.
  • Data Privacy & Compliance: The platform prioritizes data privacy and compliance, helping businesses manage customer data in accordance with regulations like GDPR and CCPA.
  • Scalability: Sitecore CDP is designed to meet the needs of large enterprises and can handle high volumes of customer data and interactions.

How Australia's Gold Coast Drove Over 100% Higher Tourist Engagement With Sitecore CDP

Destination Gold Coast (DGC) aimed to attract a broader audience and convert their interest into bookings for local businesses. DGC utilized Sitecore solutions to develop a modern and flexible digital experience platform to achieve this.

DGC integrated third-party data warehouses, applications, and services to provide a seamless and personalized visitor experience. With Sitecore CDP's and Sitecore Personalize's help, DGC analyzed customer data to deliver tailored content and offers to different visitor segments. Implementing Sitecore Content Hub DAM also empowered DGC's marketing and sales professionals to manage and publish digital content efficiently.

DGC's new website attracted a broader audience, resulting in a 48.5% increase in website traffic and a 17% increase in time spent per session. This translated into increased revenue opportunities for local businesses, with a 164% increase in revenue-generating opportunities and a 119% increase in bookings for accommodations, leisure, business events, local restaurants, and bars.

Sitecore CDP Case Study

4. Salesforce Data Cloud

Salesforce Data Cloud enables businesses to gather, consolidate, and activate customer data to deliver customized and seamless experiences across multiple touchpoints. It is part of Salesforce's customer relationship management suite (CRM) tools.

The notable features and capabilities of Salesforce Data Cloud include:

  • Data Consolidation: Salesforce Data Cloud gathers customer data from diverse online and offline sources. This data helps establish comprehensive customer profiles that encompass demographic details, purchase history, interactions, preferences, and behaviors.
  • 360-Degree Customer View: By leveraging unified customer profiles, businesses gain a complete view of each customer's journey and interactions with the brand across various channels and touchpoints.
  • Personalization: Leveraging AI and machine learning, the platform analyzes customer data to generate personalized recommendations, offers, and content. This enables businesses to provide relevant experiences that resonate with individual customers.
  • Segmentation: With Salesforce Data Cloud, businesses can categorize their audience according to specific characteristics and actions. These segments enable customized marketing campaigns and targeted messaging.
  • Cross-Channel Engagement: The platform enables businesses to engage with their customers consistently and cohesively across multiple channels, including email, social media, mobile apps, and websites. This seamless experience ensures a unified engagement for customers.
  • Real-Time Interactions: Businesses can engage with customers in real-time based on their current actions and behaviors. This includes triggering personalized messages or offers as customers interact with the brand.
  • Data Activation: Salesforce Data Cloud empowers marketers to activate customer data by integrating it with other tools like Marketing Cloud and Sales Cloud. This enables effective marketing campaigns and sales efforts.
  • Integration: The platform seamlessly integrates with other Salesforce products and third-party systems, allowing businesses to leverage their existing technology stack.
  • Compliance & Data Privacy: Salesforce Data Cloud prioritizes data privacy and compliance, enabling businesses to comply with regulations such as GDPR and CCPA.
  • Analytics & Insights: The platform offers robust analytics and reporting tools that provide valuable insights into engagement metrics, customer behavior, and campaign performance.
  • Scalability: As part of the Salesforce ecosystem, Data Cloud is designed to accommodate the needs of large enterprises and handle substantial amounts of customer data.

How Personalization Driven By Salesforce Data Cloud Helped Boost Heathrow’s Digital Revenue By 30%

Heathrow Airport is one of the busiest airports in the world. The organization aims to provide every passenger with the best airport service. To achieve this goal, Heathrow Airport has implemented Salesforce Customer 360.

With Data Cloud, Heathrow captures passenger interactions from multiple channels in a single place. This data is shared in real-time with different teams. This single view of customers helps Heathrow offer personalized and seamless digital experiences, from shopping to customer service.

This has led to increased customer satisfaction and a 30% boost in digital revenue since 2019. Data Cloud also helps anticipate and meet passengers' needs by capturing and analyzing customer interactions. Heathrow has improved agility, security, and customer relationships by centralizing data and simplifying its tech stack.

Salesforce Data Cloud CDP

How To Use CDPs For Personalization

According to a report by McKinsey & Company, organizations that excel at personalization generate 40% more revenue. Organizations need to rapidly evolve their personalization strategies with the move towards first-party data and the increase in digital-first consumers.

From gathering and segmenting data in real time to identifying loyal customers, a CDP can drive personalization at scale.

Personalizing Communication

A Customer Data Platform (CDP) enhances the ability of organizations to go beyond generic first interactions. By collecting first-party data and creating individual customer profiles, organizations can tailor specific messages that align with customer needs and guide them toward suitable solutions.

By leveraging the information gathered from an individual's data profile, CDPs can help craft highly targeted interactions that assist customers. It enables organizations to transition from addressing the masses to addressing the individual. Further, the more data CDPs gather from customers' interactions, the more personalized and meaningful the conversation can become.

Making Ecommerce More Personal

In ecommerce, leveraging a CDP for personalization allows organizations to create cohesive customer profiles. This enables the delivery of tailored experiences built upon past behaviors.

A prime example of effective personalization can be seen in Amazon's approach. Leveraging the customer data users willingly provide and store, Amazon curates product recommendations based on past purchases.

This example can be applied to any e-commerce experience, emphasizing the significance of organizing and storing customer data within a CDP. By doing so, businesses can leverage this wealth of information to create tailored e-commerce experiences, further enhancing the ease of online shopping.

Focusing On Privacy

In a study carried out by Harvard Business Review, 97% of the people surveyed expressed concerns that businesses might misuse their data. This is why securing customer data is crucial to leveraging personalization to enhance the customer experience. By safeguarding customer data, organizations not only protect their customers but also safeguard their interests.

But how does a CDP ensure the protection of customer data?

CDPs create unified customer data profiles that become comprehensive as more data is collected on individuals. Additionally, since CDPs primarily work with first-party data, the customer profiles consist solely of data that has been freely provided.

A CDP serves as a centralized command center for customer data. Without this centralized location, data is more likely to get lost or exposed when transmitted between disparate systems. A CDP prioritizes privacy and data security from the start by storing data in one secure location.

How To Start Using A CDP For Personalization

There are three steps that organizations can follow to start using a CDP for personalization.

Step 1: Audience Management, Segmentation, & Targeting

The first step is to gain an understanding of your customers. Essentially, consolidate all available customer data and analyze it to identify common demographics, attributes, and behaviors.

But what if the target audience consists of tens of millions of users?

Dealing with such a vast dataset can be overwhelming, so users can start by defining business objectives.

To accomplish this, integrate data from all sources to create the most comprehensive user dataset possible. This can be done by using an enterprise-grade CDP. Exploring the data allows users to:

  • Identify key characteristics of high lifetime value customers and those at risk of churning.
  • Enhance customer acquisition efforts by finding similar audiences.
  • Discover common behaviors and attributes that can be grouped into smaller audience segments for targeted engagement.

Exploring data through audience segmentation is another effective strategy. By enriching these segments with third-party data, organizations can gain deeper insights into common user interests and identify user behavior patterns that reflect important business trends.

Step 2: Orchestrating Customer Experiences & Journeys

The next step entails creating pathways and segments for users. By employing customer journey orchestration, organizations can address the challenge of understanding where users are in the funnel and carefully designing their next steps. This ensures that users receive relevant content at each stage.

Typically, customers progress through stages such as awareness, interest, intent, purchase, and retention. Designing customer journeys and experiences often involves mapping out user behaviors, resulting in numerous micro-journeys.

For example, 'If a user clicks this link, then send this email,' or 'If a user opens this email, then send this coupon.' This level of detail requires significant time and effort to build.

Segmenting the journey allows organizations to mark critical stages and trigger messages that guide customers from awareness to intent and from interest to purchase. Machine learning techniques like next-best-action modeling can provide valuable insights into the most effective marketing activations to deliver and influence customers.

Customer journey orchestration empowers marketers to assess the effectiveness of their marketing efforts and guide customers closer to a purchase. This capability lets marketers plan the most effective journey to drive customers toward a purchase.

Step 3: Ensure Omnichannel Messaging 

Omnichannel messaging is closely linked to the customer journey, with unique activations at each stage. For instance, activating social channels and employing lookalike modeling during the awareness stage can help expand reach to a broader audience.

On the other hand, during the interest stage, email activation may be more effective as organizations might have already gathered customers' Personally Identifiable Information (PII).

How Axelerant Can Help Use A CDP For Personalization

To achieve the ability to provide personalized customer experiences at a large scale, it is crucial to have a comprehensive understanding of your customers. This involves consolidating diverse data sources into a centralized repository.

Once the data is centralized, it should be merged into unified customer profiles, allowing for a consistent source of information to fuel personalization engines. This harmonized data must be effectively delivered and activated on the appropriate technology platforms to deliver exceptional personalized customer experiences.

The Customer Data Platform (CDP) is the only all-in-one solution that can fulfill all these requirements to empower brands to deliver personalized experiences on a global scale. Schedule a call with Axelerant's experts to learn more about how CDPs can help.

Jan 25 2024
Jan 25

In Part 2 of our exploration of Symfony components in Drupal, we focus on the event dispatcher.

Spotlight on Symfony in Drupal

  1. Part 1: HttpKernel in Drupal
  2. Part 2: EventDispatcher in Drupal
  3. Part 3: Routing in Drupal
  4. Part 4: Utility Components in Drupal

The event dispatcher is a tool that enables the application to communicate across objects by subscribing to and listening for events. It achieves this by creating a directory for various event types, and the corresponding registered listeners for each event type. When a specific type of event occurs, the code that has registered a listener for that event is invoked. If you're familiar with the Mediator and Observer design patterns you might recognize similarities here.

Symfony's EventDispatcher component in Drupal

When Drupal receives and incoming request, the HttpKernel eventually executes this code:

$event = new RequestEvent($this, $request, $type);
$this->dispatcher->dispatch($event, KernelEvents::REQUEST);

This code dispatches RequestEvent to the EventDispatcher component, along with the $request object.

Find the code for the EventDispatcher in the vendor/symfony/event-dispatcher/ directory. Let's examine the EventDispatcher.php file in that directory. It contains the class that makes up the core of this component.

The event dispatcher includes methods for adding and removing both listeners and subscribers. It has a dispatch() method that is responsible for collecting and invoking registered listeners for a particular event.

    public function dispatch(object $event, string $eventName = null): object
    {
        $eventName ??= $event::class;

        if (isset($this->optimized)) {
            $listeners = $this->optimized[$eventName] ?? (empty($this->listeners[$eventName]) ? [] : $this->optimizeListeners($eventName));
        } else {
            $listeners = $this->getListeners($eventName);
        }

        if ($listeners) {
            $this->callListeners($listeners, $eventName, $event);
        }

        return $event;
    }

Tip: This code uses ??=, PHP's null coalescing assignment operator.

The callListeners method executes the code that has been registered for a specific event.

Drupal's ContainerAwareEventDispatcher class

Drupal optimizes the performance of Symfony's EventDispatcher component. Drupal's customized version, Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher, runs an initial compilation step which prepares a list of all event listeners and subscribers and stores them in an optimized fashion. Drupal's version is faster by an order of magnitude due to these customizations!

Apart from this additional compiler pass, the 2 components are highly similar.

Learn more

Next up

Stay tuned for our next article in this Spotlight on Symfony series: the Routing component.

Jan 24 2024
Jan 24

Drupal's contribution recognition system is a key part of the way we recognize and incentivize contribution in the Drupal project. It's a system that needs constant care and feeding, both to ensure that we're recognizing the many kinds of contributions people and organizations are making, and to ensure that the system itself is proportional and fair for the effort being put in.

Event Sponsorship credit

We're about to introduce a new way for organizations to improve their marketplace rank. Drupal.org/community/events has allowed organizers to feature their sponsors since the beginning. Now, those sponsors listed will automatically receive contribution credit as well. To start, this will be a fixed amount for small events and a larger one for DrupalCon, but in the future, in collaboration with event organizers, we'd like it to scale to each sponsor's level of support.

We hope this will encourage companies to do the important work of financially supporting the grass roots events that help our community thrive. (And reward those who already do!). 

Reducing redundancy

We're also making a small tweak to the system this week related to how we recognize Contributor Roles. Contributor Roles are community submitted, and represent all of the many ways contribution happens in our community. However, we want to avoid double counting credit for certain types of roles. For example, issue credit is a fundamental pillar of our contribution recognition system, and some of our community roles such as 'Project Contributor' are also organically receiving credit from issues. 

We will no longer be granting marketplace rank to organizations sponsoring roles that are already represented in other ways, and we'll update the contributor role descriptions to reflect when this restriction applies. 

We expect this change to help level the playing field between some organizations who've made extensive use of the role system, and others who have kept a laser focus on contribution and innovation directly in issues.

Jan 24 2024
Jan 24

2023 was that year that Artificial Intelligence emerged from the futuristic shadows and into the spotlight, sparking transformative new levels of innovation, efficiency, and productivity. 

Here at Promet Source, we’ve leaned into the tipping point for AI, and the reality that in 2024, AI is serving as the driver of transformative leaps forward

That’s what’s inspired us to have a little fun with this riff on Time magazine’s annual Person of the Year. AI as an influencer of modern life is truly in a class of technology unto itself. 

Champions of what’s new and next, we’re channeling resources and sharpening expertise and focus from multiple angles that include:

While we have and will continue to cover all three of these angles within this space, the focus of this post is AI powered Drupal modules that Promet has released or currently has in development. 

AI-Powered Drupal Modules from Promet 

Developed and maintained by Promet Source, Metatag AI is an an open-source Drupal module that leverages OpenAI to enhance SEO. Automatically generating meta descriptions for blogs and other content based on headers and descriptions, Metatag AI provides content creators with a huge advantage by drawing upon SEO best practices and streamlining SEO-related tasks.  

Metatag AI is dependent on the Metatag module, and requires a paid OpenAI account.  

Promet's AI Modules in Development

We’re currently working on game-changing, AI-powered enhancements for search and chat functionality. 

To review: traditional search matches keywords in a query and returns a long list of links on a search engine results page (SERP). While answers to specific search queries are sometimes pulled from what appears to be the most relevant site and highlighted on the SERP, AI-powered search takes it to the next level, leveraging large language models to construct specific answers to specific questions. 

Utilizing AWS technology, we are working through questions pertaining to security with the expectation of releasing an AI-powered search capabilities in the relative near term.

Once intelligent search becomes available, traditional chat and search functionality will begin to appear as cumbersome and tedious. We’re excited about the profound advantages that AI-powered search will have in store for our clients and their users.

Interested in talking more about AI-powered possibilities to take your website to the next level? It’s one of our favorite topics these days! Let’s talk.

Jan 24 2024
Jan 24

Quality is the ultimate differentiator in the software world. But achieving it isn't just about throwing testers at the problem. 

There ought to be a strategic approach that turns testing from a reactive chore into a proactive one. To get there, QA maturity is inevitable for any organization. 

QA maturity is the efficiency of your testing practices.  Assessing your maturity stature pinpoints strengths and weaknesses, sets goals, and devises strategies for testing process enhancement.

Google's journey is a compelling example of QA maturity.

In Google's early days, manual testing caused delays in feature releases and bug fixes.  Initial attempts at frontend automation helped, but there was a dire need for QA maturity as the company’s products grew in size.

Google started its test maturity journey by splitting testers into two roles:

  • Test Engineers (TEs): Deep product and quality experts focused on what to test.
  • Software Engineers in Test (SETs): infrastructure and tooling specialists who built the automated frameworks and tools to take care of efficient testing.

This role change significantly improved testing efficiency and metrics-driven engineering. TEs became experts in automation, supporting product development efforts, and collaborating with SETs.

Introducing these new roles and automation enhanced efficiency and enabled early bug detection. 

To further optimize, SETs expanded their focus beyond testing and building tools to automate code writing, releases, and production monitoring. 

The expanded role led to the title "Software Engineer, Tools, & Infrastructure (SETI)." Today, SETIs and TEs collaborate to optimize the entire development cycle, emphasizing QA Maturity.

The Importance of QA Maturity and Transition to QE

Testing, in the end, is the traditional way of dealing with quality. However, this siloed approach often becomes inefficient for the following reasons. 

  • Reactive, Late Fixes: This approach typically results in reactive solutions that emerge only after considerable development efforts, leading to delayed and often more costly fixes
  • Communication Issues: Lack of team communication creates inefficiencies and slows agility in development. 
  • Test Coverage Issues: Incomplete test coverage may struggle to comprehensively cover various aspects of the software, potentially leaving critical or unknown areas untested.
  • Challenges in Identifying Issues: There are challenges in pinpointing the root causes due to a fragmented view of the entire development process.
  • Outdated Methodologies: Traditional testing setups struggle to keep pace with the dynamic nature of modern development methodologies.
  • Accountability Challenges: Delayed testing often isolates quality responsibilities from a dedicated team, potentially leading to a lack of shared ownership and accountability.

The result?

Quality becomes an afterthought, bolted on rather than woven into the entire development process.

In light of these challenges, it's clear that the traditional, isolated approach to testing is not sufficient. The shift from reactive measures to a more integrated, proactive strategy is imperative. This is where the transition to Quality Engineering (QE) becomes vital.

Quality Engineering permeates the entire software lifecycle, encompassing every stage from conception to deployment. 

This shift-left philosophy prioritizes early defect detection, preventing costly rework, and ensuring quality is built into the development pipeline.

Difference Between testing at the end and QE

How To Assess & Improve An Organization's QA Maturity

Optimizing QA begins with a crucial step: assessment!

It involves meticulously evaluating an organization's testing maturity level, encompassing processes, practices, tools, and culture. 

The first step is to select a framework that suits your requirements and team size. 

Step 1: Choose A Framework

A Test Maturity Framework helps assess and enhance the effectiveness of testing processes in an organization. It gauges the maturity of testing practices, guiding improvement for better software quality assurance. 

Here are the most prominent ones:

 

TMMi

TPI

Scope

Broad and deep, covering all aspects of testing

Focused on improving efficiency and specific areas

Complexity

Comprehensive framework, requiring detailed assessment and extensive process changes.

It is simple and easy to implement due to its clear, structured approach.

Ideal for

Large organizations with dedicated QA teams

Smaller teams or those starting their maturity journey

Once the framework is chosen, the next steps involve gathering relevant data. 

Here’s an example of a framework 

Step 2: Gather Data

Collect information on various aspects of the organization's testing process, including:

  • Processes: How are testing activities planned, executed, and monitored?
  • People: What are the testing team's skills, qualifications, and experience?
  • Tools & Technology: Which tools are used for test automation, defect management, and other tasks?
  • Metrics: Which Key Performance Indicators (KPIs), test coverage metrics, defect density, and other relevant measurements are used to gauge the effectiveness of the testing processes?
  • Culture: What is the attitude towards quality, collaboration, and continuous improvement? 

Step 2: Benchmarking Against Industry Standards:

This data collection allows organizations to compare their testing maturity against industry standards. Benchmarking provides valuable insights into how the organization is positioned, helping set realistic goals. 

Step 3: Create A Tailored Roadmap

A comprehensive improvement roadmap is created, drawing insights from the assessment findings. This plan carefully prioritizes important areas, sets achievable goals, and outlines improvement steps. The roadmap must be customized for the organization's needs and serve as the blueprint for ongoing improvement.

Test Maturity RoadMap

Step 4: Execution of the roadmap 

The team puts the roadmap into action. Planned improvements are systematically implemented, addressing identified issues. This phase ensures tangible progress and fosters the team's journey toward achieving higher maturity levels in the testing process.

Step 5: Continuous Improvement

Ongoing monitoring of the testing process ensures a continuous evaluation of its impact on project quality.

Through iterative assessments, adjustments to the improvement plan are made, facilitating gradual progress toward higher maturity levels.

This cultivates a culture of continuous improvement, establishing clear behavioral patterns to manage project challenges effectively.

Best Practices For Attaining QA Maturity

  • Adapt the assessment to your organization's needs and size.
  • Bring automation into the improvement process whenever and wherever possible.
  • Successful QA transformation requires ongoing communication, collaboration, adaptation, and a quality culture.
  • Engage all the stakeholders throughout the process.
  • Transform data into actionable insights with a quality dashboard for informed decisions and improvements.
  • Focus on actionable improvements, not just identifying weaknesses.
  • Make the assessment a continuous process for ongoing improvement.

What To Expect During Maturity Stages

Embarking on a journey of software quality involves traversing through distinct maturity stages. Each stage brings unique expectations as you progress.

Here they are:

Quality ControlQuality AssuranceQuality Engineering

DevOps-Driven QE

 Advanced QE

Comprehensive quality training

Formal documentation.

Test cases are designed and prioritized based on defect risk.

Continuous testing throughout the development lifecycle.

AI is used to automate testing tasks.

As-needed testing without a formal plan or documentation.

Well-defined QA roles.

Tools and frameworks automate testing.

Automated deployment.

Optimization of the CI/CD pipeline.

Focus on quick defect resolution with minimal documentation.

Well-defined processes.

.

Optimized test cases.

User-focused testing.

Predictive analytics.

Manual execution of test cases to verify core functionalities.

Metrics-driven practices.

Root-cause analysis.

Full integration of QE into the CI/CD pipeline.

Full integration of QE into SDLC.

The QC stage sets the foundation for structured QE practices.

Test-automation focus.

Early identification and fixing of defects.

Automated test data management.

A Short Tale: How QA Maturity Helped Zalando Thrive

Zalando faced scalability issues with its monolithic architecture (interconnected and interdependent components), limiting productivity and innovation. As the company expanded, the system's complexities grew, affecting product quality and business growth.

Zalando embarked on a journey of QA maturity, transitioning from a monolith to a distributed microservices architecture.

They adopted the MAMOS framework - Mamos is a Quality Engineering framework that assesses your Quality at Speed capabilities, identifying key assets and areas for improvement, focusing on Methods, Architecture, Management, Organization, and Skills. 

In short, Quality Engineering transformed Zalando by building microservices, evolving technology, and enabling business growth. On Black Friday 2019, 840,000 new customers were acquired, and the NPS (Net Promoter Score) soared from -2.90 to 10.81 (Q4 2017 to Q4 2018).

Zalando's commitment to autonomy, agility, and quality at speed allowed them to reinvent their business and continuously thrive in the competitive market.

Are you seeking experts to assess your organization's QA maturity and guide you toward Quality Engineering? Let's schedule a call!

Jan 24 2024
Jan 24

Authored by: Nadiia Nykolaichuk.

Libraries are known as one of the most traditional ways of helping people get valuable knowledge. Most people imagine a library as a quiet building with long shelves, filled with the scent of well-worn books and the quiet rustle of turning pages. It’s a true intellectual haven, and librarians are its guardians.

What about the modern digital world where so much content can be found in a mere click? Does it diminish the importance and popularity of libraries? Fortunately, libraries have adapted to the changing habits of society. In addition to being physical intellectual havens, many libraries are successfully becoming digital intellectual havens as well. That’s because a great number of library services can be effortlessly extended into the online domain. Let’s take a look at how this can all be implemented on a library website.

A guide through the features that make a great library website, and how Drupal helps

Libraries VS. an ocean of online resources: how to stand out?

The abundance of readily available content across the web is both a blessing and a challenge for knowledge seekers. They need to dig out the trustworthy, high-quality information. One of the best ways to do that is to rely on a respected source such as a library.

In these circumstances, a library website has the role of enhancing the library’s visibility, reputation, and brand identity online. And, of course, the mission of digitizing a library’s services, in every technical detail, lies on a website’s “shoulders.”

Given the above, a library needs a robust and reliable website built with an enterprise-level platform. Therefore, the Drupal CMS looks like a solid choice. It has unlimited options for creating website functionalities, so whatever library services you’d like to digitalize, you can.

Drupal is a free, open-source CMS with a modular structure. In addition to the Drupal core (the out-of-the-box suite of the most essential modules for a website), there are thousands of free community-contributed modules for various features, which speed up the setup through the user interface and mostly require no coding. Custom coding is used for special website requirements, and it is based on best practices in Drupal.

When it comes to enhancing a library’s brand identity, Drupal is a great choice because it is not a simplistic DIY kit with standard, unchanging templates for everyone. On the contrary, Drupal offers unlimited design options to make your library website unique from header to footer. Drupal’s theming system allows for the creation of custom-branded library websites, tailored to match the library’s aesthetics. Drupal keeps adopting the most modern technologies for themers, one of the latest examples being Single Directory Components for quick and effective creation of your library’s visual interface.

Presenting content online

An important part of digitizing a library is presenting its resources online. There are two main options for libraries to do this, and usually, they combine them both:

  • A library website can display the resources that users can borrow from a physical library. This approach creates a digital catalog or index, making it easier for users to discover materials. The information about each piece may include titles, authors, publication dates, image covers, and more. Users might be allowed to make reservations and see the availability of resources. 
  • Some content can be available online in full. This might include audiobooks, e-books, digital newspapers, podcasts, video lectures, webinars, scanned historical maps, documents, photographs, and more.
E-books and audiobooks on Yonkers Public Library’s Drupal website.E-books and audiobooks on Yonkers Public Library’s Drupal website.

When it comes to handling a great variety of online materials, a strong content management system is a true salvation. The Drupal CMS has consistent content types and media types to present any of your library’s content. Each content type or media type has a configurable field-based structure, and it’s easy for editors to add content items of a specific type. Drupal’s built-in media types such as Audio, Video, Remote video, Document, and Image might be especially useful for libraries.

E-books on Vancouver Public Library’s Drupal website.E-books on Vancouver Public Library’s Drupal website.

Library catalog pages, featured collections, or thematic displays can be presented based on specific criteria as customizable grids, lists, or tables with the help of built-in Drupal Views

The “E-Book Staff Picks” collection on Yonkers Public Library’s Drupal website.The “E-Book Staff Picks” collection on Yonkers Public Library’s Drupal website.Collections on Vancouver Public Library’s Drupal website.Collections on Vancouver Public Library’s Drupal website.

Proper categorization and search

In all the abundance of materials, users need to be able to quickly find the library resources they are looking for. In a physical library, the materials are commonly organized by format, subject, genre, author, and so on. Luckily, digital content organization is much easier than the physical equivalent.  

The robust built-in Drupal taxonomy system is one of the most essential solutions for libraries. It helps online library managers organize content into categories and subcategories by adding tags. Once content is tagged, a great number of taxonomy-based setups are possible, for example, displaying collections of content with Drupal Views based on its genre, subject, author, etc. 

Views offer powerful filtering and sorting capabilities that can be exposed to users for their most efficient content research. They can be based on taxonomy and many other criteria. For example, users can choose to sort the materials from newest to oldest, filter by the specific author, reading level, and so on.

Furthermore, Drupal has powerful contributed modules available for building customizable search interfaces such as Search API, Search Autocomplete, Facets, Apache Solr Search, Elasticsearch Connector, and more. You can use databases or third-party search services as a source of data. Your library website users can enjoy advanced search features like faceted search, fuzzy search, stem search, autocomplete, results sorted by relevance, and more.

Advanced search on State Library of Western Australia’s Drupal website.Advanced search on State Library of Western Australia’s Drupal website.Results filtered by author, genre, and topic on Vancouver Public Library’s Drupal website.Results filtered by author, genre, and topic on Vancouver Public Library’s Drupal website.

User management and access

The next thing to discuss in this guide is that library website users need their own accounts to access some of the library’s services.There also needs to be different levels of access to website content and administrative functions based on roles. The roles might include Librarian/Staff member, Member, Premium member (with access to subscription content), Content contributor, Event coordinator, and Digital archivist, to name a few.

Drupal has user account functionality and a comprehensive system of roles and permissions. Many flexible settings for user access can be provided through the built-in capabilities and add-on contributed modules.

Virtual reference services and online consultation

It’s not only in a physical library that visitors can request a librarian’s help. Library websites can provide virtual reference services, such as online chat and email reference, which allow users to get help with their research from anywhere.

Well fortunately Drupal covers that! For establishing online communication forms, Drupal developers can use the Form API, but the functionality can also be more easily created via a UI thanks to an extremely feature-rich Webform module. Email notifications, file uploads, spam protection, pre-population, customizable results view, and submission analysis are just a few examples of the endless list of possible features of Webform. With Drupal, it’s also easy to add an online chat in just a few steps.

The “Ask a Librarian” form on State Library of Western Australia’s Drupal website.The “Ask a Librarian” form on State Library of Western Australia’s Drupal website.

Resource management and online reservations of materials

Library websites often need integration with library management systems for real-time updates on inventory, or digital resource management of the content materials. A library website might also provide a reservation system for placing holds on items and the capability for users to renew borrowed items online.

Drupal has an extensive framework for integration with 3rd party APIs, including RESTful APIs that many Library Management Systems (and other systems libraries often use) provide. This integration might give you real-time updates on inventory, including information on available copies, checked-out items, new acquisitions, user account integration, real-time notifications, and other features. 

An abundance of Drupal tools might be very helpful for online reservations such as user accounts, user roles and permissions, the Webform module or the core Form API to create online forms for users to request renewals and place holds, the Rules module to trigger reminders about returning the borrowed books, and so on.

The functionality to place holds on items and view their availability on Vancouver Public Library’s Drupal website.The functionality to place holds on items and view their availability on Vancouver Public Library’s Drupal website.

Library events

Libraries often organize and promote events, such as book clubs, author talks, workshops, or lectures. It’s great to display an event calendar on a library website, as well as provide online registration. In addition to just announcing events, a library website can host events virtually. 

Drupal’s arsenal of tools for event features is huge. It’s possible to create events as content types and display them in the most appealing way using traditional Views or calendar-specific modules like Calendar View or Fullcalendar View. Modules like Smart Date can handle even the most intricate date and time settings, the Webform module or the core Form API are perfect for online registrations, streaming from third-party video services is seamless with Drupal’s Media system, and the list of possible options could go on.

The “Upcoming Events” section with a filter by category on State Library of Western Australia’s Drupal website.The “Upcoming Events” section with a filter by category on State Library of Western Australia’s Drupal website.The “Events” section with a calendar view and search filters on Yonkers Public Library’s Drupal website.The “Events” section with a calendar view and search filters on Yonkers Public Library’s Drupal website.

Sales or digital lending of content products

Content with high production costs might need to be bought or rented by library users:

  • Ways to buy include direct purchase and PDA (Patron Driven Acquisition) — a model for acquiring books and other library materials based on actual demand from patrons or users.
  • Libraries can offer digital lending of content that can be borrowed remotely. The digital lending of books on a library website can be either paid (a membership-based or a pay-per-use model) or free.

Implementing purchase, Patron Driven Acquisition (PDA), and digital lending of books involves leveraging various modules, configurations, and potentially integrating third-party services, but any approach is implementable with Drupal.

For direct purchases that involve standard e-commerce transactions, Drupal Commerce is a perfect solution. It has robust features for managing product catalogs, and offers a flexible shopping cart system and checkout workflows. It includes features for inventory management, order fulfillment, stock tracking, and more. Drupal Commerce integrates with various payment gateways, allowing for secure online transactions.

PDA (Patron Driven Acquisition) involves specialized workflows tailored to library practices, such as, for example, automated acquisition triggers based on user interactions. It also often deals with complex licensing agreements and acquisition models. So the implementation would require focusing on:

  • creating a robust search interface (Drupal modules for search)
  • tracking user interactions with digital content (Drupal modules like Google Analytics etc.)
  • setting up automated acquisition rules (the Rules module in Drupal)
  • integrating a library management system (Drupal’s extensive integration framework)
  • and more

Digital lending would require features similar to those in resource management such as integration with a library management system, access control based on user roles or permissions, and more, which Drupal does very well.

Digital learning platforms

It’s not uncommon for academic libraries to integrate with learning management systems (LMS) and other digital learning platforms. They provide students and faculty with access to educational courses, training programs, or other learning content.

When it comes to integrations, we’ve already mentioned that Drupal is a great choice thanks to its RESTful Web Services and an API-first approach. Furthermore, when it comes to learning management systems, there are some ready-to-go modules to facilitate specific integrations such as, for example, Opigno LMS or Anu LMS. But your choice is not limited by them — any other learning management systems can be integrated with your Drupal library website through some customization.

Mobile capabilities

It goes without saying that a library website needs to provide smooth experiences across all devices, be it desktops, mobile phones, or tablets. Drupal follows a mobile-first principle so Drupal websites are created with mobile responsiveness in mind, which means that page layouts are tailored to the screens they are viewed from. 

In addition to responsive web design, some libraries ask for a standalone mobile app that provides access to library services. The deal is sealed thanks to Drupal's integration capabilities, especially RESTful Web Services and JSON:API, which provide seamless ways to share data from a Drupal-based library website to a mobile application.

A mobile application providing access to the content on State Library of Western Australia’s Drupal website.A mobile application providing access to the content on State Library of Western Australia’s Drupal website.

Room or conference hall booking

Many libraries provide room, conference hall, or meeting space booking services. Offering room or conference hall booking is a way for libraries to support community engagement, facilitate learning, and enhance their role as community hubs. Another popular service is computer booking to work in a physical library.

As usual, Drupal comes up with a variety of tools to implement online booking. Its content-type functionality is great for representing the facilities. The Webform contributed module or the core Form API can be used for a booking form. The Rules module might help with creating custom booking rules. Drupal’s core roles and permissions system takes care of access control to manage who can book rooms. Modules like FullCalendar View can enhance the visual representation of room availability. In addition, there are many other options to rely on.

Venue reservations on State Library of Western Australia’s Drupal website.Venue reservations on State Library of Western Australia’s Drupal website.

Reaching diverse audiences

One of the reasons libraries go digital is to reach more and more audiences and spread the power of knowledge as wide as possible. To be true ambassadors of learning and culture, they make their websites available to wider audiences.

  • The great news is that Drupal adheres to the best accessibility practices to make content accessible to users with disabilities. This includes semantic HTML and WAI-ARIA, required Alt text, keyboard accessibility, and much more. 
  • Libraries can reach users across the globe thanks to Drupal’s multilingual capabilities. Just out of the box, there is functionality to add multiple languages, configure the specifics of translating the website’s elements and content, and even use ready community-contributed standard interface translation lines.

Evaluation and ratings

You might want to enable users to give star ratings and reviews for the library materials, which can boost engagement and serve as a basis for various collections based on ratings. The implementation will be easy because Drupal has a wealth of contributed modules for evaluation and ratings.

The “Top 10 Borrowed Books” section on Vancouver Public Library’s Drupal website.The “Top 10 Borrowed Books” section on Vancouver Public Library’s Drupal website.

Presence in social networks

Social media presence is essential for retaining a library’s visibility, communicating with users, fostering a sense of community, promoting events, and so much more. Drupal’s wide range of modules for social media integration will make the process a piece of cake.

Wrap-up

In this guide, we have only scratched the surface of how library websites implement useful features with the Drupal CMS. The specific implementations depend on the needs and requirements, and there are always a plethora of options in Drupal. We know that going digital is a huge step for a library, but the right website platform is your ally every step of the way.

Jan 24 2024
Jan 24

Introduction

A distributed system is a collection of computer programs that work together to achieve a common goal. For example, Spotify uses a distributed network of servers to store and deliver music and podcasts to its users.

But if one of these computer programs stops working, it leads to outages. According to the Uptime Institute Global Data Center Survey, 80% of data center managers and operators have experienced some type of outage in the past three years. Over 60% of these failures result in total losses of at least $100,000.

Distributed systems need to be more resilient to ensure a decrease in these outages.

8 Strategies For Building Resilient Distributed Systems

Resilience strategies provide a foundation for building robust, scalable, and reliable distributed applications and services.

1. Timeouts And Automatic Retries

Timeouts set a maximum time limit for a request to be completed. If the request takes longer than the specified time, it is considered a failure. Timeouts prevent a system from waiting indefinitely for a response, help free up resources, and prevent bottlenecks.

1. Timeouts and Retries

Assuming that the failure is due to a temporary issue, automatic retries resend a failed request after a predefined time. This strategy helps handle transient failures, such as network glitches or temporary unavailability of a service, by allowing the system to recover and complete the operation.

If implemented incorrectly, retries can amplify small errors into system-wide outages.

When setting up retries, developers must define a maximum number of retry attempts before conceding. But, configuring retries in this manner poses two significant challenges.

Challenges In Configuring Retries

Guessing The Maximum Number Of Retries

Ensuring an impactful number of retries is crucial. Selecting more than one retry attempt is generally wise while allowing several retry attempts is prudent.

But permitting too many retry attempts can result in a surge of additional requests, imposing an extra load on the system. Excessive retries can also significantly elevate the latency of requests.

Developers can make an educated guess, choose a maximum retry attempt number, and fine-tune it through trial and error until the system exhibits the desired behavior.

Vulnerabilities With Retry Storms

A retry storm occurs when a particular service encounters a higher-than-normal failure rate, prompting its clients to reattempt the failed requests. The additional load generated by these retries increases the failure rate, further slowing down the service, and leading to even more retries.

If each client is set to retry up to three times, this can result in a fourfold increase in the number of requests sent. To compound the issue further, if any of the clients' clients are configured with retries, the number of retries multiplies, potentially transforming a small number of errors into a self-induced denial-of-service attack.

Solution: Optimize Using Retry Budgets

To avoid the challenges posed by retry storms and the arbitrary assignment of retry attempt numbers, retries can be configured through retry budgets. Instead of setting a fixed maximum for the number of retry attempts per request, a service mesh monitors the ratio between regular requests and retries, ensuring it stays below a configurable limit. 

For instance, users might indicate a preference for retries to introduce no more than a 20% increase in requests. The service mesh will then conduct retries while adhering to this specified ratio.

Configuring retries invariably involves a balance between enhancing success rates and avoiding excessive additional load on the system. Retry budgets make this trade-off explicit by enabling users to specify the amount of additional load the system is willing to tolerate from retries.

2. Deadlines

A deadline serves as a specified moment beyond which a client is unwilling to wait for a response from a server. Efficient resource utilization and latency improvements are achieved when clients avoid unnecessary waiting, and servers know when to cease processing requests.
2. Deadlines
When an API requests a deadline, it establishes a point in time by which the response should be received, with the timeout indicating the maximum acceptable duration for the request. Here’s how implementing deadlines works on the client side and server side.

Deadlines On The Client Side

Remote Procedure Call (RPC) frameworks, such as gRPC leave the deadline unset, allowing a client to potentially wait indefinitely for a response. To prevent this, it is essential to explicitly set a realistic deadline for clients. 

Setting an appropriate deadline involves making an educated guess based on system knowledge validated through load testing. If a server exceeds the set deadline while processing a request, the client will terminate the RPC, signaling a DEADLINE_EXCEEDED status.

Deadlines On The Server Side

Servers may receive requests with unrealistically short deadlines, risking insufficient time for a proper response. In such cases, a gRPC server automatically cancels a call (resulting in a CANCELLED status) once the client's specified deadline has passed.

The server application must halt any spawned activity servicing the request. Long-running processes should periodically check if the initiating request has been canceled, prompting a halt in processing.

Deadline Propagation

In scenarios where a server needs to call another server to generate a response, propagating the deadline from the original client becomes important. Some gRPC implementations support the automatic propagation of deadlines from incoming to outgoing requests.

While this is the default behavior in certain languages (like Java and Go), it may need explicit enabling in others (like C++). Propagating the deadline involves converting it into a timeout, accounting for the already elapsed time. This mitigates potential clock skew issues between servers, ensuring a reliable system operation.

3. Circuit Breakers

Circuit breakers are a mechanism for preventing a system from making requests that are likely to fail. It avoids unnecessary load on a failing service and allows it time to recover.

3. Circuit Breakers

When a certain number of consecutive failures or timeouts occur, the circuit breaker ‘trips’ and stops sending requests. After a cooldown period, the circuit breaker may enter a ‘half-open’ state, allowing a limited number of requests to check if the service has recovered before fully resuming normal operation.

Avoid using circuit breakers as a substitute strategy for building resilient distributed systems. This strategy should also be avoided while dealing with access to local private resources within an application, such as an in-memory data structure. This is because employing a circuit breaker in this environment would introduce unnecessary overhead to the system.


How To Implement A Circuit Breaker/Proxy

A circuit breaker serves as a proxy for operations prone to failure, monitoring recent failure occurrences to determine whether to permit the operation to proceed or immediately return an exception.

The proxy can be implemented as a state machine with three states mirroring electrical circuit breaker functionality.

Closed

Application requests are directed to the operation. The proxy tallies recent failures, and if unsuccessful, increments the failure count. The proxy enters the Open state if failures surpass a specified threshold within a given period. 

A timeout is initiated, and upon expiry, the proxy transitions to the Half-Open state. The timer allows the system to rectify the underlying issue before the application retries.

Open

Application requests fail instantly, and an exception is returned.

Half-Open

A limited number of requests pass through to invoke the operation. If successful, the circuit breaker assumes the fault causing the previous failures has been rectified and switches to the Closed state, resetting the failure counter. Any failure reverts the circuit breaker to the Open state, restarting the timeout to provide additional recovery time.
3b. Open Close Half-Open
External mechanisms handle system recovery, such as restoring or restarting a failed component or repairing a network connection.

The Circuit Breaker pattern ensures system stability during recovery, minimizing performance impact. It rejects potentially failing operations, maintaining system response time. Event notifications during state changes aid in monitoring system health, and customization allows adaptation to different failure types. 

For instance, adjusting the timeout duration based on the severity of the failure or returning a meaningful default value in the Open state instead of raising an exception.

4. Redundancy And Replication

In distributed computing, a diverse array of computing resources exists such as containers, nodes, and clusters, giving rise to numerous elements that can be replicated. Redundancy may encompass various forms of external resources.

4. Redundancy And Replication

For instance, redundancy manifests as repeated calls to the same function from different locations in the system or the duplication of references pointing to identical data. Redundancy is also evident in duplicated execution time within a function, surplus memory, files, or processes.

Within a distributed system, an extra memory segment, file (such as a database), or an additional process can be conceptualized using the term: nodes. A redundant node refers to any node that isn't indispensable for the correct functioning of the distributed system. Simply put, any node contributing beyond the bare minimum functionality of the system is considered extraneous and redundant.

In a distributed system, there are numerous replicated functions and components. While adding nodes to a system helps the system perform better, not every added node is essential for the system.

Why Are Redundant Notes Introduced?

Transitioning from the concept of redundancy to replication helps answer this question.

While redundancy facilitates the duplication of components within our system, it isn't inherently beneficial. Redundancy fails to be advantageous if a redundant node falls out of sync with the original node from which it was copied.

Replication can be viewed as a subset of redundancy. Both involve creating redundant nodes within a system. But replication takes the idea of a redundant node a step further by ensuring that the redundant node (or replica) is identical to all other copies.

At first glance, this might seem straightforward; users might assume that a node copied from somewhere else will be identical to its original.

Not necessarily.

Consider a scenario where a node is copied, creating a redundant one. If later something about the original node is modified—perhaps its state, a value it contains, or internal behavior—what happens to the redundant node?

Nothing.

If a simple redundant node is created, there is nothing in place within the system to ensure that the redundant node will:

be aware of the change and
update itself or be updated by someone else to reflect the correct state.

Replication addresses this issue by ensuring that all replicas of a node are identical to one another and match the original node from which they were replicated.

Replication is also closely tied to transparency. With each added replica in a system, the rest of the system should continue functioning correctly, unaware of any created replicas.

If a replica is updated, the rest of the system need not be aware of it, and if a node is replicated, the rest of the system need not concern itself. For example, if a web server or a database node is replicated, end users of the distributed system shouldn't be aware of whether they are interacting with a replica of the original node.

When transparency is maintained in a system, replication provides numerous benefits:

Reliability: Replication makes the system more reliable. If one node fails and replicas are in place, a replica can step in to perform the role of the failing node, enhancing fault tolerance.


Availability: Having replicas makes the system more available. With backup replicas, the system experiences minimal downtime as these replicas can step in to replace a failing node.


Performance: Replication enhances system performance by enabling more work, serving more requests, and processing more data. This results in a faster system reduced latency, and the ability to handle a high throughput of data.


Scalability: Replication makes the system easier to scale. With more replicated nodes, it becomes simpler to scale by adding databases, servers, or services as needed. Geographical scaling is also facilitated by replicating nodes in different continents or countries.

Many distributed systems leverage this concept to address reliability, performance, and fault-tolerance challenges.

5. Graceful Degradation

Graceful degradation is the ability of a system to maintain basic functionality even when some components or services are not fully operational. This might involve prioritizing essential services during high-load or failure scenarios.
5. Graceful Degradation
For example, during a traffic spike, a system might prioritize serving core features while temporarily disabling non-essential functionalities.


Best Practices To Implement Graceful Degradation

When designing systems for resiliency and graceful degradation, consider the following four established practices, listed in order of their impact on users.

Shedding Workload

When demand exceeds the capacity of a distributed system, load shedding can be employed. In this scenario, some requests, such as API calls, database connections, or persistent storage requests, are dropped to prevent potential damage.

It's crucial to carefully decide which requests to drop, considering factors like service levels and request priorities. For instance, health checks may take precedence over other service requests.

Time-Shifting Workloads

When the system faces situations where shedding workloads is not possible, developers can use time-shifting workloads. This method allows for asynchronous processing by decoupling the generation of a request from its processing.

Developers can use message queueing tools like Apache Kafka or Google Cloud Pub/Sub to buffer data in asynchronous processing. However, developers have to keep in mind the scope of transactions, especially when spanning multiple services.

Reducing the Quality of Service

When shedding or time-shifting workloads is not desirable, but reducing the load on the system is necessary, developers may opt to lower the quality of service temporarily. For instance, one can limit available features or switch to approximate database queries instead of deterministic ones. This approach ensures that all requests are serviced, avoiding the need for time delays associated with time-shifting.

Adding More Capacity

The ideal approach, especially from a customer experience perspective, is to avoid shedding, time-shifting, or degrading services. Instead, adding capacity is often the best solution for handling workload spikes.

Cloud providers offer features like autoscaling Virtual Machines (VMs) and infrastructure components, while Kubernetes can automatically scale pods based on changes in workloads. Manual intervention is rarely required unless the pool of available resources is exhausted, such as during a zone failure in a public cloud.

Advanced capacity planning and proactive monitoring can significantly contribute to the creation of more resilient services.

6. Chaos Engineering

Chaos Engineering is the practice of intentionally injecting failures or disruptions into a system to observe how it responds and to identify weaknesses before they cause significant problems. It involves controlled experiments, such as introducing network latency, simulating server failures, or manipulating dependencies.
6. Chaos Engineering

The goal is to proactively uncover vulnerabilities and enhance system resilience. It involves systematically testing distributed systems to verify their resilience in the face of turbulent conditions and unforeseen disruptions. This approach is especially relevant for large-scale, distributed systems.

Principles Of Chaos Engineering

Chaos engineering is essentially an experimentation for understanding how a distributed system responds to failures. By formulating hypotheses and attempting to validate them, chaos engineering allows for continuous learning and the discovery of new insights about the system.

Chaos engineering delves into scenarios that typically fall outside the scope of regular testing, exploring factors that extend beyond the conventional issues tested for. The following principles serve as a foundation for conducting chaos engineering experiments.


Plan The Experiment

Meticulously plan and identify potential areas of failure. Understanding the normal behavior of the system is crucial, in determining what constitutes a baseline state. Next, formulate a hypothesis about how system components will behave under adverse conditions. Create control and experimental groups. And define metrics, such as error rates or latency.

Design Real-World Events

Outline and introduce real-world events that could disrupt the system. These events mirror actual scenarios, such as hardware failures, server issues, or sudden traffic spikes. The goal is to simulate disruptions that could impact the system's steady state.


Run The Experiment

After establishing the normal behavior and potential disruptive events, experiments are conducted on the system, preferably in a production environment. The goal is to measure the impact of failures and gain insights into the system's real-world behavior.

The ability to prove or disprove the hypothesis enhances confidence in the system's resilience. To mitigate risks, it's crucial to minimize the blast radius during production experiments. Gradually increasing the radius, if successful, ensures controlled implementation, with a rollback plan in place in case of unforeseen issues.

Monitor Results

The experiment's results offer a clear understanding of what is functioning well and what requires improvement. By comparing the control and experimental groups, teams can identify differences and make necessary adjustments.

This monitoring process helps identify factors contributing to outages or disruptions in service, enabling teams to make informed enhancements.

7. Health Checks And Monitoring

Health checks include periodic assessments of the state and performance of system components. It refers to probing services that verify their responsiveness, check resource utilization, and assess the overall system health.
7. Monitoring
Monitoring involves continuous observation of various metrics and logs to detect anomalies, performance issues, or failures. Monitoring tools collect and analyze data on system behavior, resource usage, and error rates. Alerts can be set up to notify administrators or automated systems when predefined thresholds are exceeded, allowing for a rapid response.

Types of Monitoring In Distributed Systems

There are different types of distributed systems monitoring.

Application-Level Monitoring: It centers on the performance of the system's software, enabling the detection of issues such as slow response times or errors.
Infrastructure-Level Monitoring: It concentrates on both hardware and software, aiding in the identification of problems like overloaded servers or network latency.

Both are indispensable for the effective management of distributed systems.

Various aspects of a distributed system can be monitored, including hardware, software, and networks. Hardware monitoring ensures the proper functioning of physical components like servers and storage devices. Software monitoring ensures the correct operation of applications, including databases and web servers.

How To Implement Distributed Systems Monitoring

Follow the steps given below to implement distributed system monitoring.

Step 1: Define KPIs

Identify metrics to track
Determine the frequency of data collection

Step 2: Set Up Monitoring Infrastructure

Choose appropriate tools
Deploy the monitoring infrastructure

Step 3: Collect And Analyze Data

Utilize the infrastructure to gather and analyze data.
Apply insights to troubleshoot issues or enhance performance.

Best Practices To Leverage Logging For Distributed Systems Management

Logging serves as a valuable data collection method for distributed systems monitoring, capturing information about system events, user logins, or errors. There are two main types of logs:

System Logs: These are generated by the operating system to help detect system errors.

Application Logs: These are generated by software applications to identify application errors and slow response times.

Logging provides crucial capabilities for efficiently managing distributed systems by:

Recording system events for troubleshooting.
Identifying, diagnosing, and addressing errors.
Offering insights into system performance for optimization.

To streamline logging processes, consider the following best practices:

Utilize a Log Management Tool: Tools like Retrace, Rapid7 Insight IDR (Previously, Logentries), GoAccess, and Logz.io can index and search log data efficiently.
Set Up Alerts: Receive notifications for specific events or threshold breaches.
Implement Log Aggregation: Collect log data from multiple servers for extensive distributed systems.

8. Load Balancing

Load balancing distributes incoming network traffic or workload across multiple servers to ensure no single resource is overwhelmed. This helps optimize resource utilization, throughput, and fault tolerance, and minimize response time. Through load balancing, organizations can scale horizontally and add more nodes to the system.

8. Load Balancing

How Load Balancers Operate

Load balancers can take various forms, including:

Physical devices
Virtualized instances running on specialized hardware
Software processes
Application delivery controllers

Load balancers employ diverse algorithms for distributing the load on server farms, such as round-robin, server response time, and the least connection method. These devices detect the health of backend resources, directing traffic only to servers capable of satisfying requests. 

Whether hardware or software and irrespective of the algorithm used, load balancers ensure an equitable distribution of traffic across different web servers. This prevents any single server from becoming overloaded, ensuring reliability.

Efficient load-balancing algorithms are especially crucial for cloud-based eCommerce websites. Often likened to a traffic cop, load balancers route requests to the appropriate location, averting bottlenecks and unforeseen incidents.

Load balancing is a scalable approach for supporting the numerous web-based services in today's multi-device, multi-app workflows. Coupled with platforms enabling seamless access to various applications and desktops in modern digital workspaces, load balancing ensures a consistent and reliable end-user experience.

Conclusion

The increasing cost of downtime highlights the critical need for resilient distributed systems to build apps. By using strategies like circuit breakers and redundancy, businesses strengthen their applications and handle potential issues in advance. 

Graceful degradation ensures continued functionality in tough situations, while health checks and monitoring identify and address problems on time. In the dynamic world of distributed systems, prioritizing reliability through these strategies is essential. 

These strategies not only protect against unexpected problems but also make the computing environment more adaptable, scalable, and user-friendly.

Schedule a call with our experts to learn more about how we can help you leverage these strategies to build resilient distributed systems.

Jan 24 2024
Jan 24

Janez Urevc

Strategic Growth and Innovation Manager

Janez was first exposed to free software in elementary school and has been passionate about it since. He has been involved with Drupal since his introduction while completing a computer science degree. Between 2010 and 2012 he led the transition to Drupal 7 at one of the biggest publishing companies in Slovenia. After that he joined Examiner.com which was the biggest Drupal website at the time. He started contributing to Drupal 8 early in the release cycle and due to his experience in the publishing industry became active in the media initiative and eventually became its lead. Janez is, besides free software and Drupal, passionate about challenging technical problems, complex computer systems, management processes, investing, and most sports that include putting some kind of a board below one's feet.

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