Расширение блока
Чтобы расширить блок, вы определите новый блок, как описано в следующем руководстве, за исключением того, что вы расширите класс Drupal\system\Plugin\Block\SystemBrandingBlock
, вместо класса Друпал\Ядро\Блок\БлокБасе
. Затем вы можете добавить свой пользовательский метод во вновь определенный блок.
https://www.valuebound.com/resources/blog/drupal-8-how-to-create-a-custom-block-programmatically
Альтернативное рассмотрение
Если то, что вам нужно от СистемаБрендингБлок
это просто данные, и не обязательно фактический блок, я бы посоветовал вместо этого определить оказание услуг который предоставляет данные из вашего построить массив ()
метод.
Ответы на комментарии
Это правда, что это создаст новый тип блока, в дополнение к СистемаБрендингБлок
. Блоки управляются, организуются и извлекаются Менеджер плагинов блоков. Вы можете написать декоратор для этой службы и переопределить получитьопределения()
способ предотвращения исходного СистемаБрендингБлок
быть доступным в качестве определения плагина, достигая эффекта замены оригинального СистемаБрендингБлок
с вашим новым блоком.
Мне все еще кажется, что услуга - это то, что вам нужно. Изучив код в оригинале СистемаБрендингБлок
определение класса, мы видим, что СистемаБрендингБлок
опирается только на одну службу, config.factory
. Таким образом, вашему сервису нужно только ввести config.factory
службы, чтобы получить информацию, необходимую для построить массив ()
метод (который может быть лучше переименован как что-то вроде получить информацию о брендинге ()
). Определение службы таким образом означает, что вам не нужно беспокоиться о реализации или развертывании блока (что в любом случае не похоже на то, что вам нужно) или необходимости писать декоратор службы.
Имейте также в виду, что SystemBrandingBlock — это не исходный источник данных, а скорее плагин для отображения этих данных в представленном формате. Блок совершенно не имеет значения, если вам нужны только данные.
Наконец, говоря в более широком смысле, Drupal организован в основном вокруг плагинов, сервисов и внедрения зависимостей, и знакомство с этими концепциями даст вам инструменты для систематического решения многих проблем в Drupal.