conMakeStart bei start_compatible = true fehlerhaft

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

conMakeStart bei start_compatible = true fehlerhaft

Beitrag von HerrB »

Der Fehler muss seit dem Urschleim im System gewesen sein. Nun ja.

functions.con.php

Wenn start_compatible = true ist, räumt die Zeile

Code: Alles auswählen

		$sql = "UPDATE ".$cfg["tab"]["cat_art"]." SET is_start = 0 WHERE idcat = $tmp_idcat";
alle Startartikel in allen Sprachen ab (wenn die Kategorie durch Synchronisation erzeugt wurde).

Alt:

Code: Alles auswählen

function conMakeStart($idcatart, $is_start)
{
    global $db, $cfg, $lang;

	if ($cfg["is_start_compatible"] == true)
	{
    	$sql = "SELECT idcat, is_start FROM ".$cfg["tab"]["cat_art"]." WHERE idcatart = '$idcatart'";

    	$db->query($sql);
    	$db->next_record();

    	$tmp_idcat = $db->f("idcat");
    
    	$set = $is_start;
    
		$sql = "UPDATE ".$cfg["tab"]["cat_art"]." SET is_start = 0 WHERE idcat = $tmp_idcat";
    	$db->query($sql);

    	$sql = "UPDATE ".$cfg["tab"]["cat_art"]." SET is_start='$set' WHERE idcatart = '$idcatart'";
    	$db->query($sql);
    
        if ( $set == 1 )
...
Neu:

Code: Alles auswählen

function conMakeStart($idcatart, $is_start)
{
    global $db, $cfg, $lang;

	if ($cfg["is_start_compatible"] == true)
	{
    	$sql = "SELECT idcat FROM ".$cfg["tab"]["cat_art"]." WHERE idcatart = '$idcatart'";

    	$db->query($sql);
    	$db->next_record();

    	$tmp_idcat = $db->f("idcat");
    	
    	$sql = "SELECT tblCatArt.idcatart ".
    		   "FROM ".$cfg["tab"]["cat_art"]." tblCatArt, ". $cfg["tab"]["art_lang"]." tblArtLang ".
    		   "WHERE tblCatArt.idart = tblArtLang.idart AND tblCatArt.is_start = '1' AND ".
    		   "tblArtLang.idlang = '$lang' AND tblCatArt.idcat = '$tmp_idcat'";
    	$db->query($sql);
    	
    	$aIDs = array();
    	while ($db->next_record())
    	{
			$aIDs[] = $db->f("idcatart");
    	}
		
		if (count($aIDs) > 0)
		{
			$sql = "UPDATE ".$cfg["tab"]["cat_art"]." SET is_start = 0 WHERE idcatart IN ('" . implode("','", $aIDs) . "')";
    		$db->query($sql);
		}	
    
    	$set = $is_start;
    
    	$sql = "UPDATE ".$cfg["tab"]["cat_art"]." SET is_start='$set' WHERE idcatart = '$idcatart'";
    	$db->query($sql);
    
        if ( $set == 1 )
...
Ungetestet.

Mit der Änderung werden ggf. nur Startartikel in der Kategorie in der aktuellen Sprache abgeräumt.

Über Feedback und Verbesserungsvorschläge würde ich mich freuen, da ich mit den Abfragen nicht so glücklich bin (erst wird die idcat ermittelt, dann alle idcatarts der Kategorie in der Sprache, die Startartikel sind [der Ausgangscode geht auch davon aus, dass es mehrere sein können...]), dann werden diese gelöscht und nur der eine Artikel als Startartikel gesetzt.

Gruß
HerrB
Zuletzt geändert von HerrB am Do 9. Aug 2007, 18:04, insgesamt 1-mal geändert.
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
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

die bestehende funktion deckt sich nicht mit dem hier
-> http://contenido.org/forum/viewtopic.php?p=89763#89763

Code: Alles auswählen

    	$set = $is_start;

...
    
        if ( $set == 1 )
        {
       		// deactivate timemanagement if article is a start-article   		
       		$sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcatart = $idcatart";
       		
       		$db->query($sql);
       		$db->next_record();
       		
       		$idart = $db->f("idart");
       		
       		$sql = "UPDATE ".$cfg["tab"]["art_lang"]." SET timemgmt = 0 WHERE idart = $idart AND idlang = $lang";
       		$db->query($sql); 
        }
kann eigentlich raus... (code ist 2 mal vorhanden)

zu bugfix selbst..., die überlegung deinerseits könnte korrekt sein...
das sql zum selektieren aller idcatart's ist es sicher nicht...

Code: Alles auswählen

WHERE tblCatArt.idart = tblArtLang.idart AND  AND
die ganze sache ist die mühe nicht wert...

der startartikel in der anderen sprache bleibt nur dann wirklich einer, wenn er nur in dieser einer sprache vorkommt...

is_start_compatible == true

sollte nicht mehr verwendet werden...
*** make your own tools (wishlist :: thx)
Gesperrt