module development

Simple Ajax call with Drupal 8

Problem

I want to add a link to my content page that will dynamically change/replace content on the page using AJAX.

Solution

The solution here is add a route and to write a call back that will respond accordingly. The only difference here is 

  • The link is not a a normal link but a link that will load using a AJAX call
  • The Response here is also not normal it will be a  AjaxResponse

 

So lets see how we can do this

The core_version_requirement key in info.yml file

The core_version_requirement key specifies what versions of Drupal that the module is compatible with.

 

name: Example
type: module
core: 8.x
core_version_requirement: ^8 || ^9

 

The above example  says that the module is compatible with Drupal 9 and Drupal 9. Notice that the core key is still compulsory here

The chnage

After Drupal 8.8.0 we will not need the core key anymore.

 

 

Drupal 8 - get blocks assigned to a region

Problem: There is no specific function in Drupal 8 which we can use to get all blocks assigned to a region. We used to have a function called block_get_blocks_by_region in Drupal 7 to do this

 

Solution : Although we don't have a specific function we have the tools in Drupal 8 s Object oriented hierarchy to do the same. Here is the code

 

function my_module_get_blocks_by_region($region) {

  $blocks = \Drupal::entityTypeManager()

    ->getStorage('block')->loadByProperties([