Es gibt ein Drupal 8-RenderElement namens HtmlTag, das steuert, wie HtmlTags gerendert werden. Ich möchte dies überschreiben, damit ich das Standardverhalten ändern kann.
Ich könnte eine Klasse schreiben, die HtmlTag erweitert und überschreibt, was ich brauche, aber wie würden dann Drupal Core und das Themensystem wissen, wie ich meine neue Klasse verwenden kann?
Alternativ sollte ich vielleicht hook_theme_registry_alter()
Drupal 8 anweisen, meine neue Klasse zu verwenden?
Ich bin mir nicht sicher, wie ich das am besten erreichen kann, und es scheint keine Beispiele dafür zu geben.
Antworten:
Die Verwendung
hook_element_info_alter()
wäre eine Option, nicht sicher, ob es die beste ist.Die vorhandene Klasse enthält 2 Pre-Render-Rückrufe, die Sie in Ihrer eigenen Klasse überschreiben können:
quelle
hook_module_implements_alter
, den Hook-Implementierungen einen Befehl aufzuzwingen, wenn dies passiert$voidElements
- weil die übergeordnete Klasse das Ganze verwendet,self
anstatt daraufstatic
zu verweisen vonpreRenderHtmlTag
müsste kopiert werden$voidElements
, weil er nur geschützt und nicht privat ist und dann aufruft$element = parent::preRenderHtmlTag($element);
?static
Schlüsselwort daraufself::$voidElements
verweisen würde, würde es funktionieren, aber wenn es verwendet wird , wird immer auf die Variable im HtmlTag des Kerns verwiesen, nicht auf die erweiterte KlasseWenn hook_element_info_alter () für Sie nicht weit genug geht, gibt es ein Kernproblem beim Hinzufügen eines hook_element_plugin_alter (), um die Plugin-Klasse für ein Element (von dem RenderElements eine Teilmenge sind) direkt zu ändern: https://www.drupal.org / project / drupal / issue / 2987208
Der Kern-Patch ist eine einzeilige Ergänzung von
$this->alterInfo('element_plugin');
inElementInfoManager
, die diesen neuen Alter-Hook spezifiziert.Dann in Ihrem benutzerdefinierten Modul:
quelle