function prepare() { global $REX, $REXPATH; $article_id = -1; $clang = $REX["CUR_CLANG"]; if (!file_exists(FULLNAMES_PATHLIST)) { rex_rewriter_generate_pathnames(array()); } // REXPATH wird auch im Backend benötigt, z.B. beim bearbeiten von Artikeln require_once FULLNAMES_PATHLIST; if (!$REX['REDAXO']) { $script_path = str_replace(' ', '%20', dirname($_SERVER['PHP_SELF'])); $length = strlen($script_path); $path = substr($_SERVER['REQUEST_URI'], $length); // Serverdifferenzen angleichen if ($path[0] == '/') { $path = substr($path, 1); } // Parameter zählen nicht zum Pfad -> abschneiden if (($pos = strpos($path, '?')) !== false) { $path = substr($path, 0, $pos); } // Anker zählen nicht zum Pfad -> abschneiden if (($pos = strpos($path, '#')) !== false) { $path = substr($path, 0, $pos); } if ($path == '') { $this->setArticleId($REX['START_ARTICLE_ID']); return true; } // konvertiert params zu GET/REQUEST Variablen if ($this->use_params_rewrite) { if (strstr($path, '/+/')) { $tmp = explode('/+/', $path); $path = $tmp[0] . '/'; $vars = explode('/', $tmp[1]); for ($c = 0; $c < count($vars); $c += 2) { if ($vars[$c] != '') { $_GET[$vars[$c]] = $vars[$c + 1]; $_REQUEST[$vars[$c]] = $vars[$c + 1]; } } } } // aktuellen pfad mit pfadarray vergleichen foreach ($REXPATH as $key => $var) { foreach ($var as $k => $v) { if ($path == $v) { $article_id = $key; $clang = $k; } } } // Check Clang StartArtikel if ($article_id == -1) { foreach ($REX['CLANG'] as $key => $var) { if ($var . '/' == $path || $var == $path) { $clang = $key; } } } // Check levenshtein if ($this->use_levenshtein && $article_id == -1) { foreach ($REXPATH as $key => $var) { foreach ($var as $k => $v) { $levenshtein[levenshtein($path, $v)] = $key . '#' . $k; } } ksort($levenshtein); $best = explode('#', array_shift($levenshtein)); $this->setArticleId($best[0]); $clang = $best[1]; } if ($article_id == -1) { $article_id = $REX['NOTFOUND_ARTICLE_ID']; } $this->setArticleId($article_id, $clang); } }
function prepare() { global $REX, $REXPATH; $article_id = -1; $clang = $REX["CUR_CLANG"]; if (!file_exists(FULLNAMES_PATHLIST)) { rex_rewriter_generate_pathnames(array()); } // REXPATH wird auch im Backend benötigt, z.B. beim bearbeiten von Artikeln require_once FULLNAMES_PATHLIST; if (!$REX['REDAXO']) { $script_path = str_replace(' ', '%20', dirname($_SERVER['PHP_SELF'])); // ANDERE DIR_SEP ALS "/" ERSETZEN (WIN BACKSLASHES) $script_path = str_replace(DIRECTORY_SEPARATOR, '/', $script_path); $length = strlen($script_path); $path = substr($_SERVER['REQUEST_URI'], $length); // Serverdifferenzen angleichen if ($path[0] == '/') { $path = substr($path, 1); } // Parameter zählen nicht zum Pfad -> abschneiden if (($pos = strpos($path, '?')) !== false) { $path = substr($path, 0, $pos); } // Anker zählen nicht zum Pfad -> abschneiden if (($pos = strpos($path, '#')) !== false) { $path = substr($path, 0, $pos); } if ($path == '' || $path == $REX['FRONTEND_FILE']) { $this->setArticleId($REX['START_ARTICLE_ID']); return true; } // konvertiert params zu GET/REQUEST Variablen if ($this->use_params_rewrite) { if (strstr($path, '/+/')) { $tmp = explode('/+/', $path); $path = $tmp[0] . '/'; $vars = explode('/', $tmp[1]); for ($c = 0; $c < count($vars); $c += 2) { if ($vars[$c] != '') { $_GET[$vars[$c]] = $vars[$c + 1]; $_REQUEST[$vars[$c]] = $vars[$c + 1]; } } } } // aktuellen pfad mit pfadarray vergleichen foreach ($REXPATH as $key => $var) { foreach ($var as $k => $v) { if ($path == $v) { $article_id = $key; $clang = $k; } } } // Check Clang StartArtikel if ($article_id == -1) { foreach ($REX['CLANG'] as $key => $var) { if ($var . '/' == $path || $var == $path) { $clang = $key; } } } // Check levenshtein if ($this->use_levenshtein && $article_id == -1) { foreach ($REXPATH as $key => $var) { foreach ($var as $k => $v) { $levenshtein[levenshtein($path, $v)] = $key . '#' . $k; } } ksort($levenshtein); $best = explode('#', array_shift($levenshtein)); $article_id = $best[0]; $clang = $best[1]; } elseif ($article_id == -1) { // ----- EXTENSION POINT $article_info = rex_register_extension_point('URL_REWRITE_ARTICLE_ID_NOT_FOUND', ''); if (isset($article_info['article_id']) && $article_info['article_id'] > -1) { $article_id = $article_info['article_id']; if (isset($article_info['clang']) && $article_info['clang'] > -1) { $clang = $article_info['clang']; } } // Nochmals abfragen wegen EP if ($article_id == -1) { // Damit auch die "index.php?article_id=xxx" Aufrufe funktionieren if (rex_request('article_id', 'int', 0) > 0) { $article_id = $REX['ARTICLE_ID']; } else { $article_id = $REX['NOTFOUND_ARTICLE_ID']; } } } $this->setArticleId($article_id, $clang); } }