/** * 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; }