Subscribe to Planet Drupal feed
Drupal.org - aggregated feeds in category Planet Drupal
Updated: 8 hours 34 min ago

KnackForge: How to update Drupal 8 core?

Sat, 2018/03/24 - 6:01am
How to update Drupal 8 core?

Let's see how to update your Drupal site between 8.x.x minor and patch versions. For example, from 8.1.2 to 8.1.3, or from 8.3.5 to 8.4.0. I hope this will help you.

  • If you are upgrading to Drupal version x.y.z

           x -> is known as the major version number

           y -> is known as the minor version number

           z -> is known as the patch version number.

Sat, 03/24/2018 - 10:31
Categories:

Phase2: Stop Using Features: A Guide To Drupal 8 Configuration Management

Wed, 2017/07/26 - 7:02pm
Introduction

One of the greatest improvements added in Drupal 8 was the Configuration Management (CM) system. Deploying a site from one environment to another involves somehow merging the user-generated content on the Production site with the developer-generated configuration from the Dev site. In the past, configuration was exported to code using the Features module, which I am a primary maintainer for.

Categories:

Chiranjeeb Mahanta | Blog: GSoC’17 Coding period | Week #8 | Uc WIshlist

Wed, 2017/07/26 - 6:40pm
GSoC’17 Coding period | Week #8 | Uc WIshlist chiranjeeb2410 Wed, 07/26/2017 - 12:40
Categories:

DrupalCon News: DrupalCon Vienna Welcomes 12 Grant and Scholarship Recipients

Wed, 2017/07/26 - 6:15pm

Our community is made up of incredible members from across the globe who continue to grow the Drupal project and create communities. DrupalCon is a place where community leaders and key contributors come together to meet, learn, and collaborate. The Drupal Association's Grant and Scholarship Program makes attending possible for many community members who may not have been otherwise able to join us.  

Categories:

Abhishek Lal | GSoC Blog: Examples for Developer #8 Week of Coding

Wed, 2017/07/26 - 6:04pm
Examples for Developer #8 Week of Coding Abhishek Lal B Wed, 07/26/2017 - 21:34
Categories:

LevelTen Interactive: Choosing the Best CMS for Your Marketing Team

Wed, 2017/07/26 - 5:09pm

Oftentimes, when we receive inbound leads from companies looking for a new website or new website redesign, we get a list of wants and needs and how fast and how much it will cost, but the potential client and we forget the people that will be using the platform the most.

WHO REALLY  USES THE WEBSITE?

It is no surprise that marketing teams own the internet site once it is completed. As I sit here and write this...Read more

Categories:

Love Huria: Keeping It Clean: Coding Standards That Matter

Wed, 2017/07/26 - 8:00am

A year back, I was working on a project that taught me how to keep my code clean, modular, reusable, and all those terms that seem fancy, but are actually good for you in the long run. Interesting? Yeah a bit.

But what did I do after getting into those practices?

I made mistakes. Believe me, a lot of them. But with every mistake, I learnt a lot of stuff that I had never considered before. It helped me in my thinking process, on how we should build things, what steps we need to consider when we are developing/extending a...

Categories:

Hook 42: Fun in the Sun at Drupal Camp LA 2017

Tue, 2017/07/25 - 11:36pm

We are keeping busy this summer! Immediately following Drupal Govcon we are sending Aimee and AmyJune to Drupal Camp Los Angeles. Fun in the sun while doing the Drups'.

Come find us at our sessions, panels, or in the hall to pick up some cool stickers and pleasant conversation.

Categories:

Acquia Lightning Blog: Acquia Doctrine dependencies

Tue, 2017/07/25 - 9:07pm
Acquia Doctrine dependencies Adam Balsam Tue, 07/25/2017 - 15:07

We started receiving reports of broken Lightning builds due to the release of doctrine/common:2.8.0 and/or doctrine/inflector:1.2.0 which require php ~7.1 and php ^7.0 respectively.

