Пример #1
0
 /**
  * Create a link to a module's method.
  * 
  * This method also mapped in control class to call conveniently.
  * <code>
  * <?php
  * helper::createLink('hello', 'index', 'var1=value1&var2=value2');
  * helper::createLink('hello', 'index', array('var1' => 'value1', 'var2' => 'value2');
  * ?>
  * </code>
  * @param string       $moduleName     module name
  * @param string       $methodName     method name
  * @param string|array $vars           the params passed to the method, can be array('key' => 'value') or key1=value1&key2=value2) or key1=value1&key2=value2
  * @param string|array $alias          the alias  params passed to the method, can be array('key' => 'value') or key1=value1&key2=value2) or key1=value1&key2=value2
  * @param string       $viewType       the view type
  * @static
  * @access public
  * @return string the link string.
  */
 public static function createLink($moduleName, $methodName = 'index', $vars = '', $alias = array(), $viewType = '')
 {
     global $app, $config;
     /* Set vars and alias. */
     if (!is_array($vars)) {
         parse_str($vars, $vars);
     }
     if (!is_array($alias)) {
         parse_str($alias, $alias);
     }
     foreach ($alias as $key => $value) {
         $alias[$key] = urlencode($value);
     }
     /* Seo modules return directly. */
     if (helper::inSeoMode() and method_exists('uri', 'create' . $moduleName . $methodName)) {
         $link = call_user_func_array('uri::create' . $moduleName . $methodName, array('param' => $vars, 'alias' => $alias));
         if ($link) {
             return $link;
         }
     }
     /* Set the view type. */
     if (empty($viewType)) {
         $viewType = $app->getViewType();
     }
     $link = $config->requestType == 'PATH_INFO' ? $config->webRoot : $_SERVER['SCRIPT_NAME'];
     /* The PATH_INFO type. */
     if ($config->requestType == 'PATH_INFO') {
         /* If the method equal the default method defined in the config file and the vars is empty, convert the link. */
         if ($methodName == $config->default->method and empty($vars)) {
             /* If the module also equal the default module, change index-index to index.html. */
             if ($moduleName == $config->default->module) {
                 $link .= 'index.' . $viewType;
             } elseif ($viewType == $app->getViewType()) {
                 $link .= $moduleName . '/';
             } else {
                 $link .= $moduleName . '.' . $viewType;
             }
         } else {
             $link .= "{$moduleName}{$config->requestFix}{$methodName}";
             foreach ($vars as $value) {
                 $link .= "{$config->requestFix}{$value}";
             }
             $link .= '.' . $viewType;
         }
     } elseif ($config->requestType == 'GET') {
         $link .= "?{$config->moduleVar}={$moduleName}&{$config->methodVar}={$methodName}";
         if ($viewType != 'html') {
             $link .= "&{$config->viewVar}=" . $viewType;
         }
         foreach ($vars as $key => $value) {
             $link .= "&{$key}={$value}";
         }
     }
     return $link;
 }
Пример #2
0
 /**
  * Create link.
  * 
  * @param  string    $title 
  * @access private
  * @return string
  */
 private function createLink($title)
 {
     global $config;
     if (helper::inSeoMode() && method_exists('uri', 'create' . $this->moduleName . $this->methodName)) {
         $link = $_SERVER['REQUEST_URI'];
         if ($this->params['pageID'] == 1) {
             return html::a(preg_replace('/\\/p\\d+\\./', '.', $link), $title);
         }
         if (preg_match('/\\/p\\d+/', $link)) {
             return html::a(preg_replace('/\\/p\\d+\\./', '/p' . $this->params['pageID'] . '.', $link), $title);
         }
         return html::a(str_replace('.', "/p{$this->params['pageID']}.", $link), $title);
     }
     return html::a(helper::createLink($this->moduleName, $this->methodName, $this->params), $title);
 }
Пример #3
0
 /**
  * Create link.
  * 
  * @param  string    $title 
  * @access private
  * @return string
  */
 private function createLink($title)
 {
     global $config;
     if (helper::inSeoMode() && method_exists('uri', 'create' . $this->moduleName . $this->methodName)) {
         $link = strip_tags(urldecode($_SERVER['REQUEST_URI']));
         if ($this->params['pageID'] == 1) {
             return html::a(preg_replace('/\\/p\\d+\\./', '.', $link), $title);
         }
         if (preg_match('/\\/p\\d+/', $link)) {
             return html::a(preg_replace('/\\/p\\d+\\./', '/p' . $this->params['pageID'] . '.', $link), $title);
         }
         if ($config->requestType == 'PATH_INFO2') {
             $link = str_replace('index.php/', 'index_php/', $link);
         }
         $link = str_replace('.', "/p{$this->params['pageID']}.", $link);
         if ($config->requestType == 'PATH_INFO2') {
             $link = str_replace('index_php/', 'index.php/', $link);
         }
         return html::a($link, $title);
     }
     return html::a(helper::createLink($this->moduleName, $this->methodName, $this->params), $title);
 }
