Seite 1 von 2

[gelöst] Zuordnung zu Kategorien ändern

Verfasst: Fr 23. Feb 2007, 10:49
von mko
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

Verfasst: Fr 23. Feb 2007, 11:03
von tinof
Hi,

was meint ihr mit "löschen und neu setzen" ?

Man kann doch in den Artikeleigenschaften die gewünschte Kategorie auswählen, dann verschiebt C. den Artikel dorthin.

Grüße
Tino

Verfasst: Fr 23. Feb 2007, 11:38
von mko
Ja - so ist es, wenn ich einen Artikel neu erstelle, abspeichere, wieder öffne und die Kategorie ändere. ABER wenn ich einen bestehenden Artikel mittels Contenido kopiere und danach versuche die Kategoriezuordnung (ist in 2 Kategorien zugeordnet) zu ändern, dann klappt es nicht.

Verfasst: Fr 23. Feb 2007, 15:06
von HerrB
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

Verfasst: Fr 23. Feb 2007, 18:28
von mko
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.

Verfasst: Fr 2. Mär 2007, 01:13
von HerrB
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:

Code: Alles auswählen

if ($action == "con_duplicate")
{
	$newidartlang = conCopyArticle($duplicate, $idcat);
}
d.h.

Code: Alles auswählen

if ($action == "con_duplicate")
{
	$newidartlang = conCopyArticle($duplicate);
}
Aber so richtig richtig wäre vermutlich eher die Änderung in contenido/includes/functions.con.php, Funktion conCopyArticle:
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); 
		
	}
bei Angabe einer idcat nur einmal eine Zuweisung erstellen:

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); 
		}
	}
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

Verfasst: Fr 2. Mär 2007, 14:01
von mko
Vielen Dank HerrB!
Werde das ganze einmal am Montag testen und dann meine Erfahrungen posten.

Verfasst: Fr 2. Mär 2007, 14:32
von emergence
HerrB hat geschrieben:Meinungen?
hmm... ja schöner bug...

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...

Verfasst: Fr 2. Mär 2007, 16:48
von HerrB
der code hat ja noch einen bug... das feld status wird immer 0 sein...
Stimmt. status im SQL-Statement ergänzen (Memo... :wink: ).
mehrfach zugeordnete artikel würden in jeder kategorie zugeordnet werden...
Na ja, das erste SQL-Statement ermittelt ja die idcat, denen der Artikel zugeordnet ist - nur diesen wird dann auch der duplizierte Artikel zugeordnet.

Werde es noch ein wenig putzen...

Gruß
HerrB

Verfasst: Sa 3. Mär 2007, 08:25
von mko
Vom Ablauf her würde ich sagen, dass der kopierte Artikel der Kategorie zugeordnet ist, aus der er kopiert wurde. Die Mehrfachzuordnung sollte man dann im Anschluss wieder manuell machen können.
Da ja in jeder Sprache nicht immer aller Kategorien Verwendung finden.

Verfasst: Sa 3. Mär 2007, 12:27
von emergence
ich hab das jetzt etwas umgebaut...

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;
		}
	}
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....)

Verfasst: Mo 5. Mär 2007, 09:55
von mko
Hat geklappt - vielen Dank an alle Beteiligten...

Verfasst: Di 27. Mär 2007, 06:30
von Martin S.
sehe ich das jetzt richtig, dass ich mit dem Lösungsweg in der aktuellen Contenido Version wieder die Mehrfachzuweisung aktivieren könnte, genau das bräuchte ich nämlich.

Verfasst: Di 27. Mär 2007, 09:33
von emergence
nein, falsch...

Verfasst: Di 27. Mär 2007, 11:03
von Martin S.
Also ist die Erwieterung nur ein bugfix wenn man in einer alten Version (4.4.4 ) die Mehrfachzuweisung verwendet hat und nach einem Update die Zuweisungen wieder löschen will?