Ich möchte meinen benutzerdefinierten Block mit benutzerdefiniertem Inhalt in Drupal 8 erstellen. Zu Beginn erstelle ich einen Block mit nur einfachem Text und arbeite ordnungsgemäß. Mein Problem ist, wie ich meine benutzerdefinierte Variable an ihn übergeben kann. Ich habe ein Tutorial darüber gesehen, mein Modulname ist tcdev
und dies ist der Inhalt der .module
Datei.
function tcdev_theme($existing, $type, $theme, $path) {
return array('tcdev' =>
array(
'variables' => array(
'title' => 'Default title',
'description' => null
),
'template' => 'block--sliderblock'
)
);
}
und mein SliderBlock.php
namespace Drupal\tcdev\Plugin\Block;
use Drupal\Core\block\BlockBase;
/**
* Provides a 'SliderBlock' block.
*
* @Block(
* id = "slider_block",
* admin_label = @Translation("Slider Block"),
* )
*/
class SliderBlock extends BlockBase{
/**
* {@inheritdoc}
*/
public function build(){
return array(
'#title' => 'my title ',
'#description' => 'my custom desc'
);
}
}
und schließlich meine Vorlagendatei block--sliderblock.html.twig
<h2>My Custom Block{{ title }}-{{ description }}</h2>
Das Ergebnis ist jedoch nur "My Custom Block-". Das Problem ist, dass Variablen nicht an die Vorlagendatei übergeben werden. Wo liegt mein Fehler?
schätzen jede Hilfe
block--sliderblock.html.twig
gerendert, das Problem ist, wie ich meine Variable an sie weitergebe !!!? Was schlagen Sie mir gemäß meinem Code vor? ? tnx für Ihre Aufmerksamkeitblock--sliderblock.html.twig
gerendert, weil Sie den Namen eines Themenvorschlags verwendet haben, würde dies gerendert, selbst wenn der Block völlig leer wäre, können Sie dies versuchen)block--sliderblock.html.twig
und nichts wurde an ihn übergeben. Ich aktiviere Debug-Informationen und Debug-Informationen sind<!-- END OUTPUT from 'themes/bootstrap/templates/block/block--system-branding-block.html.twig' <!-- FILE NAME SUGGESTIONS: x block--sliderblock.html.twig * block--slider-block.html.twig * block--tcdev.html.twig * block.html.twig --> <!-- BEGIN OUTPUT from 'themes/gttc_2016/templates/block--sliderblock.html.twig' --> <h2>Block-</h2>
block--sliderblock.html.twig
. Diese Vorlage arbeitet mit einem eigenen Satz von Variablen. (Wenn Sie diesen Zweig verwenden möchten, müssen Sie ihn aus dem Kern- oder Basisthema kopieren, und dann sehen Sie, welche Variablen sich darin befinden.) Ihre im Render-Array der Build-Funktion festgelegten Variablen enden intcdev.html.twig
. Haben Sie diese Zweigdatei erstellt?Damit ich herausgefunden habe, dass Sie eine Standardblockvorlage mit einer benutzerdefinierten Blockvorlage (Modulvorlage) überschreiben und dann Ihre Variablen an diese übergeben möchten, müssen Sie zunächst sicherstellen, dass Ihre Vorlage korrekt überschrieben wird, da Ihre aktuelle Blockvorlage anscheinend von Ihrer ausgegeben wird Themenverzeichnis (kein Modul):
Dazu sollten Sie zuerst ein Verzeichnis erstellen, das
templates/
im Stammverzeichnis Ihres Moduls aufgerufen wird, und dann Ihre Vorlage dort ablegen.Lassen Sie Drupal nun wissen, dass Sie die Vorlage in Ihrem Modul speichern. in
your_module.module
hinzufügen diese Funktion:Achten Sie abschließend darauf, wo Sie Ihre Zweigdatei ablegen und wie Sie sie nennen. Erstellen Sie ein Vorlagenverzeichnis in Ihrem Modulverzeichnis und ersetzen Sie den
_
Namen der Themenfunktion durch-
:mymodule-block.html.twig
Vergessen Sie nicht, den Cache zu leeren.
Mit Hilfe der Antwort von
Nicensin
in diesem Beitrag:Drupal 8 benutzerdefinierten Block (Modul) erstellen Sie eine Zweigvorlagendatei
quelle
Ich bin auch an diesen Punkt gekommen. Die Variablen scheinen nicht an die Blockvorlage übergeben zu werden. Ich habe fast den gleichen Code wie Sie. In meinem Fall habe ich das Debuggen von Zweigen aktiviert und den Cache in services.yml deaktiviert. Selbst beim Löschen des Caches hatte ich dieses Problem, wurde aber behoben, als ich diese Konfiguration in meiner Entwicklungsumgebung aktivierte.
quelle