Lightning actually doesn't have a direct dependency on anything under the doctrine namespace. The dependencies come from drupal/core. So should drupal/core constrain doctrine/common to <=2.7.3 so that it continues to support php 5.6? No.

If you follow the dependency tree for what happens when you run composer update for a Lightning project in a php 5.6 environment, it looks like this:

  • acquia/lightning:2.1.7 requires:
  • drupal/core:~8.3.1, drupal/core:8.3.5 requires:
  • doctrine/common:^2.5, doctrine/common:2.8.0 requires php ~7.1, so it will resolve to 2.7.3, which requires:
  • doctrine/inflector:1.*, doctrine/inflector:1.2.0 requires php:^7.0, so it will resolve to 1.1.0, which simply requires php:>=5.3.2

So why are we getting reports of broken builds?

The problem arises when:

  1. Your project commits its composer.lock file (which it generally should)
  2. Your development environment has a different php version than your CI or production/test environment

If you have php 7.0 installed locally, the dependency resolution for doctrine/inflector will look like this:

  • acquia/lightning:2.1.7 requires:
  • drupal/core:~8.3.1, drupal/core:8.3.5 requires:
  • doctrine/common:^2.5, doctrine/common:2.8.0 requires php ~7.1, so it will resolve to 2.7.3, which requires:
  • doctrine/inflector:1.*, which will resolve to doctrine/inflector:1.2.0

Which will lock doctrine/inflector to v1.2.0; which requires php ^7.0. Then when you push to your php 5.6 CI environment, you'll get an error like this:

Problem 1
    - Installation request for doctrine/inflector v1.2.0 -> satisfiable by doctrine/inflector[v1.2.0].
    - doctrine/inflector v1.2.0 requires php ^7.0 -> your PHP version (5.6.24) does not satisfy that requirement.
Problem 2
    - doctrine/inflector v1.2.0 requires php ^7.0 -> your PHP version (5.6.24) does not satisfy that requirement.
    - doctrine/common v2.7.3 requires doctrine/inflector 1.* -> satisfiable by doctrine/inflector[v1.2.0].
    - Installation request for doctrine/common v2.7.3 -> satisfiable by doctrine/common[v2.7.3].

The solution, of course, is to run composer update in a dev environment that matches your CI/test/production environment.

Categories:

Xeno Media: WordPress coding standards for the Drupal developer

Tue, 2017/07/25 - 5:17pm

If you've been doing Drupal development for any amount of time, chances are that you have installed the Drupal Code to help you write clean, compliant code. Coder allows you to check your Drupal code against the Drupal coding standards and other best practices using PHP_CodeSniffer.  It can be configured to work in your IDE, and also works on the command line.

Writing code according to standards helps avoid common errors, and helps teams understand the code faster.

I installed Coder using Composer per the well written instructions.  Using this method installs it globally, so I can use it on all of my projects, and installs all the dependencies, including PHP_CodeSniffer.

I recently was tasked with working on a Wordpress site, and I started looking into the WordPress Coding Standards.  My setup didn't jive with the standard installation method since I already had PHP_CodeSniffer installed globally using composer.  I had to do a little digging to add these additional standards to my already installed setup.

Here is a quick recap on how to install Coder using composer.

Install Coder composer global require drupal/coder

To make the commands available globally, add this line to your .~/bash_profile, and that it is sourced (or restarted your terminal).

# Composer recommended PATH export PATH="$PATH:$HOME/.composer/vendor/bin"

Tell phpcs where the Drupal and DrupalPractice standards are located:

phpcs --config-set installed_paths ~/.composer/vendor/drupal/coder/coder_sniffer

Verify it worked with:

phpcs -i

You should see:

The installed coding standards are MySource, PEAR, PHPCS, PSR1, PSR2, Squiz, Zend, Drupal, and DrupalPractice

You can now navigate to your Drupal project and run the following command to use:

phpcs --standard=Drupal file.nameInstall Wordpress Coding Standards

Thanks to some help I found in the issue queue, here are the steps to install the Wordpress Coding Standards globally using composer.

composer global require wp-coding-standards/wpcs:dev-master

