Extinderea unui bloc
Pentru a extinde blocul, veți defini un nou bloc, așa cum este descris în tutorialul următor, cu excepția faptului că veți extinde clasa Drupal\system\Plugin\Block\SystemBrandingBlock
, în loc de clasă Drupal\Core\Block\BlockBase
. Puteți adăuga apoi metoda personalizată la blocul nou definit.
https://www.valuebound.com/resources/blog/drupal-8-how-to-create-a-custom-block-programatically
Considerare alternativă
Dacă ceea ce ai nevoie de la SystemBrandingBlock
este doar date, și nu neapărat un bloc real, aș sfătui să definiți în schimb a serviciu care furnizează datele de la dvs buildToArray()
metodă.
Răspunsuri la comentarii
Este adevărat că acest lucru va crea un nou tip de bloc, în plus față de SystemBrandingBlock
. Blocurile sunt gestionate, organizate și recuperate de către Block Plugin Manager. Ai putea să scrii un decorator pentru acest serviciu și să anulezi getDefinitions()
metoda pentru a preveni originalul SystemBrandingBlock
de a fi disponibil ca definiție de plugin, obținând efectul de înlocuire a originalului SystemBrandingBlock
cu noul tău bloc.
Încă mi se pare că un serviciu este ceea ce ai nevoie. Prin examinarea codului din original SystemBrandingBlock
definiția clasei, vedem asta SystemBrandingBlock
se bazează doar pe un singur serviciu, config.fabrică
. Deci, serviciul dvs. trebuie doar să injecteze config.fabrică
serviciu pentru a prelua informațiile de care aveți nevoie pentru buildToArray()
metoda (care ar putea fi mai bine redenumită ca ceva de genul getBrandingInfo()
). Definirea unui serviciu în acest fel înseamnă că nu va trebui să vă faceți griji cu privire la implementarea sau implementarea unui bloc (care nu pare să fie ceea ce aveți nevoie, oricum) sau nevoia de a scrie un decorator de servicii.
Rețineți, de asemenea, că SystemBrandingBlock nu este sursa originală a datelor, ci mai degrabă un plugin pentru afișarea acelor date într-un format redat. Blocul este complet irelevant dacă tot ce vrei sunt datele.
În cele din urmă, vorbind în termeni mai largi, Drupal este organizat în mare parte în jurul pluginurilor, serviciilor și injecției de dependențe, iar familiarizarea cu aceste concepte vă va oferi instrumentele pentru a rezolva în mod sistematic multe probleme în Drupal.