コード例 #1
0
function rewriteHandle($match)
{
    //echo '<pre>';
    //print_r($match);
    //echo '</pre>';
    $c = count($match);
    $is_idcatside = strstr($match['0'], 'idcatside=');
    if ($c < 3) {
        //without lang var
        if ($is_idcatside) {
            $out = rewriteGetPageUrl($match['1'], $GLOBALS['lang']);
        } else {
            $out = rewriteGetCatUrl($match['1'], $GLOBALS['lang']);
        }
    } else {
        //with langvar
        if ($is_idcatside) {
            $out = rewriteGetPageUrl($match['3'], $match['1']);
        } else {
            $out = rewriteGetCatUrl($match['3'], $match['1']);
        }
    }
    //echo $out.'<br>';
    return $out;
}
コード例 #2
0
ファイル: FrontendTools.php プロジェクト: rbraband/sefrengo
 public function getMappedCmsLinks($code, $options = array())
 {
     if ($code == '') {
         return $code;
     }
     $def_options = array('force_http_path' => FALSE, 'force_entitydecode' => FALSE, 'force_langprefix' => FALSE);
     $options = array_merge($def_options, $options);
     $all_searches = array();
     $all_replaces = array();
     $matches = array();
     $sess = $this->cfg->sess();
     $is_rewrite2 = $this->cfg->env('is_frontend_rewrite2');
     $use_idlang_in_rewrite2 = $this->cfg->client('url_langid_in_defaultlang') == '1';
     preg_match_all("!cms://(idcat|idcatside)=(\\d+)(\\?([^'\"><\\s]+))?!", $code, $matches);
     if (count($matches) > 0) {
         //init common vars
         $is_backend = $this->cfg->env('is_backend');
         $view = $is_backend ? $this->cfg->env('view') : FALSE;
         $is_rewrite1 = $this->cfg->env('is_frontend_rewrite1');
         $current_idlang = $this->cfg->env('idlang');
         $idstartlang = $this->cfg->env('idstartlang');
         $is_https_enabled = $this->cfg->client('https') == '1' ? TRUE : FALSE;
         $contentfile = $this->cfg->client('contentfile');
         $path_http = $this->cfg->env('path_frontend_http');
         $sep = '&amp;';
         $pageinfos = $catinfos = $path_https = FALSE;
         if ($is_https_enabled) {
             $pageinfos = sf_api('PAGE', 'Pageinfos');
             $catinfos = sf_api('PAGE', 'Catinfos');
             $path_https = str_replace('http://', 'https://', $path_http);
         }
         //sort uris
         $uris = $matches['0'];
         $cmp = create_function('$a,$b', 'if (strlen($a) == strlen($b)) { return 0; } return strlen($a) > strlen($b) ? -1 : 1;');
         uasort($uris, $cmp);
         $uris = array_unique($uris);
         foreach ($uris as $k => $search) {
             //idcatside or idcat
             $type = $matches['1'][$k];
             $parms = $matches['4'][$k];
             $local_sep = $sep;
             $local_parmstr = '';
             $local_lang = FALSE;
             $local_langstr = '';
             $local_langprefix = FALSE;
             $local_view = '';
             $replace = '';
             $parmarr = array();
             if ($parms != '') {
                 $parms = str_replace('&amp;', '&', $parms);
                 $parmpairs = explode('&', $parms);
                 foreach ($parmpairs as $pv) {
                     $key = $val = '';
                     list($key, $val) = explode('=', $pv, 2);
                     $parmarr[$key] = $val;
                 }
                 // use '&' or '&amp;' as separator
                 if (array_key_exists('sf_entitydecode', $parmarr) || $options['force_entitydecode']) {
                     if ($parmarr['sf_entitydecode'] == 'true' || $options['force_entitydecode'] === TRUE) {
                         $local_sep = '&';
                         unset($parmarr['sf_entitydecode']);
                     }
                 }
                 //use lang id
                 if (array_key_exists('lang', $parmarr)) {
                     $local_lang = (int) $parmarr['lang'];
                     unset($parmarr['lang']);
                 }
                 //handle view parm
                 if (array_key_exists('view', $parmarr)) {
                     if ($is_backend) {
                         $local_view = $parmarr['view'];
                     }
                     unset($parmarr['view']);
                 }
                 //handle mod_rewrite2 langprefix
                 if (array_key_exists('sf_langprefix', $parmarr) || $options['force_langprefix']) {
                     if ($parmarr['sf_langprefix'] == 'true') {
                         $local_langprefix = TRUE;
                     }
                     unset($parmarr['sf_langprefix']);
                 }
                 if (count($parmarr) > 0) {
                     $parmarr2 = array();
                     foreach ($parmarr as $pk => $pv) {
                         array_push($parmarr2, $pk . '=' . $pv);
                     }
                     $local_parmstr = implode($local_sep, $parmarr2);
                 }
             }
             if ($is_backend) {
                 if ($idstartlang != $current_idlang && $local_lang < 1) {
                     $local_lang = $current_idlang;
                 }
                 if ($local_lang > 0) {
                     $local_langstr = 'lang=' . $local_lang . $local_sep;
                 }
                 if ($local_view != '') {
                     $local_view = 'view=' . $local_view;
                 } else {
                     $local_view = 'view=' . $view;
                 }
                 if ($local_parmstr != '') {
                     $local_parmstr = $local_sep . $local_parmstr;
                 }
                 $replace = $sess->url($contentfile . '?' . $local_langstr . $type . '=' . $matches['2'][$k] . $local_sep . $local_view . $local_parmstr);
             } else {
                 if ($is_rewrite1) {
                     if ($local_lang > 0) {
                         if ($local_lang != $current_idlang) {
                             $local_langstr = '-' . $local_lang;
                         }
                     }
                     if ($local_parmstr != '') {
                         $local_parmstr = '?' . $local_parmstr;
                     }
                     $pre = $type == 'idcatside' ? 'page' : 'cat';
                     $replace = $sess->url($pre . $matches['2'][$k] . $local_langstr . '.html' . $local_parmstr);
                 } else {
                     if ($is_rewrite2) {
                         if ($local_parmstr != '') {
                             $local_parmstr = '?' . $local_parmstr;
                         }
                         $local_langid = $local_lang > 0 ? $local_lang : $current_idlang;
                         if ($use_idlang_in_rewrite2 || $idstartlang != $local_langid) {
                             $local_langprefix = TRUE;
                         }
                         if ($type == 'idcatside') {
                             $replace = rewriteGetPageUrl($matches['2'][$k], $local_langid, $local_langprefix) . $local_parmstr;
                         } else {
                             $replace = rewriteGetCatUrl($matches['2'][$k], $local_langid, $local_langprefix) . $local_parmstr;
                         }
                     } else {
                         if ($local_lang > 0) {
                             if ($local_lang != $current_idlang) {
                                 $local_langstr = 'lang=' . $local_lang . $local_sep;
                             }
                         }
                         if ($local_parmstr != '') {
                             $local_parmstr = $local_sep . $local_parmstr;
                         }
                         $replace = $sess->url($contentfile . '?' . $local_langstr . $type . '=' . $matches['2'][$k] . $local_parmstr);
                     }
                 }
             }
             //https mappings
             if ($is_https_enabled) {
                 $this_page_hase_https_enabled = $type == 'idcatside' ? $pageinfos->getIsHttps($matches['2'][$k]) == '1' : $catinfos->getStartpageIsHttps($matches['2'][$k]);
                 if (!$this->cfg->env('is_https') && $this_page_hase_https_enabled) {
                     $replace = $path_https . $replace;
                 } else {
                     if ($this->cfg->env('is_https') && !$this_page_hase_https_enabled) {
                         $replace = $path_http . $replace;
                     }
                 }
             }
             //Force http path
             if ($options['force_http_path']) {
                 if (substr($replace, 0, 4) != 'http') {
                     $replace = $path_http . $replace;
                 }
             }
             array_push($all_searches, $search);
             array_push($all_replaces, $replace);
         }
         $code = str_replace($all_searches, $all_replaces, $code);
         //if mod rewrite 2: handle local anchor links
         if ($is_rewrite2) {
             $code = preg_replace("!(<a[\\s]+[^>]*?href[\\s]?=[\\s\"\\']+)#(.*?)([\"\\'])!i", '\\1' . str_replace('&', '&amp;', $_SERVER['REQUEST_URI']) . '#\\2\\3', $code);
         }
     }
     return $code;
 }