[gelöst] Zuordnung zu Kategorien ändern
[gelöst] Zuordnung zu Kategorien ändern
Wenn wir einen Artikel kopieren und versuchen die Kategoriezuweisung zu löschen und neu zu setzen, dann klappt das nicht. Ist das ein Bug, ein Anwendungsfehler, ein Denkfehler?
Version 4.6.15
Version 4.6.15
Zuletzt geändert von mko am Mo 5. Mär 2007, 09:55, insgesamt 1-mal geändert.
Wie wurde der Artikel zwei Kategorien zugeordnet? Ist das eine migrierte DB?
Wie äußert sich "klappt das nicht"? Passiert nach "Zuweisung entfernen" nichts oder wird die angeklickte Kategorie nicht gespeichert? Gibt es eine Fehlermeldung? Errorlog?
Gruß
HerrB
Wie äußert sich "klappt das nicht"? Passiert nach "Zuweisung entfernen" nichts oder wird die angeklickte Kategorie nicht gespeichert? Gibt es eine Fehlermeldung? Errorlog?
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Wir haben Contendio von 4.4.x auf 4.6.15 upgedatet. Hat auch alles toll funktioniert. Nun wollen wir einen Artikel der in 2 Kategorien vorkommt, duplizieren => passt. Der duplizierte Artikel ist nun in 1er Kategorie, dort wo wir dupliziert haben, zugeordnet und auch editierbar. Das Auswahlfeld mit den Kategorien ist grau hinterlegt und nicht anklickbar. Nach Zuweisungen entfernen ändert sich dieser Zustand nicht. Keine Fehlermeldung im Log.
Bug. Und ein besonders schöner noch dazu.
Also...
Wenn man auf "Zuweisung aufheben" klickt, werden alle Zuweisungen des Artikels zu Kategorien gelöscht. Mit Ausnahme von Zuweisungen zur aktuellen Kategorie.
Es passiert nun deswegen nichts, da der Artikel mit Mehrfachzuweisungen zwar dupliziert wurde, jedoch nicht korrekt: Der Artikel ist der aktuellen Kategorie nun so oft zugewiesen, wie er vorher anderen Kategorien zugeordnet war. D.h. wenn ein Artikel drei Kategorien zugeordnet war, ist das Duplikat nun dreimal der aktuellen Kategorie zugewiesen.
Da die Anzahl der Kategorien > 1 erscheint der Button "Zuweisung aufheben" - die Funktion macht aber scheinbar nichts, da ja eben nur Zuweisungen zu anderen Kategorien entfernt werden...
Schönes Teil.
Lösung für mko: In die DB in die con_cat_art gehen und nach der idart des Artikels filtern. Nun alle Zeilen mit dieser idart bis auf eine rauslöschen.
Dauerhafte Lösung:
Tja, da gäbe es zwei:
In contenido/includes/con_art_overview.php die idcat bei diesem Aufruf weglassen:
d.h.
Aber so richtig richtig wäre vermutlich eher die Änderung in contenido/includes/functions.con.php, Funktion conCopyArticle:
Statt
bei Angabe einer idcat nur einmal eine Zuweisung erstellen:
Ungetestet.
Haken: Bei der Korrektur in der functions.con.php ist der Artikel nach dem Duplizieren nicht mehr mehreren Kategorien zugewiesen - auch hier wäre die Korrektur, in der con_art_overview die idcat bei conCopy Article wegzulassen.
Meinungen?
Gruß
HerrB
Also...
Wenn man auf "Zuweisung aufheben" klickt, werden alle Zuweisungen des Artikels zu Kategorien gelöscht. Mit Ausnahme von Zuweisungen zur aktuellen Kategorie.
Es passiert nun deswegen nichts, da der Artikel mit Mehrfachzuweisungen zwar dupliziert wurde, jedoch nicht korrekt: Der Artikel ist der aktuellen Kategorie nun so oft zugewiesen, wie er vorher anderen Kategorien zugeordnet war. D.h. wenn ein Artikel drei Kategorien zugeordnet war, ist das Duplikat nun dreimal der aktuellen Kategorie zugewiesen.
Da die Anzahl der Kategorien > 1 erscheint der Button "Zuweisung aufheben" - die Funktion macht aber scheinbar nichts, da ja eben nur Zuweisungen zu anderen Kategorien entfernt werden...
Schönes Teil.
Lösung für mko: In die DB in die con_cat_art gehen und nach der idart des Artikels filtern. Nun alle Zeilen mit dieser idart bis auf eine rauslöschen.
Dauerhafte Lösung:
Tja, da gäbe es zwei:
In contenido/includes/con_art_overview.php die idcat bei diesem Aufruf weglassen:
Code: Alles auswählen
if ($action == "con_duplicate")
{
$newidartlang = conCopyArticle($duplicate, $idcat);
}
Code: Alles auswählen
if ($action == "con_duplicate")
{
$newidartlang = conCopyArticle($duplicate);
}
Statt
Code: Alles auswählen
/* Update category */
$sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '$srcidart'";
$db->query($sql);
while ($db->next_record())
{
$nextid = $db2->nextid($cfg["tab"]["cat_art"]);
$idcatart = $nextid;
if ($targetcat != 0)
{
$idcat = $targetcat;
} else {
$idcat = $db->f("idcat");
}
$idart = $dstidart;
$is_start = 0;
$status = $db->f("status");
$createcode = 1;
$sql = "INSERT INTO ".$cfg["tab"]["cat_art"]
." (idcatart, idcat, idart, is_start, status,
createcode) VALUES ('$idcatart', '$idcat',
'$idart', '$is_start', '$status', '$createcode')";
$db2->query($sql);
}
Code: Alles auswählen
/* Update category */
$sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '$srcidart'";
$db->query($sql);
if ($targetcat != 0)
{
/* Target category specified, assign only once */
if ($db->next_record())
{
$nextid = $db2->nextid($cfg["tab"]["cat_art"]);
$idcatart = $nextid;
$idcat = $targetcat;
$idart = $dstidart;
$is_start = 0;
$status = $db->f("status");
$createcode = 1;
$sql = "INSERT INTO ".$cfg["tab"]["cat_art"].
" (idcatart, idcat, idart, is_start, status, createcode) VALUES ".
" ('$idcatart', '$idcat', '$idart', '$is_start', '$status', '$createcode')";
$db2->query($sql);
}
} else {
/* No target category specified, assign to same categories as the original article */
while ($db->next_record())
{
$nextid = $db2->nextid($cfg["tab"]["cat_art"]);
$idcatart = $nextid;
$idcat = $db->f("idcat");
$idart = $dstidart;
$is_start = 0;
$status = $db->f("status");
$createcode = 1;
$sql = "INSERT INTO ".$cfg["tab"]["cat_art"].
" (idcatart, idcat, idart, is_start, status, createcode) VALUES ".
" ('$idcatart', '$idcat', '$idart', '$is_start', '$status', '$createcode')";
$db2->query($sql);
}
}
Haken: Bei der Korrektur in der functions.con.php ist der Artikel nach dem Duplizieren nicht mehr mehreren Kategorien zugewiesen - auch hier wäre die Korrektur, in der con_art_overview die idcat bei conCopy Article wegzulassen.
Meinungen?
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
hmm... ja schöner bug...HerrB hat geschrieben:Meinungen?
ich halte die while schleife für einen fehler...
ausgehend davon wenn es richtig funktonieren würde... -> mehrfach zugeordnete artikel würden in jeder kategorie zugeordnet werden...
sinnvoll ? find ich nicht...
zusätzlich
macht man eine kopie eines artikels ohne angabe einer ziel idcat macht es sinn den artikel nur in der ersten kategorie in der sich der artikel ursprünglich befindet zuzuordnen....
na wie auch immer...
der code hat ja noch einen bug... das feld status wird immer 0 sein...
*** make your own tools (wishlist :: thx)
Stimmt. status im SQL-Statement ergänzen (Memo... ).der code hat ja noch einen bug... das feld status wird immer 0 sein...
Na ja, das erste SQL-Statement ermittelt ja die idcat, denen der Artikel zugeordnet ist - nur diesen wird dann auch der duplizierte Artikel zugeordnet.mehrfach zugeordnete artikel würden in jeder kategorie zugeordnet werden...
Werde es noch ein wenig putzen...
Gruß
HerrB
Bitte keine unaufgeforderten PMs oder E-Mails -> use da Forum!
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
Newsletter: V4.4.x | V4.6.0-15 (Module, Backend) | V4.6.22+
Standardartikelliste: V4.4.x | V4.6.x
http://www.contenido.org/forum/search.php | http://faq.contenido.org | http://www.communido.net
ich hab das jetzt etwas umgebaut...
ohne angabe einer target idcat wird der kopierte artikel den selben kategorien zugeordnet wie das orginal... (falls das nicht gewünscht ist -> einfach while durch if ersetzen)
falls eine target idcat angeben wurde wird nur eine zuordnung vorgenommen, auch wenn der artikel mehrfach zugeordnet wäre...
status wird nun auch mit berücksichtigt....(obwohl es eh nicht verwendet wird....)
Code: Alles auswählen
/* Update category relationship */
$sql = "SELECT idcat, status FROM ".$cfg["tab"]["cat_art"]." WHERE idart = '$srcidart'";
$db->query($sql);
while ($db->next_record())
{
$nextid = $db2->nextid($cfg["tab"]["cat_art"]);
// these are the insert values
$aFields = Array("idcatart" => $nextid,
"idcat" => ($targetcat != 0) ? $targetcat : $db->f("idcat"),
"idart" => $dstidart,
"is_start" => 0,
"status" => ($db->f("status") != '') ? $db->f("status") : 0,
"createcode" => 1);
$sql = "INSERT INTO ".$cfg["tab"]["cat_art"]." (".implode(", ", array_keys($aFields)).") VALUES (".implode(", ", array_values($aFields)).");";
$db2->query($sql);
if ($targetcat != 0) { // if true exit while routine, only one category entry is needed
break;
}
}
falls eine target idcat angeben wurde wird nur eine zuordnung vorgenommen, auch wenn der artikel mehrfach zugeordnet wäre...
status wird nun auch mit berücksichtigt....(obwohl es eh nicht verwendet wird....)
*** make your own tools (wishlist :: thx)