PageRenderTime 56ms CodeModel.GetById 16ms RepoModel.GetById 9ms app.codeStats 0ms

/packages/Output/Smarty/Plugins/function.loop.php

https://bitbucket.org/alexamiryan/stingle
PHP | 61 lines | 36 code | 5 blank | 20 comment | 13 complexity | 840684cb2265642d77a6192a069a54ab MD5 | raw file
  1. <?php
  2. /**
  3. * Smarty plugin
  4. * @package Smarty
  5. * @subpackage plugins
  6. */
  7. /**
  8. * Smarty {loop} function plugin
  9. *
  10. * Type: function<br>
  11. * Name: sprintf<br>
  12. * Purpose: same as in php
  13. * @author Alex Amiryan
  14. * Input:
  15. * - value = value to return
  16. * - count = number of steps to return
  17. * - name = name of the loop
  18. * - dofirst = return or not on first step
  19. * - do_x_times = return only x times, not more
  20. * @return string
  21. */
  22. function smarty_function_loop($params, &$smarty){
  23. static $loop_vars;
  24. $count = (isset($params['count'])) ? intval($params['count']) : 2;
  25. $name = (empty($params['name'])) ? 'default' : $params['name'];
  26. $dofirst = (isset($params['dofirst'])) ? (bool)$params['dofirst'] : false;
  27. $do_x_times = (isset($params['do_x_times'])) ? (bool)$params['do_x_times'] : false;
  28. if(empty($params['value'])){
  29. $smarty->trigger_error("loop: missing 'value' parameter");
  30. }
  31. if(!isset($loop_vars[$name]) || $loop_vars[$name]['value'] != $params['value']){
  32. $loop_vars[$name] = array();
  33. $loop_vars[$name]['index'] = 0;
  34. $loop_vars[$name]['value'] = $params['value'];
  35. $loop_vars[$name]['count'] = $count;
  36. $loop_vars[$name]['dofirst'] = $dofirst;
  37. $loop_vars[$name]['do_x_times'] = $do_x_times;
  38. }
  39. $loop_vars[$name]['index']++;
  40. if($loop_vars[$name]['index'] == 1 && $loop_vars[$name]['dofirst']){
  41. $loop_vars[$name]['index']--;
  42. $loop_vars[$name]['dofirst'] = false;
  43. return $loop_vars[$name]['value'];
  44. }
  45. if($loop_vars[$name]['index'] != 1 && $loop_vars[$name]['index'] % $loop_vars[$name]['count'] == 0){
  46. if($loop_vars[$name]['do_x_times']){
  47. if($loop_vars[$name]['index'] / $loop_vars[$name]['count'] < $loop_vars[$name]['do_x_times']+1){
  48. return $loop_vars[$name]['value'];
  49. }
  50. }
  51. else{
  52. return $loop_vars[$name]['value'];
  53. }
  54. }
  55. return false;
  56. }