function renderURL($_vars = '', $_request = '', $_store = false, $furl = null, $external = false) { $RenderedURL = ''; if (!$_request) { $_request = $_SERVER['REQUEST_URI']; $GetVars = $_GET; if (SystemSettings::is_hosted()) { $_request = preg_replace('@^/webasyst/@msi', '/', $_request); } } else { $GetVars = renderGetVars($_request); } if (!MOD_REWRITE_SUPPORT) { if (strpos($_request, 'index.php') === false && !$external) { if (strpos($_request, '?')) { $_request = str_replace('?', 'index.php?', $_request); } else { $_request .= 'index.php'; } } if (preg_match("/^\\?categoryID=(\\d+)\\&category_slug=[a-z0-9_]+\$/i", $_vars, $matches)) { $_vars = '?categoryID=' . $matches[1]; } if (preg_match("/^\\?ukey=product\\&productID=(\\d+)\\&product_slug=[a-z0-9_\\-]+\$/i", $_vars, $matches)) { $_vars = '?productID=' . $matches[1]; } } $anchor = preg_match('@(#[^#]*)$@', $_request, $sp) ? $sp[1] : ''; $anchor = preg_match('@(#[^#]*)$@', $_vars, $sp) ? $sp[1] : $anchor; /** * Set render mode */ if (strpos($_vars, '?') !== false) { $Mode = URLRENDMODE_RESET; $_vars = substr($_vars, 1, strlen($_vars) - 1) . '&lang_iso2='; } else { $Mode = URLRENDMODE_MODIFY; } /** * trim first ampersand */ if (strpos($_vars, '&') === 0) { $_vars = substr($_vars, 1, strlen($_vars) - 1); } /** * Render new get-tokens */ $ReceivedTokens = array(); $r_TokenStrs = explode('&', $_vars); $widgets_token = false; foreach ($r_TokenStrs as $TokenStr) { $r_Token = explode('=', $TokenStr, 2); if ($r_Token[0] == 'widgets') { $widgets_token = true; } if ($r_Token[0] == 'store_mode') { $mode_token = true; } if (isset($r_Token[1]) && strlen($r_Token[1])) { $ReceivedTokens[$r_Token[0]] = $r_Token[1]; if ($Mode == URLRENDMODE_MODIFY) { $GetVars[$r_Token[0]] = $r_Token[1]; } } else { switch ($Mode) { case URLRENDMODE_MODIFY: if (isset($GetVars[$r_Token[0]])) { unset($GetVars[$r_Token[0]]); } break; case URLRENDMODE_RESET: if (isset($GetVars[$r_Token[0]]) && $r_Token[0] != 'product_slug' && $r_Token[0] != 'category_slug') { $ReceivedTokens[$r_Token[0]] = $GetVars[$r_Token[0]]; } break; } } } /** * Render URL */ $newGetVars = array(); switch ($Mode) { case URLRENDMODE_MODIFY: $newGetVars =& $GetVars; break; case URLRENDMODE_RESET: $newGetVars =& $ReceivedTokens; break; } if (!$mode_token) { $Register =& Register::getInstance(); if ($store_mode = $Register->get('store_mode')) { $newGetVars['store_mode'] = $store_mode; } } if (!MOD_REWRITE_SUPPORT) { foreach (array('product_slug', 'category_slug') as $param) { if (isset($newGetVars[$param])) { unset($newGetVars[$param]); } } } if (!$widgets_token && count($newGetVars)) { $Register =& Register::getInstance(); /*@var $Register Register*/ if ($Register->get('widgets')) { $newGetVars['widgets'] = 1; } } if ($_store) { $_GET = $newGetVars; } if (class_exists('fURL') && $furl !== false) { fURL::convertGetToPath($_request, $newGetVars); } foreach ($newGetVars as $TokenName => $TokenValue) { $newGetVars[$TokenName] = $TokenName . '=' . $TokenValue; } $RenderedURL = implode('&', $newGetVars); if (strpos($_request, '?') !== false) { $RenderedURL = preg_replace('/\\?.*$/', '?' . $RenderedURL, $_request); } else { $RenderedURL = $_request . '?' . $RenderedURL; } $RenderedURL = preg_replace('@[\\?\\&]{1,2}$@', '', $RenderedURL); $RenderedURL = preg_replace('@^/{2,}@', '/', $RenderedURL); if (strlen($anchor) > 1) { $RenderedURL = preg_replace('@#[^#]*$@', '', $RenderedURL) . $anchor; } /** * Strore URL */ if ($_store) { // $_SERVER['REQUEST_URI'] = $RenderedURL; } return $RenderedURL; }