/**
  * @param Tokenizer $tokens
  * @param Tag $scope
  * @return string
  */
 public static function setOpen(Tokenizer $tokens, Tag $scope)
 {
     if ($tokens->is(T_VARIABLE)) {
         $var = $scope->tpl->parseVariable($tokens);
     } elseif ($tokens->is('$')) {
         $var = $scope->tpl->parseAccessor($tokens, $is_var);
         if (!$is_var) {
             throw new InvalidUsageException("Accessor is not writable");
         }
     } else {
         throw new InvalidUsageException("{set} and {add} accept only variable");
     }
     $before = $after = "";
     if ($scope->name == 'add') {
         $before = "if(!isset({$var})) {\n";
         $after = "\n}";
     }
     if ($tokens->is(Tokenizer::MACRO_EQUALS, '[')) {
         // inline tag {var ...}
         $equal = $tokens->getAndNext();
         if ($equal == '[') {
             $tokens->need(']')->next()->need('=')->next();
             $equal = '[]=';
         }
         $scope->close();
         if ($tokens->is("[")) {
             return $before . $var . $equal . $scope->tpl->parseArray($tokens) . ';' . $after;
         } else {
             return $before . $var . $equal . $scope->tpl->parseExpr($tokens) . ';' . $after;
         }
     } else {
         $scope["name"] = $var;
         if ($tokens->is('|')) {
             $scope["value"] = $before . $scope->tpl->parseModifier($tokens, "ob_get_clean()") . ';' . $after;
         } else {
             $scope["value"] = $before . "ob_get_clean();" . $after;
         }
         return 'ob_start();';
     }
 }
Beispiel #2
0
 /**
  * @param Tokenizer $tokens
  * @param Tag $scope
  * @return string
  */
 public static function setOpen(Tokenizer $tokens, Tag $scope)
 {
     $var = $scope->tpl->parseVariable($tokens);
     $before = $after = "";
     if ($scope->name == 'add') {
         $before = "if(!isset({$var})) {\n";
         $after = "\n}";
     }
     if ($tokens->is(Tokenizer::MACRO_EQUALS, '[')) {
         // inline tag {var ...}
         $equal = $tokens->getAndNext();
         if ($equal == '[') {
             $tokens->need(']')->next()->need('=')->next();
             $equal = '[]=';
         }
         $scope->close();
         if ($tokens->is("[")) {
             return $before . $var . $equal . $scope->tpl->parseArray($tokens) . ';' . $after;
         } else {
             return $before . $var . $equal . $scope->tpl->parseExpr($tokens) . ';' . $after;
         }
     } else {
         $scope["name"] = $var;
         if ($tokens->is('|')) {
             $scope["value"] = $before . $scope->tpl->parseModifier($tokens, "ob_get_clean()") . ';' . $after;
         } else {
             $scope["value"] = $before . "ob_get_clean();" . $after;
         }
         return 'ob_start();';
     }
 }