BlockContentThemeHooks.php

Namespace

Drupal\block_content\Hook

File

core/modules/block_content/src/Hook/BlockContentThemeHooks.php

View source
<?php

declare (strict_types=1);
namespace Drupal\block_content\Hook;

use Drupal\Core\Hook\Attribute\Hook;
use Drupal\Core\Link;
use Symfony\Component\HttpFoundation\RequestStack;

/**
 * Theme hook implementations for block_content.
 */
class BlockContentThemeHooks {
  public function __construct(protected readonly RequestStack $requestStack) {
  }
  
  /**
   * Implements hook_preprocess_HOOK() for entity_add_list.
   *
   * Adds query parameters to the add links on the block add page so they are
   * forwarded to the add form, this allows a theme to be set automatically
   * on the block.
   *
   * @see \Drupal\block_content\Controller\BlockContentController::addForm()
   */
  public function preprocessEntityAddList(&$variables) : void {
    $query = $this->requestStack
      ->getCurrentRequest()->query
      ->all();
    if (count($query) === 0) {
      return;
    }
    foreach ($variables['bundles'] as $bundleId => $bundle) {
      if ($bundle['add_link'] instanceof Link) {
        $url = $bundle['add_link']->getUrl();
        if ($url->getRouteName() !== 'entity.block_content.add_form') {
          continue;
        }
        $url->setOption('query', $query);
        $variables['bundles'][$bundleId]['add_link']->setUrl($url);
      }
    }
  }

}

Classes

Title Deprecated Summary
BlockContentThemeHooks Theme hook implementations for block_content.

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.