Drupal News
Drupal blog: State of Drupal presentation (April 2022)
This blog has been re-posted and edited with permission from Dries Buytaert's blog.
DrupalCon North America 2022 Driesnote presentation
Last week, 1,300 Drupalists gathered in Portland, Oregon for DrupalCon North America. It was the first in-person DrupalCon in more than two years. I can't tell you how amazing it was to see everyone face-to-face.
In good tradition, I delivered my State of Drupal keynote. You can watch the video of my keynote or download my slides (262 MB).
I covered a lot of ground in this presentation, so I broke my written summary into a three-part blog series. Part 1 below is focuses on Drupal 10 updates. I'll be publishing Part 2 and Part 3 later this week, which will focus on Drupal's evolved purpose/vision and Drupal 11 proposed initiatives.
Drupal stands with UkraineI couldn't begin my presentation without acknowledging the loss of life and destruction in Ukraine. It's impacting many in the Drupal community, which is heartbreaking.
You may not be aware, but Ukraine is the sixth most active country in the world in terms of Drupal contributions. If you were to look at these contributions per capita, Ukraine's contributions are even more significant.
Both myself and the Drupal Association strongly condemn the Russian attacks on Ukraine. Many of us might want to know how to help. The Drupal Association has compiled a list of organizations that are accepting charitable donations.
Updates on Drupal 10From there, I gave an update on Drupal 10. We had targeted a Drupal 10 release date of June 2022, but we made the decision to postpone until December 2022.
We had to move the date back because we have more work to do on the CKEditor 5 migration path. We're upgrading from CKEditor 4 to CKEditor 5. CKEditor 5 is a complete rewrite, with no upgrade path or backwards compatibility.
The Drupal community (and Acquia in particular) has spent thousands of hours working on an upgrade path for CKEditor to make the upgrade easy for all Drupal users. While that has gone well, we need some additional time to work through the remaining upgrade challenges. Fortunately, we are getting great support from CKSource, the company behind CKEditor.
Next, I walked through three important facts about Drupal 10.
- Symfony 6.2 Drupal 10 will upgrade Symfony – a PHP framework that Drupal relies on heavily – from Symfony 4 to Symfony 6.2. At the time of the Drupal 10 release, Symfony 6.2 will be the latest and greatest release. For planning purposes, if you use Symfony components in your custom Drupal modules, you will have to upgrade those to Symfony 6.x.
- PHP 8.1 We have changed the minimum PHP requirement from PHP 7.4 for Drupal 9 to PHP 8.1 for Drupal 10. This is in large part because Symfony 6.2 will require PHP 8.1. Drupal users will benefit from various improvements in the new version of PHP. It also means you might have to upgrade any custom code. Because Drupal 9.3 works with PHP 8.1, you could start that work now with Drupal 9.3. It's a good way to prepare for Drupal 10.
- Drupal 9 end-of-life Drupal 9 end-of-life will happen in November 2023. Once Drupal 10 is released, you will have 11 months to upgrade your Drupal 9 sites to Drupal 10. The good news is, this should be the easiest upgrade in the history of Drupal. On Drupal 9's release date, 71% of deprecated API uses in contributed projects had automated conversions. Today, 93% of deprecated API uses for Drupal 10 across all contributed projects have automated conversions. And we're working on getting that even higher by the time that Drupal 10 is released.
With that, I provided some exciting updates on the five major Drupal 10 initiatives.
OliveroDrupal's new frontend theme, named Olivero, is now stable. It's the most accessible theme we've ever shipped. During DrupalCon, Olivero also became the default theme for Drupal 10. Everyone who installs Drupal 10 will be greeted by a new frontend theme. That is significant because we used the current default theme, Bartik, for 11 years.
ClaroDrupal's new backend theme, called Claro, also became the new default administration theme at DrupalCon. Another major milestone and reason to celebrate!
StarterkitStarterkit, a new way of creating themes in Drupal, is on track to be stable by Drupal 10's new release date. Releasing Starterkit means that we can move faster with theming improvements in Drupal Core. It also means that end users won't need to worry about whether upgrading Drupal breaks any of their sites' themes.
Instead of sub-theming a core base theme, Starterkit generates a starter theme for you from its latest defaults. This new theme will be more of a clone or fork, and will not have a runtime dependency on a core base theme.
CKEditor 5We have made great progress on our content authoring experience. Check out this video for the latest update:
Automated updatesAutomated updates, the Drupal community's number one feature request, is progressing well.
The plan is to have Automatic Updates in one of the first minor versions of Drupal 10, or even in 10.0 in December if the community can help us test and finalize it in time. Check out this video to learn more:
In Parts 2 and 3 of this blog series later this week, I'll focus on our strategy and proposed initiatives for Drupal 11.
I'd like to thank everyone who made our first in-person DrupalCon in two years a reality. It was amazing to see everyone's faces again and collaborate in person. Your contributions and hard work, as always, are inspiring to me!
I would also like to thank all the people that helped with my keynote. In no particular order, they are: Ash Sullivan, Alex Bronstein, Matthew Grasmick, Gábor Hojtsy, Jess (xjm), Ted Bowman, Baddý Sonja Breidert, Leslie Glynn, Tim Lehnen, Adam Bergstein, Adam Goodman, Théodore Biadala, and Alex Pott.
Dries Buytaert: State of Drupal presentation (April 2022)
Last week, 1,300 Drupalists gathered in Portland, Oregon for DrupalCon North America. It was the first in-person DrupalCon in more than two years. I can't tell you how amazing it was to see everyone face-to-face.
In good tradition, I delivered my State of Drupal keynote. You can watch the video of my keynote or download my slides (262 MB).
I covered a lot of ground in this presentation, so I broke down my written summary into a three-part blog series. Part 1 below focuses on Drupal 10 updates. I'll be publishing Part 2 and Part 3 later this week, which will focus on Drupal's evolved purpose/vision and Drupal 11 proposed initiatives.
Drupal stands with UkraineI couldn't begin my presentation without acknowledging the loss of life and destruction in Ukraine. It's impacting many in the Drupal community, which is heartbreaking.
You may not be aware, but Ukraine is the sixth most active country in the world in terms of Drupal contributions. If you were to look at these contributions per capita, Ukraine's contributions are even more significant.
Both myself and the Drupal Association strongly condemn the Russian attacks on Ukraine. Many of us might want to know how to help. The Drupal Association has compiled a list of organizations that are accepting charitable donations.
Updates on Drupal 10From there, I gave an update on Drupal 10. We had targeted a Drupal 10 release date of June 2022, but we made the decision to postpone until December 2022.
We had to move the date back because we have more work to do on the CKEditor 5 migration path. We're upgrading from CKEditor 4 to CKEditor 5. CKEditor 5 is a complete rewrite, with no upgrade path or backwards compatibility.
The Drupal community (and Acquia in particular) has spent thousands of hours working on an upgrade path for CKEditor to make the upgrade easy for all Drupal users. While that has gone well, we need some additional time to work through the remaining upgrade challenges. Fortunately, we are getting great support from CKSource, the company behind CKEditor.
Next, I walked through three important facts about Drupal 10.
- Symfony 6.2 Drupal 10 will upgrade Symfony – a PHP framework that Drupal relies on heavily – from Symfony 4 to Symfony 6.2. At the time of the Drupal 10 release, Symfony 6.2 will be the latest and greatest release. For planning purposes, if you use Symfony components in your custom Drupal modules, you will have to upgrade those to Symfony 6.x.
- PHP 8.1 We have changed the minimum PHP requirement from PHP 7.4 for Drupal 9 to PHP 8.1 for Drupal 10. This is in large part because Symfony 6.2 will require PHP 8.1. Drupal users will benefit from various improvements in the new version of PHP. It also means you might have to upgrade any custom code. Because Drupal 9.3 works with PHP 8.1, you could start that work now with Drupal 9.3. It's a good way to prepare for Drupal 10.
- Drupal 9 end-of-life Drupal 9 end-of-life will happen in November 2023. Once Drupal 10 is released, you will have 11 months to upgrade your Drupal 9 sites to Drupal 10. The good news is, this should be the easiest upgrade in the history of Drupal. On Drupal 9's release date, 71% of deprecated API uses in contributed projects had automated conversions. Today, 93% of deprecated API uses for Drupal 10 across all contributed projects have automated conversions. And we're working on getting that even higher by the time that Drupal 10 is released.
With that, I provided some exciting updates on the five major Drupal 10 initiatives.
OliveroDrupal's new frontend theme, named Olivero, is now stable. It's the most accessible theme we've ever shipped. During DrupalCon, Olivero also became the default theme for Drupal 10. Everyone who installs Drupal 10 will be greeted by a new frontend theme. That is significant because we used the current default theme, Bartik, for 11 years.
ClaroDrupal's new backend theme, called Claro, also became the new default administration theme at DrupalCon. Another major milestone and reason to celebrate!
StarterkitStarterkit, a new way of creating themes in Drupal, is on track to be stable by Drupal 10's new release date. Releasing Starterkit means that we can move faster with theming improvements in Drupal Core. It also means that end users won't need to worry about whether upgrading Drupal breaks any of their sites' themes.
Instead of sub-theming a core base theme, Starterkit generates a starter theme for you from its latest defaults. This new theme will be more of a clone or fork, and will not have a runtime dependency on a core base theme.
CKEditor 5We have made great progress on our content authoring experience. Check out this video for the latest update:
Automated updatesAutomated updates, the Drupal community's number one feature request, is progressing well.
The plan is to have Automatic Updates in one of the first minor versions of Drupal 10, or even in 10.0 in December if the community can help us test and finalize it in time. Check out this video to learn more:
In Parts 2 and 3 of this blog series later this week, I'll focus on our strategy and proposed initiatives for Drupal 11.
I'd like to thank everyone who made our first in-person DrupalCon in two years a reality. It was amazing to see everyone's faces again and collaborate in person. Your contributions and hard work, as always, are inspiring to me!
I would also like to thank all the people that helped with my keynote. In no particular order, they are: Ash Sullivan, Alex Bronstein, Matthew Grasmick, Gábor Hojtsy, Jess (xjm), Ted Bowman, Baddý Sonja Breidert, Leslie Glynn, Tim Lehnen, Adam Bergstein, Adam Goodman, Théodore Biadala, and Alex Pott.
DevCollaborative - Planet Drupal: Maxlength 2.0.0-RC2 - A More Accurate and Easy to Configure Character Limit
Chapter Three: Avoid a Drupal 9 Migration Headache: Use NEXT-DRUPAL to Upgrade Your Drupal 7 Site
Talking Drupal: Talking Drupal #345 - Live from DrupalCon
Today we are talking about DrupalCon 2022.
Topics- First in person DrupalCon
- Most impactful thoughts from DriesNote
- Best Sessions
- Next year in Drupal
- New technologies
- What are you going to try on the flight home
- How was your session?
- Any interesting people or conversations?
- Swag
AmyJune Hineline - @volkswagenchick Mike Miles - @mikemiles86 Stephen Cross - stephencross.com - @stephencross
HostsJohn Picozzi - www.epam.com @johnpicozzi Chris Wells - redfinsolutions.com - @chrisfromredfin
Ben's SEO Blog: What Is Drupal?
DevCollaborative - Planet Drupal: Affordable, Quality Hosting Alternatives: How to Set Up Drupal on Amezmo
#! code: Drupal 9: Using Lazy Builders
The lazy builder API in Drupal allows the creation of highly dynamic content within a render array without having to disable the cache for the entire render array or the page the content is attached to. What this means in real terms is that the initial render array can be cached quite heavily, but lazy builders allows for additional rendering to be done in after the initial rendering pass to generate content.
There are several reasons why lazy builders might be useful. The most useful reasons are to present some highly personalised or dynamic content to a user, but you might also want to offset the rendering of some slow code to give it some more fine grained caching that stores the outcome in a cache bucket.
Lazy builders work by using a normal render array, but instead of rendering the content you inject a lazy builder placeholder into the content. A callback method is used to tell Drupal how to inject the content into the placeholder. Then, at a later stage of the rendering process, Drupal will call the callback function and replace the placeholder with the actual content.
If the Big Pipe module is installed then you can also benefit from the page being streamed to the user in parts. This means that if your render function is slow then it won't cause the rest of the page to be slow. The Big Pipe module will add in placeholders to the markup as the render array is generated that are then sent to the browser first. The footer of the page is then rendered and sent separately and JavaScript is used to replace the placeholders with the actual content.
Whilst lazy building doesn't provide you with performance benefits, it can be used in conjunction with Big Pipe to mask those problems so that your page will appear to load quickly.
Dark Awesome
Dark Awesome Theme is Mobile-friendly Drupal 8,9 Responsive theme. This theme
features a custom slider, Responsive layout and Highly Customizable. It also
support Google fonts, font-awesome and it is very good for any kind of Drupal
website. Theme allow you to change the look and feel of your Drupal site.
Dark Awesome Theme is developed with all latest technologies Drupal 8 or 9,
Stable, Font Awesome and dark-awesome js etc.
For a full description of the theme, visit the project page:
https://www.drupal.org/project/dark_awesome
To submit bug reports and feature suggestions, or to track changes:
https://www.drupal.org/project/issues/dark_awesome
FEATURES:
1. Responsive, Mobile-Friendly Theme
2. In built Font Awesome
3. Mobile support (Smartphone, Tablet, Android, iPhone, etc.)
4. A total of 6 block regions
5. Custom slider with circles background
6. Sticky header
7. Awesome Drop Down main menus with toggle menu at mobile.
Available options in the theme settings:
1. Change slider content.
2. change slider header image.
3. Change footer-first details.
4. Change footer-contact details.
5. Hide/show and change copyright text.
6. Hide/show and change social icons in the footer.
7. Hide/show and change bottom to top scroller position.
Matt Glaman: drupal-check 1.4.0: enforcing PHPStan level 2
I have just tagged drupal-check 1.4.0. This is kind of a big deal. And it's either a great thing or is going to destroy my inbox with support requests. But, in my opinion, it is completely necessary.
The Drop Times: Drupal 10, 11 and Dries
The Drop Times: Dries: Drupal is for Ambitious Site Builders
Web Wash: How to Host and Deploy Drupal Sites using Cloudways
Cloudways is a managed cloud hosting provider which allows you to host and deploy Drupal sites on popular cloud platforms. They don’t host your site, instead you choose a cloud provider, i.e., DigitalOcean, Linode, AWS and so on.
The benefit of using Cloudways is that you can start on a cheap server and upgrade as needed. You get the same features if you spend $20 or $100 per month. As your site gets more traffic you can scale up to a faster server.
The server provisioning and application management is all done via the Cloudways platform. For example, if you use DigitalOcean, you won’t have to create a separate account to manage the server. You can do everything via Cloudways platform.
The servers come configured with PHP, Apache, MariaDB, Varnish, Redis (uninstalled by default) and so on.
Once provisioned you’ll be able to host an unlimited number of Drupal sites on a single server. You’ll need to make sure your server has enough resources, i.e., RAM and CPU.
Other hosting platforms charge per site and traffic. Cloudways only charger per server and you can install as many websites as the server and bandwidth can handle.
In this tutorial, you’ll learn how to install and deploy a Drupal site on Cloudways.
We’ll cover how to install and run Drupal in two ways:
- How to manually install Drupal via SSH
- How to Deploy Drupal using GitHub
Cloudways doesn’t have a one-click install for Drupal. You will need to be comfortable with Composer and using SSH to get into a server. If you want to deploy your Drupal site via Git then you’ll need to be comfortable using GitHub.
Droptica: What Drupal Development Tools are Worth Using? 7 Handy Solutions
When creating websites on Drupal, as developers, we should try to make our job easier. Managing modules, users, generating code – all these processes can be automated and performed with single commands. In this article, we'll take a look at the tools available and discuss them, giving specific examples of use.
1. Drupal ConsoleDrupal Console is a powerful Command Line Interface. It's used to generate boilerplate code and maintain and debug Drupal. The latest version of this tool is v1.9.8, released on 28 November 2021.
To add Drupal Console to our project, all we need to do is use one command:
composer require drupal/console:~1.0 \ --prefer-dist \ --optimize-autoloaderAfter that, we can use various commands provided by Drupal Console. We provide some examples below.
Module generation:
drupal generate:module \ --module="modulename" \ --machine-name="modulename" \ --module-path="/modules/custom" \ --description="My Awesome Module" \ --core="8.x" \ --package="Custom" \ --module-file \ --composer \ --test \ --twigtemplateEntity generation:
drupal generate:entity:content \ --module="modulename" \ --entity-class="DefaultEntity" \ --entity-name="default_entity" \ --base-path="/admin/structure" \ --label="Default entity" \ --is-translatable \ --revisionable --has-formsService generation:
drupal generate:service \ --module="modulename" \ --name="modulename.default" \ --class="DefaultService" \ --interface \ --interface-name="InterfaceName" \ --path-service="/modules/custom/modulename/src/"User creation:
drupal user:create username password \ --roles='authenticated' \ --email="username@testing.com" \ --status="1"As we can see, Drupal Console gives us a lot of possibilities. Another interesting option that this Command Line Interface (CLI) provides us with is running a local PHP server to test our website.
$ drupal serverThis command will launch a local server on port 8088 for us.
2. Examples for DevelopersThe Examples for Developers project is one great collection of examples of how we can write our own modules in Drupal. We have 33 different modules at our disposal, from simple blocks, through various types of forms, to controllers with REST API support. We'll probably find everything we need. This module will allow us to learn new things and work faster.
3. DevelThe Devel module includes additional functions and help pages for developers and administrators. It provides us with blocks and toolbars for quick access and developer information. We can use it to “simulate” another user. It's a very helpful functionality, especially when we need to test roles and permissions in Drupal. Devel provides us with features that help us with debugging. And the icing on the cake – we can use it to generate test content.
To install this module, we use Composer.
composer require --dev drupal/devel 4. WeightSometimes, it happens in our project that we use modules that use the same hooks. By default, Drupal doesn't allow to choose the order of module execution. However, we can work around this limitation in three ways.
Method 1 – setting the Drupal module weight during its installationIn the install file of our module, we can add HOOK_install and use it to set the module weight.
Drupal 9 provides a built-in feature to deal with this issue:
function your_module_name_install() { module_set_weight('[your_module_name]', [your_preferred_weight]); }It's a little more complicated in Drupal 7, because we have to change this field in the database by ourselves:
function your_module_name_install() { db_update('system') ->fields(array('weight' => your_preferred_weight)) ->condition('name', '[your_module_name]', '=') ->execute(); } Method 2 – Changing the weight in core.extension.ymlIf we use configurations in our project, we can change the weight of our module in the core.extension.yml file after exporting them. The weight is shown as a number after the module name. The larger the weight, the earlier the methods in the module will be executed.
Method 3 – using Modules weightThe Modules weight Drupal module will add an easy-to-use configuration of module weights. When we go to the configuration page (/admin/config/system/modules-weight/configuration), we'll see this:
Here we can easily set the weights of our modules.
5. Settings.php and services.ymlWe can find these two files in the sites folder of our Drupal installation. With just a few lines, we can make developing software a lot easier. It's a good idea to create a settings.dev.php file and put all the changes in it. During development, we can include it in the main settings.php file and remove it when we upload our website to the server.
An even more convenient option is to use an environment variable such as ENV and set it to "dev". Next, we check in settings.php if there's a settings.$env.php file. If so, we include it.
$env = getenv("D_ENV"); if (file_exists($app_root . '/' . $site_path . '/settings.' . $env . '.php')) { include $app_root . '/' . $site_path . '/settings.' . $env . '.php'; }We can keep all our support changes for development in the settings.dev.php file.
What exactly can we do there?
1. Enable error display in addition to the message that our website has encountered a problem.
$config['system.logging']['error_level'] = 'verbose';2. Disable CSS and JS aggregation – something we often forget when editing JS styles or scripts.
$config['system.performance']['css']['preprocess'] = FALSE; $config['system.performance']['js']['preprocess'] = FALSE;3. Disable render cache:
$settings['cache']['bins']['render'] = 'cache.backend.null';4. Include the development.services.yml file.
$settings['container_yamls'][] = $app_root . '/' . $site_path . '/development.services.yml';The content of the latter file may look like the one we show below.
parameters: twig.config: debug: true auto_reload: null cache: false services: cache.backend.null: class: Drupal\Core\Cache\NullBackendFactoryWe enable Twig debugging. These are helpful comments in the HTML structure that'll make it easier for us to find a template file or create hooks. In addition, we disable cache. Also, we add the cache.backend.null service, which we used earlier to disable the render cache.
6. LandoIt's a tool that facilitates the local development of our website. It allows us to run literally anything and is based on Docker. We have CLI at our disposal, which allows us to easily manage our installations. To set up a Drupal installation locally, all we need is a few commands.
First, we create a Drupal project using Composer.
composer create-project drupal/recommended-project lando-demoThen, we go to the created directory and run the command:
lando init- Choose drupal9 as the recipe,
- name your webroot web,
- and then name your project.
After this process, a .lando.yml file will be created. We'll find there a lot of different information, such as the name of our project, what services we use (initially, these will include appserver and database), addresses of our application, PHP version, or access data for our database.
Next, we run the command
lando startNow we can go to the address given in .lando.yml and finish the Drupal installation.
7. DrushA tool that every Drupal developer should know. Drush has been with us since Drupal 4.7 and is still developed. As of writing this, the latest version is 11.0.8, and it was released on 9 April 2022. Drush allows us to manage our website by importing and exporting configurations, updating the database, or cleaning the cache. Newer versions of this tool also allow us to generate code. Let's go over some useful commands:
Cache cleaning
drush crConfiguration importing
drush cimConfiguration exporting
drush cexCreating a one-time login link
drush uliModule enabling
drush en module_nameModule disabling and removing
drush pmu module_nameDatabase updating
drush updbWatchdog checking (dblog module)
drush wsWhen it comes to code generation, we have a lot of options to choose from. We recommend using the command
drush generateand finding the option that interests us the most.
Drupal development tools - summaryWe went through some interesting tools that we can use when working with Drupal. As we can see, Drupal development can be quite quick and pleasant when we know the tools that make the job easier. It's good to take some time to explore these solutions. This investment will pay for itself quickly!
The Drop Times: Which Drupal 10 Features Excite Dries?
Matt Glaman: Improve the Drupal developer experience to empower the Ambitious Site Builder
Today at DrupalCon we had the infamous Driesnote. The tone of the Driesnote focused on what we, as a project, should strategically focus on while building features on the Drupal 10.x.x branch. Dries wants to bring Drupal back to its roots by focusing on the site builder audience. This includes automatic updates, the project browser, and reimagining distributions as composable starter kits. This blog is an extension of a tweet I made at lunch, before catching my airplane home.
Note: Dries has not yet published the slides on his website and I didn't grab any pictures of the slides from my phone. I am sure you can find many on Twitter, though.
Particles Orange
Particles Orange orange Theme is Mobile-friendly Drupal 8 responsive theme. This
theme features a custom Banner, responsive layout, multiple column layouts and
is highly customizable. It also supports Google fonts, font awesome, and it is
great for any kind of business website.
particles orange Theme is developed with all latest technologies Drupal 8 or 9,
Bootstrap, Font Awesome and particle js etc.
FEATURES:
1. Responsive, Mobile-Friendly Theme
2. Supported Bootstrap
3. In built Font Awesome
4. Mobile support (Smartphone, Tablet, Android, iPhone, etc)
5. A total of 13 block regions
6. Custom Banner with particle background
7. Sticky header
8. Drop Down main menus with toggle menu at mobile.
Available options in the theme settings:
1. Change particle background image.
2. Hide/show and change copyright text.
3. Hide/show and change position bottom to top scroll.
4. Hide/show social icons in the footer.
Particles Orange
Particles Orange orange Theme is Mobile-friendly Drupal 8 responsive theme. This
theme features a custom Banner, responsive layout, multiple column layouts and
is highly customizable. It also supports Google fonts, font awesome, and it is
great for any kind of business website.
particles orange Theme is developed with all latest technologies Drupal 8 or 9,
Bootstrap, Font Awesome and particle js etc.
FEATURES:
1. Responsive, Mobile-Friendly Theme
2. Supported Bootstrap
3. In built Font Awesome
4. Mobile support (Smartphone, Tablet, Android, iPhone, etc)
5. A total of 13 block regions
6. Custom Banner with particle background
7. Sticky header
8. Drop Down main menus with toggle menu at mobile.
Available options in the theme settings:
1. Change particle background image.
2. Hide/show and change copyright text.
3. Hide/show and change position bottom to top scroll.
4. Hide/show social icons in the footer.
Three Rivers Park District Seeks Vendor For Web Maintenance Contract
Hello!
Three Rivers Park District is looking for a vendor to partner with on a maintenance contract for its website: ThreeRiversParks.org. In the request for proposal, you will find information about the Park District, the website, future projects of interest, criteria for selecting a partner and how to submit a proposal.
Please feel free to share this with anyone who might be interested in submitting a proposal.
Thank you!
Submit your site for the Global Splashawards before march 20th!
Hi all, next week March 20th is the deadline for sending in your best work for the Global Splashawards! Anyone can join so make sure you sent in your project! Get nominated in one or more categories and earn global fame! Don't wait, just do it, you'll love it! https://events.drupal.org/SplashAwards