Пример #4
0
 /**
  * Parse SEO URI for setRouteByPathInfo.
  *
  * @param uri
  * return string
  */
 public static function parseURI($uri)
 {
     global $config;
     if (!helper::inSeoMode()) {
         return $uri;
     }
     $categoryAlias = $config->seo->alias->category;
     $pageAlias = $config->seo->alias->page;
     $forumAlias = isset($config->seo->alias->forum) ? $config->seo->alias->forum : array();
     $methodAlias = $config->seo->alias->method;
     $params = array();
     if (strpos($uri, '_') !== false) {
         $uri = substr($uri, 0, strpos($uri, '_'));
     }
     /* Is there a pageID variable in the url?  */
     $pageID = 0;
     if (preg_match('/\\/p\\d+$/', $uri, $matches)) {
         $pageID = str_replace('/p', '', $matches[0]);
         // Get pageID thus the flowing logic can use it.
         $uri = str_replace($matches[0], '', $uri);
         // Remove the pageID part from the url.
     }
     /* Split uri to items and try to get module and params from it. */
     $items = explode('/', $uri);
     $module = $items[0];
     /* Use book instead of help. */
     if ($module == 'help') {
         $module = $items[0] = 'book';
     }
     /* There's no '/' in uri. */
     if (strpos($uri, '/') === false) {
         /* Use book instead of help. */
         if ($uri == 'help') {
             $uri = 'book';
         }
         if ($pageID and $module == 'blog' and count($items) == 1) {
             $params['category'] = 0;
             return seo::convertURI($module, 'index', $params, $pageID);
         }
         /* Not an alias, return directly. */
         if (empty($categoryAlias[$uri])) {
             return $uri;
         }
         /* The module is an alias of a category. */
         $module = $categoryAlias[$uri]->module;
         $params['category'] = $categoryAlias[$uri]->category;
         return seo::convertURI($module, 'browse', $params, $pageID);
     }
     /* Is the module an alias of a category? */
     if (isset($categoryAlias[$module])) {
         $category = $categoryAlias[$module]->category;
         // Get the category.
         $module = $categoryAlias[$module]->module;
         // Get the module of the alias category.
         /* If the first param is number, like article/123.html, should call view method. */
         if (is_numeric($items[1])) {
             $params['id'] = $items[1];
             return seo::convertURI($module, 'view', $params, $pageID);
         } else {
             if (!empty($items[1])) {
                 $viewparams = explode('-', $items[1]);
                 $id = end($viewparams);
             }
             if (is_numeric($id)) {
                 $params['id'] = $id;
                 return seo::convertURI($module, 'view', $params, $pageID);
             }
         }
         $params['category'] = $category;
         return seo::convertURI($module, 'browse', $params, $pageID);
     }
     //------------- The module is an system module-------------- */
     /* Is the module an alias of a page. */
     if ($module == 'page' && isset($pageAlias[$items[1]])) {
         $params['page'] = $items[1];
         return seo::convertURI($module, 'view', $params, $pageID);
     }
     if ($module == 'page' && !isset($pageAlias[$items[1]])) {
         $params['page'] = $items[1];
         return seo::convertURI($module, 'view', $params, $pageID);
     }
     if ($module == 'book' && count($items) > 2) {
         $uri = str_replace('/' . $items[1], '', $uri);
         $items[1] = $items[2];
     }
     if ($module == 'forum' && isset($pageAlias[$items[1]])) {
         $method = $methodAlias[$module]['browse'];
         return seo::convertURI($module, $method, $params, $pageID);
     }
     /*  If the first param is a category id, like news/c123.html. */
     if (preg_match('/^c\\d+$/', $items[1])) {
         $params['category'] = str_replace('c', '', $items[1]);
         $method = $methodAlias[$module]['browse'];
         return seo::convertURI($module, $method, $params, $pageID);
     }
     /* The first param is an object id. */
     if (is_numeric($items[1])) {
         $params['id'] = $items[1];
         $method = $methodAlias[$module]['view'];
         return seo::convertURI($module, $method, $params, $pageID);
     }
     $viewparams = explode('-', $items[1]);
     if (count($viewparams) > 1) {
         $id = end($viewparams);
         if (is_numeric($id)) {
             $params['id'] = $id;
             $method = $methodAlias[$module]['view'];
             return seo::convertURI($module, $method, $params, $pageID);
         }
     } else {
         /* The first param is a category alias. */
         $params['category'] = $items[1];
     }
     $method = isset($methodAlias[$module]['browse']) ? $methodAlias[$module]['browse'] : 'browse';
     return seo::convertURI($module, $method, $params, $pageID);
 }
