[gelöst] Zuordnung zu Kategorien ändern

mko
Beiträge: 123
Registriert: Di 1. Feb 2005, 10:26
Wohnort: Österreich
Kontaktdaten:

[gelöst] Zuordnung zu Kategorien ändern

Beitrag von mko » Fr 23. Feb 2007, 10:49

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
Zuletzt geändert von mko am Mo 5. Mär 2007, 09:55, insgesamt 1-mal geändert.

tinof
Beiträge: 197
Registriert: Mi 24. Jan 2007, 20:38
Wohnort: Kirchberg / Sa.
Kontaktdaten:

Beitrag von tinof » Fr 23. Feb 2007, 11:03

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

mko
Beiträge: 123
Registriert: Di 1. Feb 2005, 10:26
Wohnort: Österreich
Kontaktdaten:

Beitrag von mko » Fr 23. Feb 2007, 11:38

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.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 23. Feb 2007, 15:06

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

mko
Beiträge: 123
Registriert: Di 1. Feb 2005, 10:26
Wohnort: Österreich
Kontaktdaten:

Beitrag von mko » Fr 23. Feb 2007, 18:28

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.

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 2. Mär 2007, 01:13

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

mko
Beiträge: 123
Registriert: Di 1. Feb 2005, 10:26
Wohnort: Österreich
Kontaktdaten:

Beitrag von mko » Fr 2. Mär 2007, 14:01

Vielen Dank HerrB!
Werde das ganze einmal am Montag testen und dann meine Erfahrungen posten.

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Fr 2. Mär 2007, 14:32

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...
*** make your own tools (wishlist :: thx)

HerrB
Beiträge: 6935
Registriert: Do 22. Mai 2003, 12:44
Wohnort: Berlin
Kontaktdaten:

Beitrag von HerrB » Fr 2. Mär 2007, 16:48

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

mko
Beiträge: 123
Registriert: Di 1. Feb 2005, 10:26
Wohnort: Österreich
Kontaktdaten:

Beitrag von mko » Sa 3. Mär 2007, 08:25

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.

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Sa 3. Mär 2007, 12:27

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....)
*** make your own tools (wishlist :: thx)

mko
Beiträge: 123
Registriert: Di 1. Feb 2005, 10:26
Wohnort: Österreich
Kontaktdaten:

Beitrag von mko » Mo 5. Mär 2007, 09:55

Hat geklappt - vielen Dank an alle Beteiligten...

Martin S.
Beiträge: 183
Registriert: Fr 14. Jan 2005, 10:46
Kontaktdaten:

Beitrag von Martin S. » Di 27. Mär 2007, 06:30

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.

emergence
Beiträge: 10641
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Di 27. Mär 2007, 09:33

nein, falsch...
*** make your own tools (wishlist :: thx)

Martin S.
Beiträge: 183
Registriert: Fr 14. Jan 2005, 10:46
Kontaktdaten:

Beitrag von Martin S. » Di 27. Mär 2007, 11:03

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?

Gesperrt