Exemplo n.º 1
0
 public static function extend($view, $path)
 {
     $chain = self::resolveChain($view, $path);
     $view = array_shift($chain);
     foreach ($chain as $item) {
         $injects = array();
         preg_match_all('/@inject.*?@(rewrite|append|prepend)/ms', $item, $injects);
         $map = array();
         if (isset($injects[0])) {
             foreach ($injects[0] as $k => $s) {
                 $m = array();
                 preg_match('/@inject.+?\\)/', $s, $m);
                 $name = trim(str_replace(array('@inject', '(', ')', '"', '\''), '', $m[0]));
                 $map[] = array($name, trim(self::clear($s)), $injects[1][$k]);
             }
         }
         foreach ($map as $key => $value) {
             $view = preg_replace_callback('/@block\\s*?\\(\\s*?(\'|")' . $value[0] . '(\'|")\\s*?\\).*?@endblock/ms', function ($e) use($value) {
                 switch ($value[2]) {
                     case 'prepend':
                         return '@block(\'' . $value[0] . '\')' . $value[1] . Inherit::clear($e[0]) . '@endblock';
                         break;
                     case 'append':
                         return '@block(\'' . $value[0] . '\')' . Inherit::clear($e[0]) . $value[1] . '@endblock';
                         break;
                     case 'rewrite':
                         return '@block(\'' . $value[0] . '\')' . $value[1] . '@endblock';
                         break;
                 }
             }, $view);
         }
     }
     return self::clear($view);
 }