Problem mit Mod rewrite

Gesperrt
22577
Beiträge: 26
Registriert: Do 22. Dez 2005, 09:24
Kontaktdaten:

Problem mit Mod rewrite

Beitrag von 22577 »

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
kummer
Beiträge: 2423
Registriert: Do 6. Mai 2004, 09:17
Wohnort: Bern, Schweiz
Kontaktdaten:

Beitrag von kummer »

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)
22577
Beiträge: 26
Registriert: Do 22. Dez 2005, 09:24
Kontaktdaten:

Beitrag von 22577 »

So jetzt tuts! :D
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.

        }

}
Gesperrt