Fehler mit Zeitsteuerung

Gesperrt
PickPay
Beiträge: 164
Registriert: Di 2. Dez 2003, 19:38
Wohnort: Zürich
Kontaktdaten:

Fehler mit Zeitsteuerung

Beitrag von PickPay »

Guten Tag

Mir ist folgendes im Zusammenhang mit der Zeitsteuerung aufgefallen:

1. Ich habe einen Artikel, welcher in zwei Kategorien, kat1 und kat2, publiziert ist.

2. Ich schalte die Zeitsteuerung ein, dass nach einem bestimmten Zeitpunkt der Artikel nach kat1 verschoben und online gesetzt wird.

3. Wenn die Zeitfrist abgelaufen ist, habe ich in kat1 zwei identische Artikel mit der gleichen idart, obwohl es ja nun wieder nur einer sein sollte.

Hintergrund:
Ich habe eine Kategorie, welche alle News-Artikel enthält. Diese werden auf der Startseite aufgelistet. Durch die Möglichkeit, Artikel in mehrere Kategorien zu publizieren kann der Benutzer einfach zusätzlich die Kategorie News anwählung und schon erscheint auf der Startseite ein Vorschau des Artikels. Gewisse Artikel sollen aber nur eine bestimmte Zeit auf der Startseite erscheinen und so habe ich an die Zeitsteuerung gerdacht, welche aber eben obengenannte Fehler hervorruft.

Mein System:
Ich verwende Contenido 4.4.2, PHP, Apache (nicht den 2er) und MySQL der neueren Generation, eine FreeBSD als Betriebssystem.

Ergänzungen:
In der Tabelle 'cat_art' werden zwei Einträge mit gleicher 'idcat' und 'idart' erstellt, wohl aber mit unterschiedlicher 'idcatart' was unsinnig ist und verhindert werden sollte.
PickPay
Beiträge: 164
Registriert: Di 2. Dez 2003, 19:38
Wohnort: Zürich
Kontaktdaten:

Beitrag von PickPay »

Ich habe jetzt für mal vorübergehend ein Modul entwickelt, welches einfach die Überflüssigen Einträge löscht:

Code: Alles auswählen

<?PHP

 $sql = 'SELECT idcatart,idcat,idart FROM '.$cfg["tab"]["cat_art"].' ORDER BY idcat ASC;';

 $db->query($sql);
 
 $cat_fehler=array();
 $old=array();
 $new=array();
 while ($db->next_record()) {
  $old=$new;
  $new['idcatart'] =$db->f('idcatart');
  $new['idcat']    =$db->f('idcat');
  $new['idart']    =$db->f('idart');
  if ($old['idcat']==$new['idcat'] && $old['idart']==$new['idart']) {
   //$cat_fehler[$new['idcatart']]=array('idcat'=>$new['idcat'], 'idart'=>$new['idart']);
   $i=$new['idcat'];
   $cat_fehler[$i]['idart']=$new['idart'];
   $cat_fehler[$i]['idcatart']=$new['idcatart'];
  }
 }
 
 foreach ($cat_fehler as $key=>$value) {
  $sql='SELECT idcatart FROM '.$cfg["tab"]["cat_art"].' WHERE
        idcat='.$key.' AND 
        idart='.$value['idart'].' AND 
        idcatart!='.$value['idcatart'].'
       ;';
  $db->query($sql);
  $delete_sql='DELETE FROM '.$cfg["tab"]["cat_art"].' WHERE '; 
  while ($db->next_record()) {
   $delete_sql.=' idcatart='.$db->f('idcatart').' OR';
  }
  $delete_sql=substr($delete_sql,0,strlen($delete_sql)-3).' ;';
  $db->query($delete_sql);
 }

?>
Dieses Stück Code kann man etwa an ein Titelmodul anhängen, so dass es halt jedes mal aufgerufen wird.
timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo »

In der 4.5er-Serie wurde die Mehrfachzuordnung deaktiviert, da es zuviele Probleme damit gibt - damit sollte dieser Bug auch invalid werden ;)
Gesperrt