Пример #1
0
 public static function get_directive($directive_code, $component = null)
 {
     $directive_name = DirectiveParser::get_directive_name($directive_code);
     switch ($directive_name) {
         case 'include':
             $directive = new IncludeDirective($component);
             break;
         case 'foreach':
             $directive = new ForeachDirective();
             break;
         case 'if':
             $directive = new IfDirective($component);
             break;
         case 'render_component_children':
             $directive = new RenderComponentChildren($component);
             break;
         case 'render_child_component_by_name':
             $directive = new RenderChildComponentByName($component);
             break;
     }
     self::init_directive($directive, $directive_code);
     return $directive;
 }
Пример #2
0
 private function process_nested_directives($output)
 {
     $startpos = strpos($output, DirectiveParser::DIRECTIVE_START);
     while ($startpos > -1) {
         $endpos = strpos($output, DirectiveParser::DIRECTIVE_END, $startpos);
         $length = $endpos - $startpos + 3;
         $raw_directive = substr($output, $startpos, $length);
         $directive_name = DirectiveParser::get_directive_name($raw_directive);
         if (DirectiveFactory::is_nested_directive($directive_name)) {
             $end_tag = DirectiveParser::DIRECTIVE_START . '/' . $directive_name . DirectiveParser::DIRECTIVE_END;
             $endpos = strpos($output, $end_tag);
             $length = $endpos - $startpos + strlen($end_tag);
             $raw_directive = substr($output, $startpos, $length);
             $replace = $this->process_directive($raw_directive, $output);
             $endpos = $startpos + strlen($replace);
             $output = substr_replace($output, $replace, $startpos, $length);
         }
         $startpos = strpos($output, DirectiveParser::DIRECTIVE_START, $endpos);
         // next occurence
     }
     return $output;
 }