Droptica: How to Improve Content Linking in Drupal? Linkit Module Overview

Planet Drupal - Thu, 2021/02/25 - 3:21pm

The work of a content manager requires intensive linking of various content together. Proper linking of subpages is one of the foundations of SEO. It also makes it easier to navigate your website, which may have a great impact on marketing effectiveness.

Drupal by default allows you to create links in text. You just select the appropriate button in the editor and enter the URL of the new link. However, when you need a more convenient autocomplete solution, I recommend trying the Linkit module. In this article, I’ll show you its abilities.


The module debuted at the beginning of 2010. The first stable version 1.0 for Drupal 6 was released back then. Since that time LinkIt has been updated regularly. The latest beta release, 6.0.0, saw the light of day in December 2020.


The LinkIt module is extremely popular in the Drupal world. Official statistics show over 110 thousand installations. This number also includes the websites based on our Drupal distribution – Droopler. 41% of the above websites are based on Drupal 7.

Module's creators

The module has been maintained by Emil Stjerneman for ten years, and he’s created over 900 commits in the project so far. In total, almost 80 users made contributions to it.

Purpose of the module

The LinkIt module adds to WYSIWYG editors the ability to conveniently link internal and external content. It offers built-in support for content types, taxonomies, users, files, and comments. Thanks to this, you don’t have to remember or copy the URLs you link to when you’re editing a webpage. All you have to do is enter a title fragment and the target page will be suggested by autocomplete. This is a very useful functionality, especially since errors in URLs are one of the most frequently detected problems in SEO audits.


The module is available on the Drupal.org website. Like other Drupal add-ons, you can install it from a .zip file or via Composer (using composer require drupal/linkit command).

The administration panel can be found in the menu by selecting Configuration → Config Authoring → Linkit.

Module's use

When you start editing any text format, pay attention to the "Drupal link" section.

After clicking the "Linkit enabled" checkbox, the standard link widget in CKEditor will be replaced with a new one, with built-in autocomplete.

At this stage, you can finish the module configuration.

Linkit profiles

If you want to customise autocomplete, create your own Linkit profile in the Configuration → Config Authoring → Linkit panel. Each profile has its name, description and a list of matchers.