Again, to make these commands available globally, make sure you have this line in your ~/.bash_profile, and that it is sourced (or restarted your terminal).

# Composer recommended PATH export PATH="$PATH:$HOME/.composer/vendor/bin"

Like we did with Drupal, we need to tell phpcs where the Wordpress standards are located. We use the same installed_paths configuration set, and use a comma to list both the Drupal and Wordpress paths.

phpcs --config-set installed_paths $HOME/.composer/vendor/drupal/coder/coder_sniffer,$HOME/.composer/vendor/wp-coding-standards/wpcs

Verify it worked with:

phpcs -i

You should now see:

The installed coding standards are MySource, PEAR, PHPCS, PSR1, PSR2, Squiz, Zend, Drupal, DrupalPractice, WordPress, WordPress-Core, WordPress-Docs, WordPress-Extra and WordPress-VIP

You can now navigate to your Wordpress project and run the following command to use:

phpcs --standard=Wordpress file.nameAdd aliases

If you've worked with me, or read my posts before, you know I love aliases. They streamline your process and help make you more productive. Add these aliases into your .bash_profile, .bashrc, or wherever you keep your aliases, and source it, or restart your terminal.

alias drupalcs="phpcs --standard=Drupal --extensions='php,module,inc,install,test,profile,theme,css,info,txt,md'" alias wpcs="phpcs --standard=Wordpress"

After this you can simply type drupalcs folder_name or wpcs file.name and start writing better code!

Acknowledgements

Thanks to Micheal Porter, Albert Jankowski, and Mike Acklin for the technical review of this article, and to all the maintainers!

Photo by Ilya Pavlov on Unsplash

Categories:

DrupalCon News: Reserve your room for DrupalCon Vienna

Tue, 2017/07/25 - 4:05pm

For DrupalCon Vienna, our partner hotel, Courtyard Vienna Prater, is located in the Trabrennstraße area, where you can explore St. Stephen's Cathedral and Vienna's famous Prater park. And, the hotels we chose are perfect hubs for connecting you to a rewarding DrupalCon experience.

The fun is where the Drupalers are. Stay with us at a partner hotel to network and socialize after sessions end.

Categories:

InternetDevels: How Drupal 8 saves time & money, or a few words about backwards compatibility

Tue, 2017/07/25 - 2:50pm

Migration to Drupal 8 will save your time, effort and money in the future. It’s a fact! Discover
the great news about easy upgrades and backwards compatibility.

Read more
Categories:

ARREA-Systems: Usage of ClamAV in Drupal 8

Tue, 2017/07/25 - 11:17am
Usage of ClamAV in Drupal 8 Tue, 07/25/2017 - 17:17

This is an example of anti-virus implementation with an Ubuntu server.

Our back office management solution allows users to upload files in various sections of the application for storage or file sharing. For this reason, checking of files for virus is an important advantage.

We use the ClamAV module integration from Drupal 8.

 

1) Install ClamAV on Ubuntu

Installation on Ubuntu server is straight forward.  However, it is better to install with clamav-daemon clamav-freshclam options for later settings

Categories:

Agiledrop.com Blog: AGILEDROP: Top Drupal 8 Modules

Tue, 2017/07/25 - 7:55am
Last time, we have looked at the most popular Drupal modules. There are around 12 000 modules available for Drupal 7 and 3 000 for Drupal 8, of whom only 1 000 are in a stable version. Not so much as some would perhaps expect. However a lot of them make our lives easier each day, so this time we will look at the top Drupal 8 modules. Firstly, we must point out that modules that were already used in the blog post Most popular Drupal modules will be left out. Namely, we already presented, which are available for Drupal 8 and their popularity makes them useful for the newest version of Drupal… READ MORE
Categories:

Freelock : How do you keep a high bar of quality on dozens of sites every day?

Tue, 2017/07/25 - 1:33am

DevOps is the union of development, operations, and quality assurance -- but it's really the other way around. You start with the quality -- developing tests to ensure that things that have broken in the past don't break in the future, making sure the production environment is in a known, fully reproducible state, and setting protections in place so you can roll back to this state if anything goes wrong.

