Name

registerPlugin() — dynamically register plugins

Description

void registerPlugin(string type,
                    string name,
                    mixed callback,
                    bool cacheable,
                    mixed cache_attrs);

This method registers functions or methods defined in your script as plugin. It uses the following parameters:

  • type defines the type of the plugin. Valid values are "function", "block", "compiler" and "modifier".

  • name defines the name of the plugin.

  • callback defines the PHP callback. it can be either:

    • A string containing the function name

    • An array of the form array(&$object, $method) with &$object being a reference to an object and $method being a string containing the method-name

    • An array of the form array($class, $method) with $class being the class name and $method being a method of the class.

  • cacheable and cache_attrs can be omitted in most cases. See controlling cacheability of plugins output on how to use them properly.

Example 14.39. register a function plugin


<?php
$smarty->registerPlugin("function","date_now", "print_current_date");

function print_current_date($params, $smarty)
{
  if(empty($params["format"])) {
    $format = "%b %e, %Y";
  } else {
    $format = $params["format"];
  }
  return strftime($format,time());
}
?>

   

And in the template


{date_now}

{* or to format differently *}
{date_now format="%Y/%m/%d"}


Example 14.40. register block function plugin


<?php
// function declaration
function do_translation ($params, $content, $smarty, &$repeat, $template)
{
  if (isset($content)) {
    $lang = $params["lang"];
    // do some translation with $content
    return $translation;
  }
}

// register with smarty
$smarty->registerPlugin("block","translate", "do_translation");
?>

   

Where the template is:


{translate lang="br"}Hello, world!{/translate}

   

Example 14.41. register modifier plugin


<?php

// let's map PHP's stripslashes function to a Smarty modifier.
$smarty->registerPlugin("modifier","ss", "stripslashes");

?>

In the template, use ss to strip slashes.


<?php
{$var|ss}
?>


See also unregisterPlugin(), plugin functions, plugin block functions, plugin compiler functions, and the creating plugin modifiers section.