SmartyでAgaviRouting::genをする

mojaviのころからgenUrlするためのプラグインを作っていましたが、0.11用にプラグインを書きました。
ライセンスはLGPLで。ただしコメントくれたらNYSL*1で。

<?php
/**
 * Smarty plugin for AgaviRouting::gen
 *
 * [parameters]
 * route       a route name.
 * params_XXX  a parameter, key of which is XXX.
 * options_XXX a option, key of which is XXX.
 * options     the name of an options preset.
 * assign      a name for assign key.(option)
 * routing     a key of template valiable for AgaviRouting object
 * [example]  
 * {routing_gen route="some.route.name"
 *  params_parameter1="value_for_p1" params_parameter2="value_for_p2"
 *  options_option1="value_for_o1" options_option2="value_for_o2"}
 * 
 * @author MugeSo <mugeso@mugeso.com>
 */
function smarty_function_routing_gen($args, $smarty)
{
    if(empty($args['route'])) {
        $smarty->trriger_error("routing_gen: parameter 'route' is required.");
        return;
    }
    
    $params = array();
    $options = array();
    foreach($args AS $key=>$value) {
        if(preg_match('/(params|options)_(.+)/', $key, $matches)) {
            ${$matches[1]}[$matches[2]] = $value;
        }
    }

    if(isset($args['options'])) {
        $options = $args['options'];
    }

    $url = $smarty->get_template_vars(isset($args['routing']) ? $args['routing'] : 'ro')
        ->gen($args['route'], $params, $options);

    if(empty($args['assign'])) {
        return $url;
    } else {
        $smarty->assign($args['assign'], $url);
    }
}
?>