/** * Gibt eine Url zu einem Artikel zurück. * * @param string $_id * @param int|string $_clang SprachId des Artikels * @param array|string $_params Array von Parametern * @param bool $escape Flag whether the argument separator "&" should be escaped (&) * * @return string * * @package redaxo\structure */ function rex_getUrl($_id = '', $_clang = '', $_params = '', $escape = true) { $id = (int) $_id; $clang = (int) $_clang; // ----- get id if ($id == 0) { $id = rex::getProperty('article_id'); } // ----- get clang // Wenn eine rexExtension vorhanden ist, immer die clang mitgeben! // Die rexExtension muss selbst entscheiden was sie damit macht if ($_clang === '' && (rex_clang::count() > 1 || rex_extension::isRegistered('URL_REWRITE'))) { $clang = rex_clang::getCurrentId(); } // ----- get params $param_string = rex_param_string($_params, $escape ? '&' : '&'); $name = 'NoName'; if ($id != 0) { $ooa = rex_article::get($id, $clang); if ($ooa) { $name = rex_parse_article_name($ooa->getName()); } } // ----- EXTENSION POINT $url = rex_extension::registerPoint(new rex_extension_point('URL_REWRITE', '', ['id' => $id, 'name' => $name, 'clang' => $clang, 'params' => $param_string, 'escape' => $escape])); if ($url == '') { $_clang = ''; if (rex_clang::count() > 1) { $_clang .= ($escape ? '&' : '&') . 'clang=' . $clang; } $url = rex_url::frontendController() . '?article_id=' . $id . $_clang . $param_string; } return $url; }
function a724_generatePathnamesFromTable($params) { $debug = false; $sql = new rex_sql(); $results = $sql->getArray('SELECT article_id, url_table, url_table_parameters FROM rex_a724_frau_schultze WHERE url_table != "" AND url_table_parameters != ""'); $URLPATH = array(); if ($sql->getRows() >= 1) { a724_deletePathnamesFromTable(); foreach ($results as $result) { if (is_array($result) && count($result) > 0) { $path = rex_getUrl($result['article_id']) . '/'; $path = str_replace('.html', '', $path); $table = $result['url_table']; $params = unserialize($result['url_table_parameters']); $col_name = $params[$table][$table . "_name"]; $col_id = $params[$table][$table . "_id"]; // Daten zum Aufbau der Urls holen $sqlu = new rex_sql(); $sqlu->setDebug($debug); $res = $sqlu->getArray('SELECT ' . $col_name . ' AS name, ' . $col_id . ' AS id FROM ' . $table); if ($sqlu->getRows() >= 1) { // Urls in die Datenbank schreiben $sqli = new rex_sql(); $sqli->setDebug($debug); foreach ($res as $re) { $table_path = $path . strtolower(rex_parse_article_name($re['name'])) . '.html'; $table_id = $re['id']; $URLPATH[$result['url_table']][$table_id] = $table_path; $sqli->setTable('rex_a724_frau_schultze'); $sqli->setValue('article_id', $result['article_id']); $sqli->setValue('status', '1'); $sqli->setValue('url_table', $result['url_table']); $sqli->setValue('name', $table_path); $sqli->insert(); } } } } } rex_put_file_contents(A724_URL_TABLE_PATHLIST, "<?php\n\$URLPATH = " . var_export($URLPATH, true) . ";\n"); }
/** * Gibt eine Url zu einem Artikel zurück * * @param [$id] ArtikelId des Artikels * @param [$clang] SprachId des Artikels * @param [$params] Array von Parametern * @param [$divider] Trennzeichen für Parameter * (z.B. & für HTML, & für Javascript) */ function rex_getUrl($id = '', $clang = '', $params = '', $divider = '&') { global $REX, $article_id; $id = (int) $id; $clang = (int) $clang; // ----- get id if (strlen($id) == 0 || $id == 0) { $id = $article_id; } // ----- get clang // Wenn eine rexExtension vorhanden ist, immer die clang mitgeben! // Die rexExtension muss selbst entscheiden was sie damit macht if (strlen($clang) == 0 && (count($REX['CLANG']) > 1 || rex_extension_is_registered('URL_REWRITE'))) { $clang = $REX['CUR_CLANG']; } // ----- get params $param_string = rex_param_string($params, $divider); // ----- get article name $id = (int) $id; if ($id != 0) { $ooa = OOArticle::getArticleById($id, $clang); if ($ooa) { $name = rex_parse_article_name($ooa->getName()); } } if (!isset($name) or $name == '') { $name = 'NoName'; } // ----- EXTENSION POINT $url = rex_register_extension_point('URL_REWRITE', '', array('id' => $id, 'name' => $name, 'clang' => $clang, 'params' => $param_string)); if ($url == '') { // ----- get rewrite function if ($REX['MOD_REWRITE'] === true || $REX['MOD_REWRITE'] == 'true') { $rewrite_fn = 'rex_apache_rewrite'; } else { $rewrite_fn = 'rex_no_rewrite'; } $url = call_user_func($rewrite_fn, $id, $name, $clang, $param_string); } return $url; }
function rex_parseArticleName($name) { return rex_parse_article_name($name); }
function rex_rewriter_appendToPath($path, $name) { if ($name != '') { $name = strtolower(rex_parse_article_name($name)); $path .= $name . '/'; } return $path; }
/** * Erzeugt die Domains * */ public static function generatePathFile($params) { global $REX; $myself = 'url_control'; $addon = $REX['ADDON'][$myself]['addon']; $rewriter = $REX['ADDON'][$myself]['rewriter']; $query = ' SELECT `article_id`, `clang`, `table`, `table_parameters` FROM ' . $REX['TABLE_PREFIX'] . 'url_control_generate '; $sql = rex_sql::factory(); $sql->setQuery($query); $paths = array(); if ($sql->getRows() >= 1) { $results = $sql->getArray(); foreach ($results as $result) { $article_id = $result['article_id']; $clang = $result['clang']; $a = OOArticle::getArticleById($article_id, $clang); if ($a instanceof OOArticle) { if (isset($rewriter[$addon]['get_url'])) { $func = $rewriter[$addon]['get_url']; $path = call_user_func($func, $article_id, $clang); } else { $path = $a->getUrl(); } $path = parent::getCleanPath($path); $table = $result['table']; $table_params = unserialize($result['table_parameters']); $name = $table_params[$table][$table . '_name']; $name_2 = $table_params[$table][$table . '_name_2']; $id = $table_params[$table][$table . '_id']; $restriction_field = $table_params[$table][$table . '_restriction_field']; $restriction_operator = $table_params[$table][$table . '_restriction_operator']; $restriction_value = $table_params[$table][$table . '_restriction_value']; $qyery_where = ''; if ($restriction_field != '' && $restriction_value != '' && in_array($restriction_operator, self::getRestrictionOperators())) { switch ($restriction_operator) { case 'IN (...)': case 'NOT IN (...)': $restriction_operator = str_replace(' (...)', '', $restriction_operator); $values = explode(',', $restriction_value); foreach ($values as $key => $value) { if (!(int) $value > 0) { unset($values[$key]); } } $restriction_value = ' (' . implode(',', $values) . ') '; break; case 'BETWEEN': case 'NOT BETWEEN': $values = explode(',', $restriction_value); if (count($values) == 2) { $restriction_value = $values[0] . ' AND ' . $values[1]; } break; default: $restriction_value = '"' . mysql_real_escape_string($restriction_value) . '"'; break; } $qyery_where = ' WHERE ' . $restriction_field . ' ' . $restriction_operator . ' ' . $restriction_value . ''; } $query_select = $name_2 != '' ? ', ' . $name_2 . ' AS name_2' : ''; $query = ' SELECT ' . $name . ' AS name, ' . $id . ' AS id ' . $query_select . ' FROM ' . $table . ' ' . $qyery_where . ' '; $s = rex_sql::factory(); $s->setQuery($query); if ($s->getRows() >= 1) { $urls = $s->getArray(); $save_names = array(); foreach ($urls as $url) { if (isset($url['name_2']) && $url['name_2'] != '') { $url['name'] = $url['name'] . ' ' . $url['name_2']; } if (isset($save_names[$url['name']])) { $url['name'] = $url['name'] . '-' . $url['id']; } $paths[$table][$article_id][$clang][$url['id']] = $path . strtolower(rex_parse_article_name($url['name'])) . '.html'; $save_names[$url['name']] = ''; } } } } } rex_put_file_contents(self::$path_file, json_encode($paths)); }
function rex_rewriter_generate_pathnames($params = array()) { global $REX; $db = new rex_sql(); $result = $db->getArray('SELECT id,name,clang,path FROM rex_article'); if (is_array($result)) { foreach ($result as $var) { $article_names[$var['id']][$var['clang']]['name'] = rex_parse_article_name($var['name']); } } $fcontent = '<?php' . "\n"; if (is_array($result)) { foreach ($result as $var) { $clang = $var['clang']; if (count($REX['CLANG']) > 1) { $pathname = $REX['CLANG'][$clang] . '/'; } else { $pathname = ''; } $path = explode('|', $var['path']); $path[] = $var['id']; foreach ($path as $p) { if ($p != '') { $curname = $article_names[$p][$clang]['name']; if ($curname != '') { $pathname .= $curname . '/'; } } } $fcontent .= '$REXPATH[\'' . $var['id'] . '\'][\'' . $var['clang'] . '\'] = "' . mysql_escape_string($pathname) . '";' . "\n"; } } $fcontent .= '?>'; $handle = fopen($REX['INCLUDE_PATH'] . '/generated/files/pathlist.php', 'w'); fwrite($handle, $fcontent); fclose($handle); }