Wenn ich im Layout einen Block erstelle, kann ich benutzerdefinierte Argumente festlegen, zum Beispiel:
<block class="Company\Module\Block\Hello" name="block_name" template="test.phtml">
<arguments>
<argument name="my_arg" xsi:type="string">testvalue</argument>
</arguments>
</block>
Ich kann das Argument später im Block wie folgt abrufen:
$arg = $this->getMyArg();
Wenn ich einen Block programmgesteuert erstelle (gemäß dieser Methode: link ), kann ich benutzerdefinierte Argumente wie folgt festlegen:
$block = $this->frameworkViewLayout
->createBlock(
"Company\Module\Block\Hello",
"block_name",
['my_arg' => 'testvalue']
)
->setData('area', 'frontend')
->setTemplate($template)
->toHtml();
Der Block ist korrekt erstellt und funktioniert einwandfrei. Ich bin mir jedoch nicht sicher, wie ich das Argument später in der Klasse des Blocks abrufen kann . Ich habe versucht, es so zu machen:
$arg = $this->getMyArg();
oder
$arg = $this->getData('my_arg');
Aber es gibt nichts zurück. Was habe ich verpasst?
Sie können direkt jede Variable wie zuweisen,
und um einen variablen Wert in der Temlate-Datei zu erhalten,
quelle
Beachten Sie beim Senden eines 'Daten'-Arrays mit Argumenten, wie sie von Jackie hier erwähnt wurden:
Vermeiden Sie das Einfügen von $ data-Variablen in die Blockdefinition (__construct-Methode).
quelle
Ich bin ziemlich neu in Magento 2, aber versuche es mit
$my_arg
oder$block->getMyArg()
.Sie sollten die Verwendung vermeiden
$this
, Sie sollten verwenden$block
.Durch das Aufrufen
$this
wird eine Proxy-Methode für den$block
Unterricht aktiviert , aber ich hatte Probleme mit magischen Methoden wie Getter.quelle
Company\Module\Block\Hello.php
), also muss ich es benutzen$this
. Die Variable$block
ist dort nicht vorhanden. Wenn ich versuche, sie zu verwenden, wird eine Fehlermeldung angezeigtNotice: Undefined variable: block
.