Variable im Smarty Plugin zuweisen?

Wie ist es möglich in einer Smarty template function eine Variable zuzuweisen?

Beispiel: Ich möchte auf meiner index.tpl die Variable {$foo} darstellen?

myTheme/frontend/index/index.tpl

{extends file='parent:frontend/index/index.tpl'}

{block name='frontend_index_after_body'}
    {$smarty.block.parent}
    {foobar}
    {$foo}
{/block}

myTheme/_private/smarty/function.foobar.php

assign('foo', 'bar');
}
?>

 

https://developers.shopware.com/designers-guide/smarty/
Template Functions | Smarty

Im Template Block dann ausgeben mit {foobar}.

Es geht ja nicht darum einfach eine Ausgabe zu haben sonder eine Variable über das Smarty Plugin festzulegen. Die Smarty Documentation ist auch im ersten Post verlinkt.

Wenn du es wie folgt aufrufst  kann du auf {$meineVariable} zurückgreifen statt {foobar}.

{foobar assign="meineVariable"}
...
{$meineVariable}
...
{$meineVariable->arrayfeld}

Macht aber nur Sinn wenn du in der Function ein Array zurückgibst. Ansonsten wäre mich nicht bekannt dass man etwas anderes anstellen kann ausser “return”.

1 „Gefällt mir“

@brettvormkopp schrieb:

Wenn du es wie folgt aufrufst  kann du auf {$meineVariable} zurückgreifen statt {foobar}.

{foobar assign=„meineVariable“}

{$meineVariable}

{$meineVariable->arrayfeld}

Macht aber nur Sinn wenn du in der Function ein Array zurückgibst. Ansonsten wäre mich nicht bekannt dass man etwas anderes anstellen kann ausser „return“.

Ein Array zurückgeben wäre natürlich auch eine Idee. Das ich da selbst nicht drauf gekommen bin Blush
Also gibt es keine Möglichkeit über das Smarty Plugin die Variable zuzuweisen?

Folgender Code scheint einwandfrei zu funktionieren:

myTheme/frontend/index/index.tpl

{extends file='parent:frontend/index/index.tpl'}

{block name='frontend_index_after_body'}
    {$smarty.block.parent}
    {foobar assign="myVar"}
    {$myVar.output}
{/block}

myTheme/_private/smarty/function.foobar.php

assign($params['assign'], 'bar');

    // for arrays
    $template->assign($params['assign'], ['output' => 'bar']);
}
?>

 

1 „Gefällt mir“

Ah super. Meine erstes Beispiel war nicht so korrekt, habe jetzt aber mal meine alte instagram smarty-function ausgebuddelt. Wie du es hier machst ist es voll korrekt und sogar noch besser, bei dir muss man das Array nicht erst in einem foreach auflösen!