You have the following types of matchers to choose from:

  • Content – basic matcher, searches for content by title among all or selected types of content,
  • Contact form – searches for contact forms,
  • Email – detects e-mail addresses and creates a mailto: link automatically,
  • File – searches for files from the sites/*/files directory managed by Drupal,
  • Front page – suggests a home page when you start typing "Front page",
  • Media – searches for media of selected types,
  • Taxonomy term – searches for taxonomy terms,
  • User – searches for website users.
Example of use

The easiest way to explain the operation of matchers is by using an example. I’m adding a new "Example profile" containing the following elements:

Notice that the “Metadata” fields are filled in, showing additional information about the link match found. Now, let’s set the “Example profile” as active in the text format configuration.

When you go to webpage editing, the effect of the above actions will be as follows:

You can see three matchers here, one below the other. The first one shows the article, the second one shows the Media object with a thumbnail, and the third one - the taxonomy term.

URL format

When you save the content with a link inserted via Linkit, you will notice that instead of a URL alias (of the /example-article type), the link contains its abbreviated form (e.g. /link/20). You can change this behaviour by activating the following filter in the text format settings:

Hooks and integrations

The Linkit module is object-oriented and highly flexible. You can extend it with:

  • "matcher"-type plugins, allowing you to easily add your own sources of link hints,
  • "substitution"-type plugins that return links to content.

There are currently no additional Linkit modules on Drupal.org. This is probably due to the fact that the basic version covers most cases of use.


Linkit is a simple and reliable solution that will improve the UX of your website at a low cost. It’ll also allow you to better control the structure of links and help you avoid linking errors. We’ve been using this module for many years – also as part of our own Drupal distribution – Droopler.


DrupalCon News: Contribute, collaborate, and celebrate Drupal’s 20th birthday at DrupalCon!

Planet Drupal - Thu, 2021/02/25 - 2:58pm

Learn about DrupalCon focus areas and ways you can contribute at the all-virtual event.


Ny Media: What gives the best results in your online store and where should you spend your time?

Planet Drupal - Thu, 2021/02/25 - 11:43am
What gives the best results in your online store and where should you spend your time? maja February 25, 2021

Do you spend your time on the right things when working on your online store? Do you publish content that is important to your customers? Are you focusing on the things that have the greatest effect? Using good analysis tools can help you answer such questions. A continuous and targeted analysis is important for identifying areas of problems and improvements. It provides good indicators on what is working/not working and what you should focus on, and gives you a good basis for making the right decisions when it comes to your online store.

Google Analytics 

Google Analytics is the most popular web analytics tool used to get detailed statistics about a website.  By using Google Analytics you can for example find out: 

  • Who are the users on your website
  • Where are the users coming from 
  • How the users navigate your website
  • Users shopping behavior
Presentation of data from Google Analytics - who is the typical user of the website? Presentation of data from Google Analytics - the user's shopping behavior.


Data from Google Analytics can give you an overview of what challenges the website faces, but not necessarily what is causing these challenges. Statistics from Google Analytics can for example show that many users on your website drop off on the product page and in the checkout process. What could be the reason for this? Why are so many users not completing the purchasing process? It can be challenging to know how you should tackle these issues.


A good option is to use the visual analytics tool Hotjar in combination with Google Analytics. Hotjar helps you understand the user's behavior on the website. What are the users actually doing on the website? What content is important to them? By using heat maps you can see where the users click and how they scroll through the pages. This can help you understand why users behave the way they do and can give you directions on where to start your work.

For example, by looking at how the users behave on the product page, you can see if you find any explanations for why so many drop off on this page, and why they don’t add products to the shopping cart. You can see where the users click, how far they scroll, and how they interact with the different elements on the page. Based on this information you can A/B-test different solutions, make changes, and subsequently test the effect of these changes.

By doing Hotjar analyses regularly you can get useful information such as: 

  • What content you should focus on/not focus on 
  • Where you should place your most important content 
  • Whether users have desired behavior on your site
  • Whether important elements such as buttons, links, and CTAs (calls to action) are effective 
  • Whether the site should be better adapted for desktop, mobile, or tablet
Briefly summarized 

Actions based on findings from Google Analytics and Hotjar can lead to fewer drop-offs in the purchasing process, more page views, improved design with lower bounce rates, and better conversion rates. The analyses also give a good basis for A/B-testing of different solutions on the website. The analyses are easy and cheap to implement, and if you know how to take advantage of these tools, they can provide great insight and effect, so you can take action that improves your online store. In this way, you ensure that you have the highest return on your editorial efforts. 

Don’t hesitate to contact us if you need tips or help to conduct such analyses! We would love to hear from you.


Vardot: How To Build A News and Media Digital Experience

Planet Drupal - Thu, 2021/02/25 - 11:11am
How To Build A News and Media Digital Experience Type E-book Firas Ghunaim Thu, 02/25/2021 - 12:11


Looking to build or revamp your newspaper or media website and don't know where to start?

In this e-book, the team that built award-winning and nominated digital experiences will guide you through the key technologies, tools, and components you will need to build a holistic and engaging news and media digital experience.

The information you will gain from downloading the "How To Build A Winning News Website" guide will feature essential UX features that were implemented by our team's recent digital media project for Al-Khaleej - one of the most prestigious newspaper publishers in the Middle East region.

Form Form title Download E-Book Solutions by industry Media and Entertainment Solutions by need Enterprise CMS Drupal Managed Services Omnichannel Marketing Automation On-Site SEO Social Business Community Related services UI/UX Design Digital Strategy Web Development Drupal Migration and Upgrades Support and Maintenance DevOps and Engineering Digital Marketing Product Uber Publisher Varbase Open Social Marketing Automation

Oliver Davies: Decorating an Entity Metadata Wrapper to add and refactor methods

Planet Drupal - Wed, 2021/02/24 - 6:47pm
Decorating an Entity Metadata Wrapper to add and refactor methods opdavies 24th February 2021

Following yesterday's Entity Metadata Wrapper blog post and as I continued to work on this task, I noticed some duplication and found that I was repeating several of the same chaining steps in different methods in the same file. For example:

public function getFirstName(): string { return $this ->get('profile_user_basic') // Get the pupil's profile. ->get('field_first_name') ->value(); } private function getTeacherFirstName(): string { $this ->get('profile_student') // Get the pupil's profile. ->get('field_class') // Get the pupil's class. ->get('field_teacher') // Get the class' teacher. ->get('profile_user_basic') // Get the teacher's profile. ->get('field_first_name') ->value(); }

In both cases, the last three lines are the same, where the same profile type is loaded, and the value is loaded from a field.

I wanted to find a way to remove this duplication whilst also making the code more readable. Ideally, this would mean adding a method like getFirstNameFromBasicProfile() that would group the last three steps.

Extending the EntityDrupalWrapper

I've done this before, where I've created a custom wrapper class with its own methods and extends EntityDrupalWrapper. This is how that might look:

final class PupilWrapper extends \EntityDrupalWrapper { public function __construct(\stdClass $data, $info = []) { parent::__construct('user', $data, $info); } public function getFirstName(): string { return $this->getFirstNameFromBasicProfile(); } public function getTeacherFirstName(): string { return $this ->get('profile_student') ->get('field_class') ->get('field_teacher') ->getFirstNameFromBasicProfile(); } private function getFirstNameFromBasicProfile(): string { return $this ->get('profile_user_basic') ->get('field_first_name') ->value(); } }

Whilst this has worked in previous situations, this time I had this error:

Error: Call to undefined method EntityDrupalWrapper::getFirstNameFromBasicProfile() in Drupal\my_module\EntityWrapper\PupilWrapper->getTeacherFirstName

This is because the get() method is returning an instance of EntityStructureWrapper (another class that extends EntityDrupalWrapper) which means that getFirstNameFromBasicProfile() is not accessible though it's in the same file.

I tried overridding the get() method but wasn't able to get this to work.

Decorating the EntityDrupalWrapper

Another option that I tried was to follow the Decorator design pattern, and add a new class that takes an EntityDrupalWrapper as an argument as uses it internally but doesn't extend it. Here's an example:

final class PupilWrapper { private $accountWrapper; public function __construct(\EntityMetadataWrapper $accountWrapper) { $this->accountWrapper = $accountWrapper; } public function getFirstName(): string { return $this->getFirstNameFromBasicProfile(); } public function getTeacherFirstName(): string { return $this ->get('profile_student') ->get('field_class') ->get('field_teacher') ->getFirstNameFromBasicProfile(); } private function getFirstNameFromBasicProfile(): string { return $this ->get('profile_user_basic') ->get('field_first_name') ->value(); } }

In this case, the constructor argument is an instance of EntityMetadataWrapper so that it could be either an EntityDrupalWrapper or EntityStructureWrapper.

Re-adding required wrapper methods

As the get() method is missing, this would cause an error:

Error: Call to undefined method Drupal\my_module\EntityWrapper\PupilWrapper::get() in Drupal\my_module\EntityWrapper\PupilWrapper->getFirstName()

However, we can re-add it, have it get the value from accountWrapper and return another instance of PupilWrapper so that getFirstNameFromBasicProfile() will be available.

public function get(string $property): self { return new self($this->accountWrapper->get($property)); }

The value() method is also required, but this can delegate to the decorated wrapper:

Error: Call to undefined method Drupal\my_module\EntityWrapper\PupilWrapper::value() in Drupal\my_module\EntityWrapper\PupilWrapper->getFirstName()

public function value(): string { return $this->accountWrapper->value(); } Conclusion

This was the first time that I tried extending Drupal 7's entity metadata wrappers in this way, but it worked well, removes the duplication and cleans up the code further.

Tags Drupal Drupal 7 Drupal Planet PHP

Amazee Labs: End-of-Life Drupal 8 and the upgrade to Drupal 9

Planet Drupal - Wed, 2021/02/24 - 6:40pm
<img src="https://www.amazeelabs.com/sites/default/files/styles/leading_image/public/images/current-affairs/End-of-Life-Drupal-8_4.jpg?h=994a2424&amp;itok=UpcVGIAz" width="1120" height="630" alt="Amazee Labs End-of-Life Drupal 8 and the upgrade to Drupal 9" title="End-of-Life Drupal 8 and the upgrade to Drupal 9" class="image-style-leading-image" /> With the end-of-life (EOL) for Drupal 8 closing in fast, we wanted to share our experience on how we have been handling the process of upgrading our client projects to Drupal 9.

Tag1 Consulting: On (almost) 20 years of Drupal - an interview with Moshe Weitzman

Planet Drupal - Wed, 2021/02/24 - 5:06pm

Moshe Weitzman is one of the most long standing contributors to Drupal, with one of the lowest user IDs around. His many additions to the project include the long-term maintenance of Drush, to his most recent addition: Drupal Test Traits. In this edition of our Tag1 Team Talks, Moshe takes time out of his schedule to talk with Michael Meyers, Managing Director of Tag1 to talk about the ups and downs and all of their experiences over the past 19 years and 10 months - just a couple of months short of the actual beginning of the Drupal project’s release to the world. For a transcript of this video, see Transcript: 20 years of Drupal - Moshe Weitzman. ### Related content - Introducing Drupal Test Traits In the coming weeks, Tag1 will be featuring Team Talks with some of its long time Drupal contributors. Check back here, or follow the blog to see these interviews as they become available: - Jeremy Andrews - Doug Green - Fabian Franz - Narayan Newton - Francesco Placella - Greg Lund-Chaix - [Marco...

Read more lynette@tag1co… Wed, 02/24/2021 - 08:06

clemens-tolboom starred clemens-tolboom/godot-docs

On github - Wed, 2021/02/24 - 1:36pm
clemens-tolboom starred clemens-tolboom/godot-docs Feb 24, 2021 clemens-tolboom/godot-docs

Godot Engine official documentation

1 Updated Feb 24

clemens-tolboom starred clemens-tolboom/Gut

On github - Wed, 2021/02/24 - 1:36pm
clemens-tolboom starred clemens-tolboom/Gut Feb 24, 2021 clemens-tolboom/Gut

Godot Unit Test. Unit testing tool for Godot Game Engine.

1 Updated Feb 24

clemens-tolboom starred clemens-tolboom/geodot-plugin

On github - Wed, 2021/02/24 - 1:36pm
clemens-tolboom starred clemens-tolboom/geodot-plugin Feb 24, 2021 clemens-tolboom/geodot-plugin

Godot plugin for loading geospatial data

1 Updated Feb 24

Drupal Core News: Drupal 10 Readiness initiative update for February 2021

Planet Drupal - Wed, 2021/02/24 - 11:58am

We plan to release Drupal 10 in 2022, ideally in June. That means there are 15 months left before the new major release is expected to be available. I provided an update about the initiative last time in December at DrupalCon Europe. I wanted to give a quick update on some of the highlight areas we are working on. Join the discussions and help shape Drupal 10's direction every other Monday at 19:00 UTC in the #d10readiness channel on Drupal Slack.

All work is done in Drupal 9 for now

The same way we built most of Drupal 9 in Drupal 8, we are building Drupal 10 in Drupal 9 as much as possible. There is one key exception, the CKEditor 5 project is being built as a contributed module to help test it and make it easier to collaborate on.

PHP 8 and Composer 2 support shipped

Both shipped in Drupal 9. Composer 2 support was even backported to Drupal 8, but that was not possible for PHP 8 compatibility. We plan to require PHP 8 for Drupal 10 given the end of life of PHP 7 in November 2022.

Symfony 5 support is good, Symfony 6 support in the works

One of two main drivers of the Drupal 10 timeline is Symfony 4's end of life in November 2022. We plan to update to at least Symfony 5. We did resolve all known Symfony 5 compatibility issues to date, so that looks promising.

While in Drupal 10's time, Symfony 5 will be on the long term supported 5.4 branch, that would "only" be security supported until November 2025, giving Drupal 10 a 2.5 year lifetime. To possibly expand this, we are exploring to update to Symfony 6 and resolving incompatibilities identified in Drupal 9 already. Symfony 6 development is not itself open yet, so we are only able to work on things that are already deprecated.

CKEditor 4 to 5 update needs more hands

The other big motivation behind the Drupal 10 timeline is CKEditor 4 support lasting until 2023 only. CKEditor 5 support is being worked in a dedicated contributed module for now. We are collaborating heavily with the CKSource team on runtime plugin support (Webpack DLLs), general HTML support (to avoid data loss when using CKEditor 5 on legacy content), etc. There are various great benefits of CKEditor 5 including optional collaborative editing functionality (using a paid server component).

We need more people involved in this. Dedicated CKEditor 5 meetings happen every other Thursday in #ckeditor5 on Drupal Slack at 15:30 UTC.

Starterkit theme prototype needs feedback

This is a Drupal theming paradigm shift! While inheriting from runtime base themes have served us well to avoid duplication, it causes serious problems for innovation and makes us supporting old bugs to not break live sites. So instead we aim to provide built-in support for generating a theme in core that is based off of a prepared starterkit: php core/scripts/drupal generate-theme <machine-name>. Lauri prototyped an initial solution, needs more feedback.

jQuery UI components have replacements prototyped, need reviews

Practically all of the jQuery UI components as well as various uses of Backbone.JS have replacements prototyped: dialog, toolbar, tabbing manager, autocomplete, tours, etc. All of them are in need of serious feedback though and testing.

Internet Explorer 11 support will be dropped

An agreement has been made to drop support for IE11 from Drupal 10. The official announcement is forthcoming.

Some one-off feature modules will likely be removed

We already agreed to deprecate aggregator module in Drupal 9 and remove in Drupal 10. There will possibly be other single-use core modules removed that lack maintainers and momentum. Work is underway to indicate individual module lifecycle states, although this needs more help soon for us to be able to use it to deprecate modules in time.

Drupal 10 readiness day at DrupalCon North America

The above were just some of the highlights we are working on. DrupalCon North America 2021 is online and will focus one of the days on Drupal 10 readiness. We submitted various in-depth talks to illuminate further details of the above areas and more. Join us there and use the opportunity to be at the forefront of the new version.


Golems GABB: How to work with the Google Analytics module in Drupal

Planet Drupal - Wed, 2021/02/24 - 10:03am
How to work with the Google Analytics module in Drupal Editor Wed, 02/24/2021 - 11:03

Getting deep insights into your website’s traffic and customers’ behavior is priceless. However, this can be available to anyone for free with Google Analytics. All you need is to install the tool and dive into its valuable statistics.

Today, we will show how the Drupal Google Analytics module can help you easily set up GA on your Drupal website. Let our tour of Drupal Google Analytics for Drupal begin!

Getting acquainted with Google Analytics

Google Analytics is definitely the favorite service of most SEO specialists and marketing managers. It is also very much appreciated by business owners, developers, website admins, and everyone who knows the worth of good web analytics.


Third & Grove: Drupal 9 Upgrade Considerations

Planet Drupal - Wed, 2021/02/24 - 4:07am

The advent of Drupal 8 brought about many new features and improvements. One highly anticipated change was the move to a new structured release cycle. The update promised to improve compatibilities between versions, introduce gradual deprecation of old APIs alongside new features, and strongly suggested that the days of performing full-site rebuilds to move between major versions of Drupal were in the past.


Liip: Upgrading to Drupal 9 with Lando, Composer 2 and Acquia BLT

Planet Drupal - Wed, 2021/02/24 - 12:00am

Recently, I had the opportunity to upgrade one of our projects from Drupal 8 to Drupal 9. In this blog post I would like to share some of the learnings I had while completing the upgrade. As you might expect, updating from Drupal 8 to Drupal 9 involves very little steps on the application layer. Most contributed modules are Drupal 9 ready and only a few exotic modules required me to work on a reroll of a Drupal 9 compatibility patch.

1. Keep track of Drupal 9 compatibility using Upgrade Status

To get started, I used Upgrade Status to analyse and keep track of the Drupal 9 readiness of the site.

It takes a while to scan all modules, but the UI is really helpful in identifying what is left for you to do. Follow these steps:

Run a full index from the command line:

drush us-a --all

Index individual projects:

drush us-a project_a project_b

You can access your upgrade report at yoursite.dev/admin/reports/upgrade-status.

2. Update to Composer 2

One fundamental step was to update to Composer 2. Refer to the documentation here. First we update composer itself:

composer selfupdate --2

If you have the composer version specified in your docker container, you might need to set it up there. In our case, we are using Lando, so let’s refer to the documentation on how to choose a composer version in Lando. In our lando.yml, we can explicitly specify the composer version as follows:

services: appserver: composer_version: 2

Updating to composer 2 may result in errors depending on the packages that you are using. When you run composer install, you might get an error like the following:

Your requirements could not be resolved to an installable set of packages.

Problem 1 - Root composer.json requires wikimedia/composer-merge-plugin 1.4.1 -> satisfiable by wikimedia/composer-merge-plugin[v1.4.1]. - wikimedia/composer-merge-plugin v1.4.1 requires composer-plugin-api ^1.0 -> found composer-plugin-api[2.0.0] but it does not match your constraint.

The according issue was just merged recently, but during the upgrade composer 2 support was only available via a fork of the original repository. In such a case, you can include a forked repository using the following approach. Add the following to your composer.json:

"require": { "wikimedia/composer-merge-plugin": "dev-feature/composer-v2 as 1.5.0" } "repositories": { "wikimedia/composer-merge-plugin": { "type": "vcs", "url": "https://github.com/mcaskill/composer-merge-plugin" } } 3. Update to Drupal 9 and BLT 12 using Composer

We are using Acquia BLT to automate building and testing our Drupal sites.

Updating to Drupal 9 requires updating BLT to version 12. Make sure to follow the BLT 12 upgrade notes. Most importantly, some dependencies like PHPCS have been moved into their own plugins such as acquia/blt-phpcs. The following adaptations should be performed in composer.json:

{ ... "require": { "acquia/blt": "^12", "cweagans/composer-patches": "~1.0", "drupal/core-composer-scaffold": "^9.1", "drupal/core-recommended": "^9.1", } "require-dev": { "acquia/blt-behat": "^1.1", "acquia/blt-drupal-test": "^1.0", "acquia/blt-phpcs": "^1.0", "drupal/core-dev": "^9", } }

With the BLT update, some commands have changed. The BLT 11 versions of the commands, i.e.

blt validate:all blt tests:all

Are now replaced with BLT 12 versions:

blt validate blt tests

To perform the necessary updates, you need to run the following

composer update -w

Depending on your module dependencies, this might result in update errors. Follow the next sections for tips how to update your module dependencies for Drupal 9 compatibility.

4. Update contributed modules for Drupal 9

Because of the switch to support semantic versioning, modules might have changed their major release. For example devel has abandoned the 8.x-3.x series and uses now 4.x. You can always check the module page and verify that you find a version that requires Drupal ^9. Adapt the version in composer.json as follows:

{ "require": { "drupal/devel": "^4.0", } } 5. Notes on applying patches for module compatibility

Since drupal.org now supports issue forks & merge requests based on GitLab, .diff patch files might not need be available anymore within issues. You can still apply them using the following approach. Add “.diff” at the end of the merge request url. The following example illustrates how a merge request-based patch can be applied to a module in composer.json:

{ "extra": { "patches": { "drupal/config_ignore": { "Support for export filtering via Drush (https://www.drupal.org/i/2857247)": "https://git.drupalcode.org/project/config_ignore/-/merge_requests/3.diff" } } } }

When a module doesn’t state Drupal 9 as core_version_requirement or you need to have the composer.json to be added, you can use the following approach to include such a module using the composer workflow. You can use the module based on the version that is provided by the git branch that contains the fixes.

{ "require": { "drupal/term_reference_tree": "dev-3123389-drupal-9-compatibility as 1.3-alpha3", }, "repositories": { "drupal/term_reference_tree": { "type": "git", "url": "https://git.drupalcode.org/issue/term_reference_tree-3123389.git" } } } 6. Update your custom code for Drupal 9 using Rector

Drupal 9 compatibility issues should be outlined by the Upgrade Status module mentioned previously. We are using drupal-check to automatically detect issues in the code base and this threw significantly more errors after the upgrade as code style requirements were increased. I used Rector to apply some automatic code style fixes for our custom modules. Rector wasn’t able to do all of them, so plan for some additional work here.

7. Working in multiple Lando instances of the same site

Because the Drupal 9 upgrade branch has a lot of dependencies that are different from Drupal 8, switching back and forth between branches might be cumbersome. I decided to run two instances in parallel, so that I don’t have to do full lando rebuilds.

Check out the same repository twice in two separate folders. Add and adapt the following .lando.local.yml within your second instance, so that you can run lando separately for both folders.

name: project_name_2

Use the following configuration to adapt url mappings, so that they don’t overlap with the original project.

proxy: appserver: - project_url_2.lndo.site - project_domain_2.lndo.site solr_index: - admin.solr.solr_index.project_2.lndo.site:8983 services: appserver: overrides: environment: DRUSH_OPTIONS_URI: "https://project_2.lndo.site"

In case you need have specified a portforward for the database, you should define a custom port for your second project instance

database: portforward: 32145

Now you will be able to use lando start and respective commands within both project folders and access both site instances independently.

8. Conclusions

Thanks to semantic versioning, updating from Drupal 8 to Drupal 9 involves very little steps on the application layer. Most contributed modules are Drupal 9 ready and only a few exotic modules required me to work on a reroll of a Drupal 9 compatibility patch.

As you can see from the topics being mentioned, the effort to update the infrastructure certainly accumulates with upgrading from Composer 1 to 2, PHPUnit and making sure that other toolchain components are up to date.

Thank you Karine Chor & Hendrik Grahl for providing inputs to this post.


Innoraft Drupal Blogs: PHP 8 new features and changes - Part 1

Planet Drupal - Tue, 2021/02/23 - 2:18pm
PHP 8 new features and changes - Part 1

PHP 8 brings a host of new features improvements, functions, and deprecations to the language compared to PHP 7. Among all of these new features, the JIT compiler is the one sharing the limelight. However, other features like syntax changes are also to be taken into account as it is these features that will have a greater impact on the practitioners.

souvik Tue, 02/23/2021 - 18:48 Drupal Planet Php user friendly website Web Design website development services web developers Drupal Drupal Development clean website

Oliver Davies: Cleanly retrieving user profile data using an Entity Metadata Wrapper

Planet Drupal - Tue, 2021/02/23 - 2:00pm
Cleanly retrieving user profile data using an Entity Metadata Wrapper opdavies 23rd February 2021

Today I needed to load some Drupal user data via a profile2 profile. When looking into this, most resources that I found suggest using this approach and calling the profile2_load_by_user() function directly and passing in the user object:

$account = user_load(...); $accountWrapper = new EntityDrupalWrapper('user', $account); // or `$accountWrapper = entity_metadata_wrapper('user', $account); $profile = profile2_load_by_user($account->value()); // or `$profile = profile2_load_by_user($account);` $profileWrapper = new EntityDrupalWrapper('profile2', $profile); $firstName = $profileWrapper->get('field_user_first_name')->value();

This though requires a few steps, and as I'm a fan of object-orientated code and Entity Metadata Wrappers, I wanted to find a cleaner solution.

This is my preferred method that uses method chaining. It returns the same value, is less code, and in my opinion, it's cleaner and easier to read.

$firstName = $accountWrapper->get('profile_user_basic_profile') ->get('field_user_first_name') ->value(); Tags Drupal Drupal 7 Drupal Planet PHP

Agiledrop.com Blog: EU awards consortium including Agiledrop with 6-year contract to work on the European Data Portal

Planet Drupal - Tue, 2021/02/23 - 11:12am

We’re proud to announce that Agiledrop is part of the consortium led by Capgemini Invent working on the European Data Portal.


Specbee: Drupal Project Management: What No One Is Talking About

Planet Drupal - Tue, 2021/02/23 - 11:10am
Drupal Project Management: What No One Is Talking About Shri Ganesh Hegde 23 Feb, 2021 Top 10 best practices for designing a perfect UX for your mobile app

Project Management is easy. It is like riding a bike. Except the bike is on fire. You are on fire. Everything else is also on fire.

A whole set of easy-looking tasks with enormous responsibilities to take care of - Yes you guessed it right, we are talking about "Project Management" - a task which seems easy to everybody else but to the one who is doing it. While the main intention of project management is to complete the project with less struggle and to deliver it within the budget and on time, not everybody has an idea about how much planning, strategizing, and communication it involves.

The other day I was curious about what Drupal.org has to say on project management. Nothing less than a bible for all Drupal developers, I was sure to find something of my interest for Drupal project management, & I was not surprised to find a set of Drupal Project Management Tools (a suite containing several components, structured as Drupal modules) But what left me wondering was, are these tools and project modules enough to achieve a Drupal project's goal. As a Drupal project manager, tools are just not enough to bring the scope of a Drupal project to completion. From Drupal website design to development and maintenance, there is a lot more to Drupal Project Management and it is certainly not one of those tools.


Irrespective of your approach or methodology and the type of project to be handled, Drupal requires preparation. From objectives or goals to the time frames, you need to be quite clear with what the client requires and this is possible only if you and your client are on the same page. Inputs from your team who are experts in Drupal will be your trump card in the process of planning and preparation. This will not only enable you to come up with better time frames, but you would also be able to know the prerequisites, interdependencies, and work conditions.

Never fail to miss critical inputs irrespective of how small they are to the Drupal project. You might end up missing something valuable.

Communication - Keep it Open

Always keep the communication lines open. It might be from your team, the client, or even the end-user, every input is important. Though the inputs might not be from a Drupal expert, it might still be something that you could have missed or you don't even have a clue about. This type of open communication makes managing your Drupal project easy as the success entirely depends on this. Good communication allows you to discuss challenges, roadblocks, and risks associated with your Drupal project, which in turn helps you focus better on your goal.

Time Management

The bad news is time flies. The good news is you are the pilot - Michael Altahuler

Time management is the most important factor of a Drupal project. But before you even jump into the pit and start juggling multiple tasks to ensure you manage everyone else's time, you better be good at managing your own time! And the good news in a Drupal project is that everything can be broken into smaller tasks for you and your team. Irrespective of its size, breaking down your project into smaller tasks helps your team to visualize and focus in a better manner. Keep it simple and keep it real.

Take Feedbacks Seriously

Never be reluctant to receive feedback from anybody related to your Drupal Project. Feedbacks are the step to improvement & we all need people who can give us such feedback. Feedback helps you realize your mistakes and learn ways to tackle them going further. Such constructive criticism helps in stabilizing the project before it goes off the deck completely. What is better than staying one step ahead from yesterday and performing in a superior way?

Transparency: Key to Success

You need to ensure that there is a high level of transparency between your client, the core team, and the extended project team. One way of doing this is by keeping them proactively in a loop. This corroborates trust-building and open communication between the team members. For example, if there is a delay in your Drupal project, let the client know about it! Never end up in a place where they come looking for you.

Add some Spice

Coming together is a beginning, keeping together is progress, working together is a success. - Henry Ford

Teamwork is by far the best possible way to handle any hassles in your Drupal project. Bond with your team, take a day or two out from the busy schedule to do something fun. Research has proved that such activities help people work more efficiently on a project. As a matter of fact, Drupal development companies around the world conduct Drupal cons and Drupal meetings to create a bonding between developers from around the globe.

Know Your Tools

While all the above-mentioned points play a major role in Project Management, you still need to know your tools/modules in order to successfully deliver your project.

The most popular tools in the market are the ones that help you break down your project into various tasks and sub-tasks. Most of the tools provide additional capabilities or features required for better project management.

Some of these tools include Jira, Trello, Redmine, Zoho, etc.

Drupal offers quite a few modules that can play a major role in assisting Project Management. Though Drupal 8 does not quite yet provide a suite of tools, the list includes some good modules.

Trying to manage a project without project management is like playing a game of football without a game plan. With a high workload & stress, it is essential to have the required skills to help you cross the finish line. Staying accountable & aware of all the aspects of your project will certainly guide you to project management success. Got a Drupal project in mind? Talk to us to find out how we can help.

Drupal Planet Drupal Module Drupal 9 Drupal Tutorial Drupal Development Shefali ShettyApr 05, 2017 Subscribe For Our Newsletter And Stay Updated Subscribe

Leave us a Comment

  Shefali ShettyApr 05, 2017 Recent Posts Image Drupal Project Management: What No One Is Talking About Image Managing Editorial Workflows with the Content Moderation Module in Drupal 9 Image Front-End Frameworks for Drupal – Helping you to Make a Better Choice Want to extract the maximum out of Drupal? TALK TO US Featured Success Stories

A Drupal powered multi-site, multi-lingual platform to enable a unified user experience at SEMI.


Discover how our technology enabled UX Magazine to cater to their massive audience and launch outreach programs.


Discover how a Drupal powered internal portal encouraged the sellers at Flipkart to obtain the latest insights with respect to a particular domain.



Ny Media: New module available for handling media libraries (Imageshop)

Planet Drupal - Mon, 2021/02/22 - 8:33pm
New module available for handling media libraries (Imageshop) thomas February 22, 2021

Imageshop is a Cloud based Digital Asset Management system. It lets you store all your company’s images, videos and digital files easily and securely in an online image bank.

What can Imageshop do?

Imageshop is a secure image bank, where you can store and organise your images, videos, documents and graphics, making them easy to find for anyone you choose to grant access.

Drag & drop uploading and ultra-efficient image tagging means that they are always available when and wherever they are needed, in the right format and highest quality.


About the integration

The module itself has been built to support Drupal out of the box. The main features are:

  • Uses Imageshop interface for searching, cropping and selecting media.
  • Support for image fields out of the box.
  • Support for Media library out of the box.
  • Support for CKEditor (through Media library) out of the box.
  • Easy installation / configuration.

More information about the Imageshop product can be found here.

You can download the module from drupal.org here.

The module has been made in cooperation with Screentek, the company behind the Imageshop product. We feel that Drupal needs more good alternatives for media handling and this could just be the right option for you. Feel free to contact Imageshop and have a talk to them about Imageshop and how it can help you handle your media files across your company, channels and systems.


Tag1 Consulting: On 20 Years of Drupal - an interview with Marco Molinari

Planet Drupal - Mon, 2021/02/22 - 5:29pm

In this installment of our 20 years of Drupal series of Tag1 Team Talks, Managing DIrector Michael Meyers talks with another of the earliest Drupalers, Marco Molinari. Marco has been a part of the Drupal community for nearly 20 years, joining the project at about the same time as Tag1 team member Moshe Weitzman. As the creator of the taxonomy, forum, and image modules, Marco contributed some of the most widely used features in Drupal. Marco’s contributions have shaped a significant portion of what and where the Drupal project is today. For a transcript of this video, see Transcript: 20 years of Drupal - Marco Molinari. --- Photo by Matthew Ball on Unsplash

Read more lynette@tag1co… Mon, 02/22/2021 - 11:42