Пример #5
0
 /**
  * Create a link to a module's method.
  * 
  * This method also mapped in control class to call conveniently.
  * <code>
  * <?php
  * helper::createLink('hello', 'index', 'var1=value1&var2=value2');
  * helper::createLink('hello', 'index', array('var1' => 'value1', 'var2' => 'value2');
  * ?>
  * </code>
  * @param string       $moduleName     module name
  * @param string       $methodName     method name
  * @param string|array $vars           the params passed to the method, can be array('key' => 'value') or key1=value1&key2=value2) or key1=value1&key2=value2
  * @param string|array $alias          the alias  params passed to the method, can be array('key' => 'value') or key1=value1&key2=value2) or key1=value1&key2=value2
  * @param string       $viewType       the view type
  * @static
  * @access public
  * @return string the link string.
  */
 public static function createLink($moduleName, $methodName = 'index', $vars = '', $alias = array(), $viewType = '')
 {
     global $app, $config;
     $requestType = $config->requestType;
     if (defined('FIX_PATH_INFO2') and FIX_PATH_INFO2) {
         $config->requestType = 'PATH_INFO2';
     }
     $clientLang = $app->getClientLang();
     $lang = $config->langCode;
     /* Set viewType is mhtml if visit with mobile.*/
     if (!$viewType and RUN_MODE == 'front' and helper::getDevice() == 'mobile' and $methodName != 'oauthCallback') {
         $viewType = 'mhtml';
     }
     /* Set vars and alias. */
     if (!is_array($vars)) {
         parse_str($vars, $vars);
     }
     if (!is_array($alias)) {
         parse_str($alias, $alias);
     }
     foreach ($alias as $key => $value) {
         $alias[$key] = urlencode($value);
     }
     /* Seo modules return directly. */
     if (helper::inSeoMode() and method_exists('uri', 'create' . $moduleName . $methodName)) {
         if ($config->requestType == 'PATH_INFO2') {
             $config->webRoot = $_SERVER['SCRIPT_NAME'] . '/';
         }
         $link = call_user_func_array('uri::create' . $moduleName . $methodName, array('param' => $vars, 'alias' => $alias, 'viewType' => $viewType));
         /* Add client lang. */
         if ($lang and $link) {
             $link = $config->webRoot . $lang . '/' . substr($link, strlen($config->webRoot));
         }
         if ($config->requestType == 'PATH_INFO2') {
             $config->webRoot = getWebRoot();
         }
         $config->requestType = $requestType;
         if ($link) {
             return $link;
         }
     }
     /* Set the view type. */
     if (empty($viewType)) {
         $viewType = $app->getViewType();
     }
     if ($config->requestType == 'PATH_INFO') {
         $link = $config->webRoot;
     }
     if ($config->requestType == 'PATH_INFO2') {
         $link = $_SERVER['SCRIPT_NAME'] . '/';
     }
     if ($config->requestType == 'GET') {
         $link = $_SERVER['SCRIPT_NAME'];
     }
     if ($config->requestType != 'GET' and $lang) {
         $link .= "{$lang}/";
     }
     /* Common method. */
     if (helper::inSeoMode()) {
         /* If the method equal the default method defined in the config file and the vars is empty, convert the link. */
         if ($methodName == $config->default->method and empty($vars)) {
             /* If the module also equal the default module, change index-index to index.html. */
             if ($moduleName == $config->default->module) {
                 $link .= 'index.' . $viewType;
             } elseif ($viewType == $app->getViewType()) {
                 $link .= $moduleName . '/';
             } else {
                 $link .= $moduleName . '.' . $viewType;
             }
         } else {
             $link .= "{$moduleName}{$config->requestFix}{$methodName}";
             foreach ($vars as $value) {
                 $link .= "{$config->requestFix}{$value}";
             }
             $link .= '.' . $viewType;
         }
     } else {
         $link .= "?{$config->moduleVar}={$moduleName}&{$config->methodVar}={$methodName}";
         if ($viewType != 'html') {
             $link .= "&{$config->viewVar}=" . $viewType;
         }
         foreach ($vars as $key => $value) {
             $link .= "&{$key}={$value}";
         }
         if ($lang and RUN_MODE != 'admin') {
             $link .= "&l={$lang}";
         }
     }
     $config->requestType = $requestType;
     return $link;
 }