/** * 返回url中的基础部分,不含文件名称,如:http://www.zotop.com/system/admin/index.php 或者 /system/admin/index.php * * @param boolean|string $page 页面名称,默认 为 true 则为 'index.php' * @param boolean $dir 是否只返回当前的目录名称 * @param $domain 是否含有域名 * @return string */ public static function base($page = true, $domain = false) { $base = url::scriptname(); if ($page !== true) { $base = dirname($base) . $page; } if ($domain == true) { $base = url::domain(true) . $base; } return $base; }
/** * 根据参数生成完整的URL,如:url::build('site://zotop/index/default/arg1/arg2',array('param1'=>'1'),'#top') * * @param string $uri 如:{application}://{module}/{controller}/{action}/{arg1}/arg2 组成 * @param array|string $params URL参数 ,一般为数组,也可以是字符串,如:param1/1/param2/2 * @param string $extra 额外数据:如锚点信息等 * @return string 如:/index.php/module/controller/action/arg1/arg2?param1=1¶m2=2#top */ public static function build($uri = '', $params = null, $extra = '') { $application = ''; if (strpos($uri, '://')) { list($application, $uri) = explode('://', $uri); } //获取入口文件地址 if (empty($application)) { $base = url::scriptname(); } else { $base = zotop::application($application, 'url') . '/' . zotop::application($application, 'base'); $base = url::decode($base); } //uri处理 if ($u = explode('/', trim($uri, '/'))) { //获取namespace 和 arguments $namespace = array_slice($u, 0, 3); $namespace = implode('/', $namespace); $arguments = array_slice($u, 3); //namespace切换 $namespace = zotop::filter('zotop.namespace', $namespace, &$arguments); foreach ($arguments as $arg) { $querystring .= '/' . $arg; } //querystring $querystring = $namespace . $querystring; $querystring = empty($querystring) ? '' : '/' . $uri; $querystring .= empty($suffix) ? '' : $suffix; } //处理id/5/n/6 形式的参数 if (!is_array($params)) { $args = explode('/', $params); while ($key = array_shift($args)) { $params[$key] = array_shift($args); } } if (is_array($params) && !empty($params)) { if (strpos($querystring, '?')) { $querystring .= '&' . http_build_query($params); } else { $querystring .= '?' . http_build_query($params); } } //组装url $url = $base . $querystring . $extra; $url = url::clean($url); return $url; }
/** * 根据参数生成完整的URL,如:url::build('zotop/index/default',array('id'=>'1')) * * @param string $uri 一般由{app}://{module}/{controller}/{action}组成 * @param array|string $params 动作参数 ,一般为数组 * @param array|string $arguments URL参数 ,一般为数组 * @param string $fragment 锚点 * @return string */ public static function build($uri, $params = null, $arguments = '', $fragment = '') { $uri = trim($uri, '/'); $app = ''; if (strpos($url, '://') !== false) { $u = explode('://', $uri); $app = $u[0]; $uri = $u[1]; } //获取入口文件地址 if (empty($app)) { $base = url::scriptname(); } else { $base = zotop::applicationes($app, 'url') . '/' . zotop::applicationes($app, 'base'); } //获取module/controller/action if ($u = explode('/', trim($uri, '/'))) { $namespace = implode('/', array_slice($u, 0, 3)); } //处理id/5/n/6 形式的参数 if (!is_array($params)) { $args = array(); $array = explode('/', $params); while ($key = array_shift($array)) { $args[$key] = array_shift($array); } $params = $args; } //合并参数 $str = ''; foreach ($params as $key => $value) { $str .= '/' . rawurlencode($value); } //组装url $url = $base . '/' . $namespace . $str . $fragment; $url = url::clean($url); return $url; }
/** * 返回url中的页面名称, 如:/zotop/admin * * @return string */ public static function dirname() { $scriptname = url::scriptname(); $pathinfo = pathinfo($scriptname); return $pathinfo['dirname']; }
/** * 获取当前应用的url * * @return string 如:<install>/system/admin */ public static function application($id = '') { if (empty($id)) { return dirname(url::scriptname()); } $url = zotop::application($id, 'url'); if ($url[0] !== '/' && strpos($url, '://') === false) { $url = url::root() . '/' . $url; } return $url; }