CinKon hat geschrieben:..Das Problem mit dem Fatal Error tritt auch nur bei Kategorien mit Unterkategorien auf. Nehme ich eine Änderung an der Aliase vor, wird diese auch umbenannt, aber es tritt eben der PHP-Error auf...
Ausserdem tritt der Fatal Error es auch nur in anderen Sprachen auf, nicht in Deutsch. Also Quasi in der Ursprungssprache ist alles in Ordnung, nur in Sprachen die synchronisiert wurden, kommt es zu Problemen. Wirkt sich jedoch im Frontend auch auf die deutsche Sprache aus...
Danke schon mal für das Feedback.
Nehmen wir z. B. an, dass du die Kategorie 123 umbenennen willst. In der Tabelle con_cat stehen dann Einträge, die als parentid den Wert 123 haben. Nun, die Funktion mr_strRenameCategory() holt alle Kategorien aus der Tabelle con_cat mit parentid=123 und erwartet in der Tabelle con_cat_lang genau diese Kategorien, die sind anscheinend nicht in der anderen Sprache drin...
Ok, ersetze bitte die Funktion gegen folghende Version:
Code: Alles auswählen
function mr_strRenameCategory(array $data){
Contenido_mpDebug::getInstance()->log($data, 'mr_strRenameCategory $data');
// hes 20100102
// maximal 50 recursion level
$recursion = (is_int($data['recursion'])) ? $data['recursion'] : 1;
if ($recursion > 50) {
exit("#20100201-1503: sorry - maximum function nesting level of ".$recursion." reached");
}
$mrCatAlias = (trim($data['newcategoryalias']) !== '') ? trim($data['newcategoryalias']) : trim($data['newcategoryname']);
if ($mrCatAlias != '') {
// set new urlname - because original set urlname isn''t validated for double entries in same parent category
ModRewrite::setCatWebsafeName($mrCatAlias, $data['idcat'], $data['lang']);
ModRewrite::setCatUrlPath($data['idcat'], $data['lang']);
}
// hes 20100102
// now dive into all existing subcategories and modify their paths too...
$str = 'parentid=' . $data['idcat'];
$oCatColl = new cApiCategoryCollection($str);
while ($oCat = $oCatColl->next()) {
// hes 20100102
$str = 'idcat=' . $oCat->get('idcat') . ' AND idlang=' . (int)$data['lang'];
$oCatLanColl = new cApiCategoryLanguageCollection($str);
if ($oCatLan = $oCatLanColl->next()) {
// hes 20100102
$childData = array(
'idcat' => $oCat->get('idcat'),
'lang' => (int)$data['lang'],
'newcategoryname' => $oCatLan->get('name'),
'newcategoryalias' => $oCatLan->get('urlname'),
'recursion' => $recursion + 1
);
$resData = mr_strRenameCategory($childData);
}
}
return $data;
}
Damit sollte der Fehler nicht mehr auftauchen.
Gruß
xmurrix