From: Andrey Kutejko Date: Sun, 4 Jan 2015 12:25:11 +0000 (+0200) Subject: separate tags logic from implementation wrapper X-Git-Tag: 0.6~98 X-Git-Url: https://git.andy128k.dev/?a=commitdiff_plain;h=cfa263f3a821e758f0a37bf5dd2c63bd0d10f1b4;p=ipf.git separate tags logic from implementation wrapper --- diff --git a/ipf/project_template.php b/ipf/project_template.php index 5743b0e..cbe569c 100644 --- a/ipf/project_template.php +++ b/ipf/project_template.php @@ -72,13 +72,9 @@ final class IPF_Project_Template } return $params; } -} -class IPF_Project_Template_Tag_Url extends IPF_Template_Tag -{ - function start() + public static function urlTag($args) { - $args = func_get_args(); $count = count($args); if ($count === 0) throw new IPF_Exception('No view specified'); @@ -86,44 +82,58 @@ class IPF_Project_Template_Tag_Url extends IPF_Template_Tag $view = array_shift($args); if ($count === 2 && is_array($args[0])) { - echo IPF_HTTP_URL::urlForView($view, $args[0]); + return IPF_HTTP_URL::urlForView($view, $args[0]); } elseif ($count === 3 && is_array($args[0]) && is_array($args[1])) { - echo IPF_HTTP_URL::urlForView($view, $args[0], $args[1]); + return IPF_HTTP_URL::urlForView($view, $args[0], $args[1]); } else { - echo IPF_HTTP_URL::urlForView($view, $args); + return IPF_HTTP_URL::urlForView($view, $args); } } -} -class IPF_Project_Template_Tag_Params extends IPF_Template_Tag -{ - private function setParam(&$params, $key, $value) - { - if ($value === null) - unset($params[$key]); - else - $params[$key] = $value; - } - - function start() + public static function paramsTag($args) { $params = array(); - $args = func_get_args(); $count = count($args); - for ($i = 0; $i < $count; ++$i) { + for ($i = 0; $i < $count; ) { if (is_array($args[$i])) { - foreach ($args[$i] as $key => $value) - $this->setParam($params, $key, $value); + foreach ($args[$i] as $key => $value) { + if ($value === null) + unset($params[$key]); + else + $params[$key] = $value; + } + + ++$i; } else { $key = $args[$i]; $value = $args[$i+1]; - $this->setParam($params, $key, $value); - ++$i; + if ($value === null) + unset($params[$key]); + else + $params[$key] = $value; + + $i += 2; } } - echo IPF_HTTP_URL::generateParams($params); + return IPF_HTTP_URL::generateParams($params); + } +} + +class IPF_Project_Template_Tag_Url extends IPF_Template_Tag +{ + function start() + { + echo IPF_Project_Template::urlTag(func_get_args()); + } +} + +class IPF_Project_Template_Tag_Params extends IPF_Template_Tag +{ + function start() + { + echo IPF_Project_Template::paramsTag(func_get_args()); } }