DevOpsBehavior Driven DevelopmentDrupalWordPressContinuous DeploymentContinuous IntegrationDrupal Planet
Categories:

Lullabot: Merging Entities During a Migration to Drupal 8

Mon, 2017/07/24 - 9:25pm

Migrations provide an excellent opportunity to take stock of your current content model. You’re already neck deep in the underlying structures when planning for data migrations, so while you’re in there, you might as well ensure the new destination content types will serve you going forward and not present the same problems. Smooth the edges. Fill in some gaps. Get as much benefit out of the migration as you can, because you don’t want to find yourself doing another one a year from now.

This article will walk through an example of migrating part of a Drupal 7 site to Drupal 8, with an eye toward cleaning up the content model a bit. You will learn:

  • To write a custom migrate source plugin for Drupal 8 that inherits from another source plugin.
  • To take advantage of OO inheritance to pull field values from other entities with minimal code.
  • To use the Drupal 8 migrate Row object to make more values available in your migration yaml configuration.
Scenario: A music site moving from Drupal 7 to Drupal 8

Let’s say we have a large music-oriented website. It grew organically in fits and starts, so the data model resembles a haphazard field full of weeds instead of a well-trimmed garden. We want to move this Drupal 7 site to Drupal 8, and clean things up in the process, focusing first on how we store artist information.

Currently, artist information is spread out:

  • Artist taxonomy term. Contains the name of the artist and some other relevant data, like references to albums that make up their discography. It started as a taxonomy term because editors wanted to tag artists they mentioned in an article. Relevant fields:

    • field_discography: references an album content type.
       
  • Artist bio node. More detailed information about the artist, with an attached photo gallery. This content type was implemented as the site grew, so there was something more tangible for visitors to see when they clicked on an artist name. Relevant fields:
     
    • field_artist: term reference that references a single artist taxonomy term.
    • field_artist_bio_body: a formatted text field.
    • field_artist_bio_photos: a multi-value file field that references image files.
    • field_is_deceased: a boolean field to mark whether the artist is deceased or not.
Choosing the Migration’s Primary Source

With the new D8 site, we want to merge these two into a single node type. Since we are moving from one version of Drupal to another, we get to draw on some great work already completed.

First, we need to decide which entity type will be our primary source. After some analysis, we determine that we can’t use the artist_bio node because not every Artist taxonomy term is referenced by an artist_bio node. A migration based on the artist_bio node type would leave out many artists, and we can’t live with those gaps.

So the taxonomy term becomes our primary source. We won’t have an individual migration at all for the artist_bio nodes, as that data will be merged in as part of the taxonomy migration.

In addition to the migration modules included in core (migrate and migrate_drupal), we’ll also be using the migrate_plus module and migrate_tools.

Let’s create our initial migration configuration in a custom module, config/install/migrate_plus.migration.artists.yml.

id: artists label: Artists source: plugin: d7_taxonomy_term bundle: artist destination: plugin: entity:node bundle: artist process: title: name type: plugin: default_value default_value: artist field_discography: plugin: iterator source: field_discography process: target_id: plugin: migration migration: albums source: nid

This takes care of the initial taxonomy migration. As a source, we are using the default d7_taxonomy_term plugin that comes with Drupal. Likewise, for the destination, we are using the default fieldable entity plugin.

The fields we have under “process” are the fields found on the Artist term, though we are just going to hard code the node type. The field_discography assumes we have another migration that is migrating the Album content type.

This will pull in all Artist taxonomy terms and create a node for each one. Nifty. But our needs are a bit more complicated than that. We also need to look up all the artist_bio nodes that reference Artist terms and get that data. That means we need to write our own Source plugin.

Extending the Default Taxonomy Source Plugin

Let’s create a custom source plugin, that extends the d7_taxonomy_term plugin.

