Example #1
0
 /**
  * Register special compile functions.
  */
 static function register_compilers()
 {
     static $registered = false;
     if ($registered) {
         return true;
     }
     // Render helper.
     self::$smarty->registerPlugin('compiler', 'render', function ($args, $smarty) {
         $params = View::parse_args($args, array('tags' => array('view')));
         return '<?php render(' . View::serialize_php($params) . ') ?>' . '<?php if (isset($GLOBALS[\'__view_result\'])) { return; } ?>';
     });
     // Extend helper. It's like render with no output.
     self::$smarty->registerPlugin('compiler', 'extend', function ($args, $smarty) {
         $params = View::parse_args($args, array('tags' => array('view', 'export_var')));
         return '<?php ob_start(); render(' . View::serialize_php($params) . '); ob_end_clean(); ?>' . '<?php if (isset($GLOBALS[\'__view_result\'])) { return; } ?>';
     });
     // Args helper.
     self::$smarty->registerPlugin('compiler', 'args', function ($args, $smarty) {
         $params = View::parse_args($args);
         foreach ((array) $params as $key => $val) {
             if (is_numeric($key)) {
                 $params[$key] = str_replace('$_smarty_tpl->tpl_vars[', '', $val);
                 $params[$key] = str_replace(']->value', '', $params[$key]);
             }
         }
         return '<?php args(' . View::serialize_php($params) . ', $_smarty_tpl) ?>';
     });
     // Redirect helper.
     self::$smarty->registerPlugin('compiler', 'redirect', function ($args, $smarty) {
         $params = View::parse_args($args, array('tags' => array('url')));
         return '<?php redirect(' . View::serialize_php($params) . ') ?>';
     });
     // GET helper.
     self::$smarty->registerPlugin('compiler', 'get', function ($args, $smarty) {
         $params = View::parse_args($args, array('tags' => array('result', 'from', 'resource', 'data')));
         // Params
         $resource = $params['resource'];
         $result = $params['result'];
         $data = $params['data'];
         // Attributes as data?
         if ($data == null) {
             unset($params['result'], $params['from'], $params['resource'], $params['data']);
             $data = View::serialize_php($params);
         }
         return "<?php {$result} = get({$resource}, {$data}); ?>";
     });
     // PUT helper.
     self::$smarty->registerPlugin('compiler', 'put', function ($args, $smarty) {
         $params = View::parse_args($args, array('tags' => array('data', 'in', 'resource', 'result')));
         // Params
         $resource = $params['resource'];
         $result = $params['result'];
         $data = $params['data'];
         // Attributes as data?
         if ($data == null) {
             unset($params['result'], $params['in'], $params['resource'], $params['data']);
             $data = View::serialize_php($params);
         }
         return "<?php " . ($result ? "{$result} =" : '') . " put({$resource}, {$data}); ?>";
     });
     // POST helper.
     self::$smarty->registerPlugin('compiler', 'post', function ($args, $smarty) {
         $params = View::parse_args($args, array('tags' => array('data', 'in', 'resource', 'result')));
         // Params
         $resource = $params['resource'];
         $result = $params['result'];
         $data = $params['data'];
         // Attributes as data?
         if ($data == null) {
             unset($params['result'], $params['in'], $params['resource'], $params['data']);
             $data = View::serialize_php($params);
         }
         return "<?php " . ($result ? "{$result} =" : '') . " post({$resource}, {$data}); ?>";
     });
     // DELETE helper.
     self::$smarty->registerPlugin('compiler', 'delete', function ($args, $smarty) {
         $params = View::parse_args($args, array('tags' => array('resource', 'result')));
         // Params
         $resource = $params['resource'];
         $result = $params['result'];
         return "<?php " . ($result ? "{$result} =" : '') . " delete({$resource}); ?>";
     });
     // Pluralize helper.
     self::$smarty->registerPlugin('compiler', 'pluralize', function ($args, $smarty) {
         $params = View::parse_args($args, array('tags' => array('word', 'if_many')));
         return '<?php echo pluralize(' . View::serialize_php($params) . '); ?>';
     });
     // Return helper.
     self::$smarty->registerPlugin('compiler', 'return', function ($args, $smarty) {
         if ($args[0] !== null) {
             // Save result to global context for render() to extract.
             return '<?php $GLOBALS[\'__view_result\'] = ' . $args[0] . '; return; ?>';
         } else {
             return '<?php return; ?>';
         }
     });
     return $registered = true;
 }