[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/libraries/Smarty/ -> SMARTY_3.1_NOTES.txt (source)

   1  Smarty 3.1 Notes
   2  ================
   3  
   4  Smarty 3.1 is a departure from 2.0 compatibility. Most notably, all
   5  backward compatibility has been moved to a separate class file named
   6  SmartyBC.class.php. If you require compatibility with 2.0, you will
   7  need to use this class.
   8  
   9  Some differences from 3.0 are also present. 3.1 begins the journey of
  10  requiring setters/getters for property access. So far this is only
  11  implemented on the five directory properties: template_dir,
  12  plugins_dir, configs_dir, compile_dir and cache_dir. These properties
  13  are now protected, it is required to use the setters/getters instead.
  14  That said, direct property access will still work, however slightly
  15  slower since they will now fall through __set() and __get() and in
  16  turn passed through the setter/getter methods. 3.2 will exhibit a full
  17  list of setter/getter methods for all (currently) public properties,
  18  so code-completion in your IDE will work as expected.
  19  
  20  There is absolutely no PHP allowed in templates any more. All
  21  deprecated features of Smarty 2.0 are gone. Again, use the SmartyBC
  22  class if you need any backward compatibility.
  23  
  24  Internal Changes
  25  
  26    Full UTF-8 Compatibility
  27  
  28  The plugins shipped with Smarty 3.1 have been rewritten to fully
  29  support UTF-8 strings if Multibyte String is available. Without
  30  MBString UTF-8 cannot be handled properly. For those rare cases where
  31  templates themselves have to juggle encodings, the new modifiers
  32  to_charset and from_charset may come in handy.
  33  
  34    Plugin API and Performance
  35  
  36  All Plugins (modifiers, functions, blocks, resources,
  37  default_template_handlers, etc) are now receiving the
  38  Smarty_Internal_Template instance, where they were supplied with the
  39  Smarty instance in Smarty 3.0. *. As The Smarty_Internal_Template
  40  mimics the behavior of Smarty, this API simplification should not
  41  require any changes to custom plugins.
  42  
  43  The plugins shipped with Smarty 3.1 have been rewritten for better
  44  performance. Most notably {html_select_date} and {html_select_time}
  45  have been improved vastly. Performance aside, plugins have also been
  46  reviewed and generalized in their API. {html_select_date} and
  47  {html_select_time} now share almost all available options.
  48  
  49  The escape modifier now knows the $double_encode option, which will
  50  prevent entities from being encoded again.
  51  
  52  The capitalize modifier now know the $lc_rest option, which makes sure
  53  all letters following a captial letter are lower-cased.
  54  
  55  The count_sentences modifier now accepts (.?!) as
  56  legitimate endings of a sentence - previously only (.) was
  57  accepted
  58  
  59  The new unescape modifier is there to reverse the effects of the
  60  escape modifier. This applies to the escape formats html, htmlall and
  61  entity.
  62  
  63    default_template_handler_func
  64  
  65  The invocation of $smarty->$default_template_handler_func had to be 
  66  altered. Instead of a Smarty_Internal_Template, the fifth argument is
  67  now provided with the Smarty instance. New footprint:
  68  
  69  
  70  /**
  71   * Default Template Handler
  72   *
  73   * called when Smarty's file: resource is unable to load a requested file
  74   * 
  75   * @param string   $type     resource type (e.g. "file", "string", "eval", "resource")
  76   * @param string   $name     resource name (e.g. "foo/bar.tpl")
  77   * @param string  &$content  template's content
  78   * @param integer &$modified template's modification time
  79   * @param Smarty   $smarty   Smarty instance
  80   * @return string|boolean   path to file or boolean true if $content and $modified 
  81   *                          have been filled, boolean false if no default template 
  82   *                          could be loaded
  83   */
  84  function default_template_handler_func($type, $name, &$content, &$modified, Smarty $smarty) {
  85      if (false) {
  86          // return corrected filepath
  87          return "/tmp/some/foobar.tpl";
  88      } elseif (false) {
  89          // return a template directly
  90          $content = "the template source";
  91          $modified = time();
  92          return true;
  93      } else {
  94          // tell smarty that we failed
  95          return false;
  96      }
  97  }
  98  
  99    Stuff done to the compiler
 100  
 101  Many performance improvements have happened internally. One notable
 102  improvement is that all compiled templates are now handled as PHP
 103  functions. This speeds up repeated templates tremendously, as each one
 104  calls an (in-memory) PHP function instead of performing another file
 105  include/scan.
 106  
 107  New Features
 108  
 109    Template syntax
 110  
 111   {block}..{/block}
 112  
 113  The {block} tag has a new hide option flag. It does suppress the block
 114  content if no corresponding child block exists.
 115  EXAMPLE:
 116  parent.tpl
 117  {block name=body hide} child content "{$smarty.block.child}" was
 118  inserted {block}
 119  In the above example the whole block will be suppressed if no child
 120  block "body" is existing.
 121  
 122   {setfilter}..{/setfilter}
 123  
 124  The new {setfilter} block tag allows the definition of filters which
 125  run on variable output.
 126  SYNTAX:
 127  {setfilter filter1|filter2|filter3....}
 128  Smarty3 will lookup up matching filters in the following search order:
 129  1. varibale filter plugin in plugins_dir.
 130  2. a valid modifier. A modifier specification will also accept
 131  additional parameter like filter2:'foo'
 132  3. a PHP function
 133  {/setfilter} will turn previous filter setting off again.
 134  {setfilter} tags can be nested.
 135  EXAMPLE:
 136  {setfilter filter1}
 137    {$foo}
 138    {setfilter filter2}
 139      {$bar}
 140    {/setfilter}
 141    {$buh}
 142  {/setfilter}
 143  {$blar}
 144  In the above example filter1 will run on the output of $foo, filter2
 145  on $bar, filter1 again on $buh and no filter on $blar.
 146  NOTES:
 147  - {$foo nofilter} will suppress the filters
 148  - These filters will run in addition to filters defined by
 149  registerFilter('variable',...), autoLoadFilter('variable',...) and
 150  defined default modifier.
 151  - {setfilter} will effect only the current template, not included
 152  subtemplates.
 153  
 154    Resource API
 155  
 156  Smarty 3.1 features a new approach to resource management. The
 157  Smarty_Resource API allows simple, yet powerful integration of custom
 158  resources for templates and configuration files. It offers simple
 159  functions for loading data from a custom resource (e.g. database) as
 160  well as define new template types adhering to the special
 161  non-compiling (e,g, plain php) and non-compile-caching (e.g. eval:
 162  resource type) resources.
 163  
 164  See demo/plugins/resource.mysql.php for an example custom database
 165  resource.
 166  
 167  Note that old-fashioned registration of callbacks for resource
 168  management has been deprecated but is still possible with SmartyBC.
 169  
 170    CacheResource API
 171  
 172  In line with the Resource API, the CacheResource API offers a more
 173  comfortable handling of output-cache data. With the
 174  Smarty_CacheResource_Custom accessing databases is made simple. With
 175  the introduction of Smarty_CacheResource_KeyValueStore the
 176  implementation of resources like memcache or APC became a no-brainer;
 177  simple hash-based storage systems are now supporting hierarchical
 178  output-caches.
 179  
 180  See demo/plugins/cacheresource.mysql.php for an example custom
 181  database CacheResource.
 182  See demo/plugins/cacheresource.memcache.php for an example custom
 183  memcache CacheResource using the KeyValueStore helper.
 184  
 185  Note that old-fashioned registration of $cache_handler is not possible
 186  anymore. As the functionality had not been ported to Smarty 3.0.x
 187  properly, it has been dropped from 3.1 completely.
 188  
 189  Locking facilities have been implemented to avoid concurrent cache 
 190  generation. Enable cache locking by setting 
 191  $smarty->cache_locking = true;
 192  
 193    Relative Paths in Templates (File-Resource)
 194  
 195  As of Smarty 3.1 {include file="../foo.tpl"} and {include
 196  file="./foo.tpl"} will resolve relative to the template they're in.
 197  Relative paths are available with {include file="..."} and
 198  {extends file="..."}. As $smarty->fetch('../foo.tpl') and
 199  $smarty->fetch('./foo.tpl') cannot be relative to a template, an
 200  exception is thrown.
 201  
 202    Adressing a specific $template_dir
 203  
 204  Smarty 3.1 introduces the $template_dir index notation.
 205  $smarty->fetch('[foo]bar.tpl') and {include file="[foo]bar.tpl"}
 206  require the template bar.tpl to be loaded from $template_dir['foo'];
 207  Smarty::setTemplateDir() and Smarty::addTemplateDir() offer ways to
 208  define indexes along with the actual directories.
 209  
 210    Mixing Resources in extends-Resource
 211  
 212  Taking the php extends: template resource one step further, it is now
 213  possible to mix resources within an extends: call like
 214  $smarty->fetch("extends:file:foo.tpl|db:bar.tpl");
 215  
 216  To make eval: and string: resources available to the inheritance
 217  chain, eval:base64:TPL_STRING and eval:urlencode:TPL_STRING have been
 218  introduced. Supplying the base64 or urlencode flags will trigger
 219  decoding the TPL_STRING in with either base64_decode() or urldecode().
 220  
 221    extends-Resource in template inheritance
 222  
 223  Template based inheritance may now inherit from php's extends:
 224  resource like {extends file="extends:foo.tpl|db:bar.tpl"}.
 225  
 226    New Smarty property escape_html
 227  
 228  $smarty->escape_html = true will autoescape all template variable
 229  output by calling htmlspecialchars({$output}, ENT_QUOTES,
 230  SMARTY_RESOURCE_CHAR_SET).
 231  NOTE:
 232  This is a compile time option. If you change the setting you must make
 233  sure that the templates get recompiled.
 234  
 235    New option at Smarty property compile_check
 236  
 237  The automatic recompilation of modified templates can now be
 238  controlled by the following settings:
 239  $smarty->compile_check = COMPILECHECK_OFF (false) - template files
 240  will not be checked
 241  $smarty->compile_check = COMPILECHECK_ON (true) - template files will
 242  always be checked
 243  $smarty->compile_check = COMPILECHECK_CACHEMISS - template files will
 244  be checked if caching is enabled and there is no existing cache file
 245  or it has expired
 246  
 247    Automatic recompilation on Smarty version change
 248  
 249  Templates will now be automatically recompiled on Smarty version
 250  changes to avoide incompatibillities in the compiled code. Compiled
 251  template checked against the current setting of the SMARTY_VERSION
 252  constant.
 253  
 254    default_config_handler_func()
 255  
 256  Analogous to the default_template_handler_func()
 257  default_config_handler_func() has been introduced.
 258  
 259    default_plugin_handler_func()
 260  
 261  An optional default_plugin_handler_func() can be defined which gets called 
 262  by the compiler on tags which can't be resolved internally or by plugins.
 263  The default_plugin_handler() can map tags to plugins on the fly.
 264  
 265  New getters/setters
 266  
 267  The following setters/getters will be part of the official
 268  documentation, and will be strongly recommended. Direct property
 269  access will still work for the foreseeable future... it will be
 270  transparently routed through the setters/getters, and consequently a
 271  bit slower.
 272  
 273  array|string getTemplateDir( [string $index] )
 274  replaces $smarty->template_dir; and $smarty->template_dir[$index];
 275  Smarty setTemplateDir( array|string $path )
 276  replaces $smarty->template_dir = "foo"; and $smarty->template_dir =
 277  array("foo", "bar");
 278  Smarty addTemplateDir( array|string $path, [string $index])
 279  replaces $smarty->template_dir[] = "bar"; and
 280  $smarty->template_dir[$index] = "bar";
 281  
 282  array|string getConfigDir( [string $index] )
 283  replaces $smarty->config_dir; and $smarty->config_dir[$index];
 284  Smarty setConfigDir( array|string $path )
 285  replaces $smarty->config_dir = "foo"; and $smarty->config_dir =
 286  array("foo", "bar");
 287  Smarty addConfigDir( array|string $path, [string $index])
 288  replaces $smarty->config_dir[] = "bar"; and
 289  $smarty->config_dir[$index] = "bar";
 290  
 291  array getPluginsDir()
 292  replaces $smarty->plugins_dir;
 293  Smarty setPluginsDir( array|string $path )
 294  replaces $smarty->plugins_dir = "foo";
 295  Smarty addPluginsDir( array|string $path )
 296  replaces $smarty->plugins_dir[] = "bar";
 297  
 298  string getCompileDir()
 299  replaces $smarty->compile_dir;
 300  Smarty setCompileDir( string $path )
 301  replaces $smarty->compile_dir = "foo";
 302  
 303  string getCacheDir()
 304  replaces $smarty->cache_dir;
 305  Smarty setCacheDir( string $path )
 306  replaces $smarty->cache_dir;


Generated: Fri Nov 28 20:08:37 2014 Cross-referenced by PHPXref 0.7.1