[ Index ]

PHP Cross Reference of vtigercrm-6.1.0

title

Body

[close]

/libraries/Smarty/libs/sysplugins/ -> smarty_internal_compile_for.php (source)

   1  <?php
   2  /**
   3   * Smarty Internal Plugin Compile For
   4   *
   5   * Compiles the {for} {forelse} {/for} tags
   6   *
   7   * @package Smarty
   8   * @subpackage Compiler
   9   * @author Uwe Tews
  10   */
  11  
  12  /**
  13   * Smarty Internal Plugin Compile For Class
  14   *
  15   * @package Smarty
  16   * @subpackage Compiler
  17   */
  18  class Smarty_Internal_Compile_For extends Smarty_Internal_CompileBase {
  19  
  20      /**
  21       * Compiles code for the {for} tag
  22       *
  23       * Smarty 3 does implement two different sytaxes:
  24       *
  25       * - {for $var in $array}
  26       * For looping over arrays or iterators
  27       *
  28       * - {for $x=0; $x<$y; $x++}
  29       * For general loops
  30       *
  31       * The parser is gereration different sets of attribute by which this compiler can
  32       * determin which syntax is used.
  33       *
  34       * @param array  $args      array with attributes from parser
  35       * @param object $compiler  compiler object
  36       * @param array  $parameter array with compilation parameter
  37       * @return string compiled code
  38       */
  39      public function compile($args, $compiler, $parameter)
  40      {
  41          if ($parameter == 0) {
  42              $this->required_attributes = array('start', 'to');
  43              $this->optional_attributes = array('max', 'step');
  44          } else {
  45              $this->required_attributes = array('start', 'ifexp', 'var', 'step');
  46              $this->optional_attributes = array();
  47          }
  48          // check and get attributes
  49          $_attr = $this->getAttributes($compiler, $args);
  50  
  51          $output = "<?php ";
  52          if ($parameter == 1) {
  53              foreach ($_attr['start'] as $_statement) {
  54                  $output .= " \$_smarty_tpl->tpl_vars[$_statement[var]] = new Smarty_Variable;";
  55                  $output .= " \$_smarty_tpl->tpl_vars[$_statement[var]]->value = $_statement[value];\n";
  56              }
  57              $output .= "  if ($_attr[ifexp]){ for (\$_foo=true;$_attr[ifexp]; \$_smarty_tpl->tpl_vars[$_attr[var]]->value$_attr[step]){\n";
  58          } else {
  59              $_statement = $_attr['start'];
  60              $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]] = new Smarty_Variable;";
  61              if (isset($_attr['step'])) {
  62                  $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->step = $_attr[step];";
  63              } else {
  64                  $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->step = 1;";
  65              }
  66              if (isset($_attr['max'])) {
  67                  $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int)min(ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step)),$_attr[max]);\n";
  68              } else {
  69                  $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->total = (int)ceil((\$_smarty_tpl->tpl_vars[$_statement[var]]->step > 0 ? $_attr[to]+1 - ($_statement[value]) : $_statement[value]-($_attr[to])+1)/abs(\$_smarty_tpl->tpl_vars[$_statement[var]]->step));\n";
  70              }
  71              $output .= "if (\$_smarty_tpl->tpl_vars[$_statement[var]]->total > 0){\n";
  72              $output .= "for (\$_smarty_tpl->tpl_vars[$_statement[var]]->value = $_statement[value], \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration = 1;\$_smarty_tpl->tpl_vars[$_statement[var]]->iteration <= \$_smarty_tpl->tpl_vars[$_statement[var]]->total;\$_smarty_tpl->tpl_vars[$_statement[var]]->value += \$_smarty_tpl->tpl_vars[$_statement[var]]->step, \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration++){\n";
  73              $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->first = \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration == 1;";
  74              $output .= "\$_smarty_tpl->tpl_vars[$_statement[var]]->last = \$_smarty_tpl->tpl_vars[$_statement[var]]->iteration == \$_smarty_tpl->tpl_vars[$_statement[var]]->total;";
  75          }
  76          $output .= "?>";
  77  
  78          $this->openTag($compiler, 'for', array('for', $compiler->nocache));
  79          // maybe nocache because of nocache variables
  80          $compiler->nocache = $compiler->nocache | $compiler->tag_nocache;
  81          // return compiled code
  82          return $output;
  83      }
  84  
  85  }
  86  
  87  /**
  88   * Smarty Internal Plugin Compile Forelse Class
  89   *
  90   * @package Smarty
  91   * @subpackage Compiler
  92   */
  93  class Smarty_Internal_Compile_Forelse extends Smarty_Internal_CompileBase {
  94  
  95      /**
  96       * Compiles code for the {forelse} tag
  97       *
  98       * @param array  $args      array with attributes from parser
  99       * @param object $compiler  compiler object
 100       * @param array  $parameter array with compilation parameter
 101       * @return string compiled code
 102       */
 103      public function compile($args, $compiler, $parameter)
 104      {
 105          // check and get attributes
 106          $_attr  = $this->getAttributes($compiler, $args);
 107  
 108          list($openTag, $nocache) = $this->closeTag($compiler, array('for'));
 109          $this->openTag($compiler, 'forelse', array('forelse', $nocache));
 110          return "<?php }} else { ?>";
 111      }
 112  
 113  }
 114  
 115  /**
 116   * Smarty Internal Plugin Compile Forclose Class
 117   *
 118   * @package Smarty
 119   * @subpackage Compiler
 120   */
 121  class Smarty_Internal_Compile_Forclose extends Smarty_Internal_CompileBase {
 122  
 123      /**
 124       * Compiles code for the {/for} tag
 125       *
 126       * @param array  $args      array with attributes from parser
 127       * @param object $compiler  compiler object
 128       * @param array  $parameter array with compilation parameter
 129       * @return string compiled code
 130       */
 131      public function compile($args, $compiler, $parameter)
 132      {
 133          // check and get attributes
 134          $_attr = $this->getAttributes($compiler, $args);
 135          // must endblock be nocache?
 136          if ($compiler->nocache) {
 137              $compiler->tag_nocache = true;
 138          }
 139  
 140          list($openTag, $compiler->nocache) = $this->closeTag($compiler, array('for', 'forelse'));
 141  
 142          if ($openTag == 'forelse') {
 143              return "<?php }  ?>";
 144          } else {
 145              return "<?php }} ?>";
 146          }
 147      }
 148  
 149  }
 150  
 151  ?>


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