function.counter.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. <?php
  2. /**
  3. * Smarty plugin
  4. * @package Smarty
  5. * @subpackage plugins
  6. */
  7. /**
  8. * Smarty {counter} function plugin
  9. *
  10. * Type: function<br>
  11. * Name: counter<br>
  12. * Purpose: print out a counter value
  13. * @link http://smarty.php.net/manual/en/language.function.counter.php {counter}
  14. * (Smarty online manual)
  15. * @param array parameters
  16. * @param Smarty
  17. * @return string|null
  18. */
  19. function smarty_function_counter($params, &$smarty)
  20. {
  21. static $counters = array();
  22. $name = (isset($params['name'])) ? $params['name'] : 'default';
  23. if (!isset($counters[$name])) {
  24. $counters[$name] = array(
  25. 'start'=>1,
  26. 'skip'=>1,
  27. 'direction'=>'up',
  28. 'count'=>1
  29. );
  30. }
  31. $counter =& $counters[$name];
  32. if (isset($params['start'])) {
  33. $counter['start'] = $counter['count'] = (int)$params['start'];
  34. }
  35. if (!empty($params['assign'])) {
  36. $counter['assign'] = $params['assign'];
  37. }
  38. if (isset($counter['assign'])) {
  39. $smarty->assign($counter['assign'], $counter['count']);
  40. }
  41. if (isset($params['print'])) {
  42. $print = (bool)$params['print'];
  43. } else {
  44. $print = empty($counter['assign']);
  45. }
  46. if ($print) {
  47. $retval = $counter['count'];
  48. } else {
  49. $retval = null;
  50. }
  51. if (isset($params['skip'])) {
  52. $counter['skip'] = $params['skip'];
  53. }
  54. if (isset($params['direction'])) {
  55. $counter['direction'] = $params['direction'];
  56. }
  57. if ($counter['direction'] == "down")
  58. $counter['count'] -= $counter['skip'];
  59. else
  60. $counter['count'] += $counter['skip'];
  61. return $retval;
  62. }
  63. /* vim: set expandtab: */
  64. ?>