RSS
 

Smarty Plugin in einem anderen Smarty Plugin aufrufen

22 Jun

Heute stand ich vor dem relativ trivialen Problem, dass ich die Funktionalität eines Smarty Plugins in einem anderen Smarty Plugin verwenden wollte. Konkret ging es darum ein Plugin zum dynamischen Konstruieren von Dateinamen in einem Plugin zur Darstellung einer Tabellenzeile aufzurufen.

Google hat mir bei der Lösung vorerst nicht wirklich geholfen, erst durch Variation des Suchterms stiess ich schliesslich auf diesen Beitrag, bei dem in den Kommentaren die Lösung zu finden war:

function smarty_function_load_file($params, &$smarty) {
    if (empty($params['file'])) {
        $smarty->trigger_error("assign: missing 'file' parameter");
        return;
    }
    else {
        $file = $params['file'];
    }

    // assemble output path here
    // ...

    return $outputPath;
}

Normalerweise wird das load_file plugin im Smarty Template mit folgender Zeile aufgerufen:

<img src="{load_file file='path/to/my/file.gif'}" />

Das folgende Codeschnipsel verwendet die load_file Funktion innerhalb eines anderen Smarty Plugins:

function smarty_function_html_table_row($params, &$smarty) {

    // include the smarty load file plugin
    require_once($smarty->_get_plugin_filepath('function', 'load_file'));

    // some code skipped

    $returnValue .= '<img src="' . smarty_function_load_file(array('file' => 'path/to/my/file.gif'), $smarty) . '" />';

    // even more skipped code

    return $returnValue;
}

Die Magie passiert in Zeile 4, wo das function.load_file.php Plugin geladen wird, und in Zeile 8, in der die Funktion dann aufgerufen wird. Die Parameter werden in Form eines assoziativen Arrays als erster Parameter übergeben. In meinem Fall übergebe ich ‚file‘. Parameter zwei ist das Smarty Objekt, das scheinbar zwingend benötigt wird.

 

Kommentare