Funktion mit smarty aus Template aufrufen

Hallo zusammen,

ich habe versucht die Funktion “fx_test()”, welche sich in modules/functions.php befindet aus categoriestree.tpl aufzurufen - bekomme aber nur “fx_test()” im Template ausgegeben aber nicht den return Wert.

[{assign="test" value="@fx_test()"}]

Kann mir jemand weiterheflen, ob ich in der smarty-Syntax was falsch mache oder etwas anderes zur Berücksichtigen ist.

Vielen Dank vorab, js

Hallo js,

im Admin des Shops kann eingestellt werden, wie mit PHP in Smarty umgegangen werden soll. Aber eigentlich ist das nicht die feine englische Art. Für funktionale Erweiterungen schreiben OXID-Entwickler Module :wink:

Gruß

Danke Marco für die schnelle Rückmeldung,

ja, das ist so eine Sache als oxid-Frischling ist zwischen wollen und können doch noch eine Lücke.:rolleyes:

Kannst du mir sagen, wo sich die Einstellung im Admin-Bereich befindet, hab jetzt beim Durchsehen nichts auffälliges gefunden.

LG, js

Stammdaten -> Grundeinstellungen -> System -> weitere Einstellungen -> “Was soll mit PHP-Code in Templates gemacht werden”

@ Lösung als Modul:
Das war auch mein grundsätzlicher Ansatz.
Mein Vorhaben: Ich brauch das Ergebnis von LoadCategoryArticles() in categoriestree.tpl angezeigt - sowohl im list.tpl als auch details.tpl. Dh die Artikel sollen unterhalb der aktuellen Kategorie angezeigt werden.

Nun mein Stand dazu ist:
x) unter modules eine Klasse zu erstellen (Namenskonventionen: module_name, class_name extends class_name_parent habe ich berücksichtigt)
x) Methode bekommt aktuelle CatID übergeben und gibt ein Array mit den Artikel zurück
x) im Admin Bereich die Klasse unter Module zu erfassen ist mir auch klar

Aber dann kommen 2 Fragen:
x) Welche Klasse muss ich im Admin/Module erweitern um an mein Ziel zu kommen? Also Eintrag "??? => module_name"
x) Über welche Variable kann ich aus dem Template (categoriestree.tpl) auf die Methode zugreifen (zB $oView)

Hinweise zu diesen Fragen, sind sehr willkommen.

LG, js

Ich muss leider an dieser Stelle passen. Vielleicht kann jemand anders helfen?

Servus js

Du bräuchtest für Dein Vorhaben wohl eine Komponente, die werden immer geladen. Da könntest Du Deinen Code unterbringen.

Smarty Funktionen bindest Du so ein:

{funcname attr1=‘val1’ attr2=‘val2’}.

also z.B.

[{getCategoryProducts cnid='umve338766e225364d0f2b233ac64948'}]
[{foreach from="$oProductList" item='oProduct'}]
    [{$oProduct->oxarticles__oxtitle->value}] <hr>
[{/foreach}]

function.getCategoryProducts.php in sehr kurzer Form

function smarty_function_getCategoryProducts( $params, &$smarty )
{
    $oProductList = oxNew( 'oxarticlelist' );
    $oProductList->loadCategoryArticles( $params['cnid'], false );
    $smarty->assign('oProductList', $oProductList);
    return null;
}

die Datei liegt im Pluginverzeichnis von smarty. Das wars schon, das kannst Du nun Aufrufen von wo immer es benötigt wird.

Das mit den Modulen ist so eine Sache, wenn man anfängt jeden Käse in Module zu packen, kann die Kiste auch ganz schnell unübersichtlich werden.

Über welche Variable kann ich aus dem Template (categoriestree.tpl) auf die Methode zugreifen (zB $oView)
Innerhalb eines smarty-plugins

 $oView = $smarty->_tpl_vars['oView'];

Adios, Stefan

Hallo Stefan,
dein Ansatz ist ein Volltreffer und hat direkt zur Lösung geführt.
Vielen Dank!!!

Liebe Grüße, js