Hallo,
wir haben bei unserem Contenido die mod_rewrite Erweiterung aktiviert. Läuft auch prima, nur nach dem ändern eines Kategorienamens ist die Kategorie nicht mehr erreichbar. Solange bis einmal unter Contenido nach "Content -> Kategorie -> Aliase" gewechselt wird und hier auf OK geklickt wird.
Hat da schon jemand eine bessere Lösung als immer wieder die Aliase neu zu speichern?
Ingo
Problem mit Mod rewrite
ab mysql 5 kann man dies mit triggers lösen. bis dorthin habe ich keine bessere lösung parat.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
So jetzt tuts!
Bestimmt nicht der beste Code aber es tuts.
Ich habe die funktion strRenameCategory der Datei contenido/includes/functions.str.php etwas geändert:

Bestimmt nicht der beste Code aber es tuts.
Ich habe die funktion strRenameCategory der Datei contenido/includes/functions.str.php etwas geändert:
Code: Alles auswählen
function strRenameCategory ($idcat, $lang, $newcategoryname) {
global $db;
global $cfg;
// Flag to rebuild the category table
global $remakeCatTable;
global $remakeStrTable;
$remakeCatTable = true;
$remakeStrTable = true;
if ($newcategoryname != "") {
$sql = "UPDATE ".$cfg["tab"]["cat_lang"]." SET urlname='".htmlspecialchars(capiStrCleanURLCharacters($newcategoryname), ENT_QUOTES)."', name='".htmlspecialchars($newcategoryname, ENT_QUOTES)."', lastmodified = '".date("Y-m-d H:i:s")."' WHERE idcat='$idcat' AND idlang='$lang' ";
$db->query($sql);
// edit by Ingo
$sUrlName = capiStrCleanURLCharacters($newcategoryname);
if ( ModRewrite::in_category($sUrlName, $db->f("idcat"), $lang) )
$sUrlName.="_".$idcat;
$sql = "UPDATE {$cfg['tab']['cat_lang']} SET urlname = '". $sUrlName ."' WHERE idcat = '".$idcat."' AND idlang = '$lang'";
if (!is_object($db_ingo)) $db_ingo = new DB_Contenido;
$db_ingo->query($sql);
$sql = "SELECT client.frontendpath FROM {$cfg['tab']['clients']} AS client
INNER JOIN {$cfg['tab']['cat']} AS cat ON cat.idclient = client.idclient
WHERE cat.idcat = ".$idcat ;
$db_ingo->query($sql);
if (!$db_ingo->next_record()) {
echo "Konnte Frontendpath nicht finden.";
}else{
$ClientPath = $db_ingo->f('frontendpath');
unlink($ClientPath."cache/locationstring-url-cache-$lang.txt");
}
// end edit
// edit by stese - ModRewrite
// set new urlname - because original set urlname isn't validated for double entries in same parent category
// ModRewrite::set_category ( $newcategoryname, $idcat, $lang );
// end edit
} else {
//echo ("Fehlermeldung aufrufen: strrenamecategory");
// Header("Location: str_main.php?error=2"); // ohne Namen wird nicht umbenannt.
}
}