use Drupal\taxonomy\Plugin\migrate\source\d7\Term; use Drupal\migrate\Row; /** * * @MigrateSource( * id = "artist" * ) */ class Artist extends Term { /** * {@inheritdoc} */ public function prepareRow(Row $row) { if (parent::prepareRow($row)) { $term_id = $row->getSourceProperty('tid'); $query = $this->select('field_data_field_artist', 'fa'); $query->join('node', 'n', 'n.nid = fa.entity_id'); $query->condition('n.type', 'artist_bio') ->condition('n.status', 1) ->condition(fa.field_artist_tid, $term_id); $artist_bio = $query->fields('n', ['nid']) ->execute() ->fetchAll(); if (isset($artist_bio[0])) { foreach (array_keys($this->getFields('node', 'artist_bio')) as $field) { $row->setSourceProperty($field, $this->getFieldValues('node', $field, $artist_bio[0]['nid'])); } } } } }

Let’s break it down. First, we see if there is an artist_bio that references the artist term we are currently migrating.

$query = $this->select('field_data_field_artist', 'fa'); $query->join('node', 'n', 'n.nid = fa.entity_id'); $query->condition('n.type', 'artist_bio') ->condition('n.status', 1) ->condition(fa.field_artist_tid', $term_id);

All major D7 entity sources extend the FieldableEntity class, which gives us access to some great helper functions so we don’t have to write our own queries. We utilize them here to pull the extra data for each row.

if (isset($artist_bio[0])) { foreach (array_keys($this->getFields('node', 'artist_bio')) as $field) { $row->setSourceProperty($field, $this->getFieldValues('node', $field, $artist_bio[0]['nid'])); } }

First, if we found an artist_bio that needs to be merged, we are going to loop over all the field names of that artist_bio. We can get a list of all fields with the FieldableEntity::getFields method.

We then use the FieldableEntity::getFieldValues method to grab the values of a particular field from the artist_bio.

These field names and values are passed into the row object we are given. To do this, we use Row::setSourceProperty. We can use this method to add any arbitrary value (or set of values) to the row that we want. This has many potential uses, but for our purposes, the artist_bio field values are all we need.

Using the New Field Values in the Configuration File

We can now use the field names from the artist_bio node to finish up our migration configuration file. We add the following to our config/install/migrate_plus.migration.artists.yml:

field_photos: plugin: iterator source: field_artist_bio_photos process: target_id: plugin: migration migration: files source: fid 'body/value': field_artist_bio_body 'body/format': plugin: default_value default_value: plain_text field_is_deceased: field_is_deceased

The full config file:

id: artists label: Artists source: plugin: d7_taxonomy_term bundle: artist destination: plugin: entity:node bundle: artist process: title: name type: plugin: default_value default_value: artist field_discography: plugin: iterator source: field_discography process: target_id: plugin: migration migration: albums source: nid field_photos: plugin: iterator source: field_artist_bio_photos process: target_id: plugin: migration migration: files source: fid 'body/value': 'field_artist_bio_body/value' 'body/format': plugin: default_value default_value: plain_text field_is_deceased: field_is_deceased Final Tip

When developing custom migrations with the Migrate Plus module, configuration is stored in the config/install of a module. This means it will only get reloaded if the module is uninstalled and then installed again. The config_devel module can help with this. It gives you a drush command to reload a module’s install configuration.

Categories:

Mediacurrent: Creating Content with YAML Content Module

Mon, 2017/07/24 - 2:37pm

In my previous post, I introduced the YAML Content module and described the goal and usage for it at a high level. In this post, I aim to provide a more in-depth look at how to write content for the module and how to take advantage of a couple of the more advanced options included.
 

Categories:

Vardot: Top 10 Free Drupal Themes

Mon, 2017/07/24 - 10:57am
Top 10 Free Drupal Themes Dmitrii Susloparov Mon, 07/24/2017 - 11:57

As of July 2017, there are 1500+ themes registered with the Drupal project. The sheer number of choices makes the selection of a theme difficult for most newcomers to Drupal. Some Drupal themes are free while the rest are known as being premium, i.e., they are available for a fee. Sometimes you can save more money by investing in a paid theme, but this topic we’ll cover in another article. This one lists the top 10 free Drupal themes, each of them in our opinion is a great choice for a beginning sitebuilder.

Are you a Drupal newcomer? Use our learning guide to become a guru!

Best Free Drupal Themes: Selection criteria

The main question when compiling the list of our proposed themes was how to make the comparison fair and objective. After much discussion, we decided that a theme must satisfy the following basic criteria for it to be considered in the list of top 10 Drupal themes:

 

  1. It must be free.

  2. It must run on either Drupal 7 or Drupal 8 (or better, both).

  3. It must be actively maintained and developed.

  4. It must be covered by the Drupal security advisory policy.
    Coverage under the policy does not guarantee that a theme is free of vulnerabilities. Rather, it means that the theme has been reviewed for any publicly known vulnerabilities by the Drupal security team.

  5. It must be for general purpose.
    Some Drupal themes are designed for specific industries, e.g., restaurant. For the purpose of this list, only general purpose themes are considered.

  6. It must be responsive.

A responsive theme adjusts its layout to accommodate different screen sizes and resolutions. This is a basic requirement for today's mobile platforms.

  1. It must run out-of-the-box.

There are themes, and there are theme frameworks (also known as base themes). A theme framework is like a blank canvas with tools which a theme developer uses to build a custom theme. The top 10 list only contains Drupal themes which one can use out-of-the-box as feature-complete themes.

 

In the course of conducting this study, it was observed that a small number of organizations have each generated a relatively large number of themes, albeit good ones, that are only marginally different. If an organization makes multiple but similar quality Drupal themes, only representative themes may be selected for inclusion in the following theme set. The individual or organization responsible for a theme is identified below in brackets.

 

Anyway, we have kept you in suspense for too long already. Based on the above criteria, the top 10 free Drupal themes are:

 

  • BlueMasters (by More than Themes)

  • Corporate Clean (by More than Themes)

  • Danland (by DanPros)

  • Business (by Devsaran)

  • Nexus (by Devsaran)

  • Zircon (by WeebPal)

  • Business Responsive Theme (by Zymphonies)

  • Drupal8 Zymphonies (by Zymphonies)

  • Fontfolio (by Marios Lublinski)

  • Integrity (by knackforge)

 

Below, we discuss each theme in more detail.

BlueMasters

 

BlueMasters is a popular WordPress theme that has been ported to the Drupal platform by More Than Themes. We recommend this theme, not just on its features only, but that it is maintained by More Than Themes, a solid well-reputed organization in the Drupal community. The theme supports a maximum layout of 12 regions. A region is the primary layout unit to which a component block can be placed. Therefore, the more regions a theme supports, the more customizable it is. With this Drupal theme, you can display a slideshow on the front page, and partition information into either 2 or 3 columns on a web page. In addition, you can organize and access your contents via multi-level dropdown menus. BlueMasters, however, is only available on Drupal 7.

Corporate Clean

 

Like BlueMasters, Corporate Clean is a theme ported to Drupal by More Than Themes. We recommend this theme because it offers a unique feature that is missing in many free Drupal themes, namely, a color scheme selector. Most free themes have a fixed color scheme which means that you cannot change the color of a button or the page background. With Corporate Clean, you can adjust the color of some screen elements. This theme supports 1-column, 2-column as well as 3-column layout. Multi-level drop-down menus and slideshows are also supported. The Corporate Clean theme only runs on Drupal 7.

Danland

 

We recommend Danland because, among the Drupal themes on this top 10 list, it gives you the most flexibility to fine tune the layout of your web page. Specifically, it supports a maximum of 26 regions, the highest number on the list. The layout can have 1, 2, or 3 columns. Danland runs on Drupal 6, 7, and 8.

Business

 

In terms of the major features, the Business theme is at par with other themes on the list. We recommend the theme because of the finer feature details. For example, the slideshow feature allows the display of up to 5 images. Note that some free Drupal themes only allow a maximum of 3. Also, the Business theme has a color module, which is missing in most free themes. You can specify one of 6 fixed colors for web components. The Business theme is available for Drupal 7 and 8. However, the Drupal 7 version is not responsive, and is currently in maintenance mode only. The Drupal 8 version, on the other hand, is being actively developed, and is fully responsive.

Nexus

 

Nexus is arguably the most visually appealing theme on the top 10 list. The clean design together with the solid support by Devsaran, its maintainer organization, put Nexus on the list. The theme runs on both Drupal 7 and 8 with the Drupal 8 version being a pre-release version only. The layout can have a maximum of 15 regions, which is average on the top 10 list. You can specify a 1-column or 2-column design on the layout. The slideshow feature supports a maximum of 3 images.

Zircon

 

If your Drupal website is rich in images, then you should definitely consider using Zircon as the theme. You will be delighted by its slideshow, slider, as well as carousel features. You can run Zircon on both Drupal 7 and 8. However, the current Drupal 8 version has remained as a release candidate since November 2015. The Zircon layout supports 18 regions in 3 columns.

Business Responsive

Not all themes on the top 10 list support Drupal 8. Even for those which do, some are in pre-release status only. If you are looking for a stable Drupal 8 theme, you should consider the Business Responsive theme which has reached the 1.0 stable release status. This theme supports 17 regions in 1-column, 2-column, or 3-column layouts. It also has a slider feature, but installing the feature requires some manual steps after installing the theme. This theme supports the use of social media icons for popular platforms such as Facebook, Twitter, Google+, LinkedIn, and Pinterest. You can install this theme on both Drupal 7 and 8.

Drupal8 Zymphonies

 

 

If you want a stable Drupal 8 theme that offers more bells and whistles than the Business Responsive theme, Drupal8 Zymphonies comes highly recommended. This theme is, fittingly, only available on Drupal 8. It shares many features with other themes on the top 10 list, such as multi-level menus and 1/2/3-column layout. It distinguishes itself by offering 22 regions for placing blocks, the second highest on the theme list. Also, you can customize the Zymphonies credit link, all supported social media links, and the title and description fields in the main banner.

Fontfolio

 

If your website is multilingual, you should definitely consider Fontfolio because it offers easy setup for links to webpages in all supported languages. Like BlueMasters, this theme is a popular WordPress theme that has been ported to Drupal. Fontfolio can run on both Drupal 7 and 8. Note that some existing features of the Drupal 7 version are still under development for the Drupal 8 version. Fontfolio supports a maximum of only 8 regions in its layout, the fewest on the list. Yet, overall, it is a simple but elegant Drupal theme that includes a 2-column responsive design.

Integrity

 

If you want a simple no-frills theme that just works out-of-the-box, Integrity may be your choice. It is a Drupal 8 only theme. Its feature set is, in general, at par with the rest of the themes. Integrity supports multi-level menus and slideshows that display up to 5 images. The layout includes a 3-column design. The theme has defined 17 regions into which Drupal blocks can be placed.

Summary & Conclusion

Drupal has a wealth of good free themes. Each of them is ideal for Drupal users who have relatively simple requirements and want to try something other than the default theme. If a free theme cannot fully satisfy your particular requirements, then you may want to use its premium alternative or even to hire a professional Drupal agency that can assist you with your needs.

 

Which theme do you like the most among our top 10 choices? Perhaps, you have your own favourite theme that is not on our list. What are the goals of your project and what kind of theme are you looking for? Share with us your thoughts in the comments section below!

Categories:

Glassdimly tech Blog: Config Management Roundup

Mon, 2017/07/24 - 7:05am

Quite the problem—Drupal config management on local and prod.

Drupal 8 can be quite punctilious: it will simply refuse to work if there's a mismatch between database and config objects on the filesystem.

So... how do we manage two sets of configurations—one for local, and one for production?

The Problem

I have modules like varnish installed on production that shouldn't be enabled on local, and modules that are enabled on local that shouldn't be enabled on production.

Categories: