Kategorien mit allen Inhalten leeren

Gesperrt
chris8408
Beiträge: 87
Registriert: So 2. Apr 2006, 19:07
Wohnort: Korschenbroich
Kontaktdaten:

Kategorien mit allen Inhalten leeren

Beitrag von chris8408 » Fr 2. Jan 2009, 18:49

Hallo,

ich Stand mal wieder vor dem Problem, dass eine Kategorie mit allen Inhalten in meinem System entfernt werden musste.

Da ich über die Suche nur Code-Schnipsel fand und ich bislang die Umsetzung in Contenido noch nicht gefunden habe - korrigiert mich bitte, wenn ich hier Unsinn erzähle - habe ich das Fragment aus

http://forum.contenido.org/viewtopic.php?t=7963

ein wenig erweitert.

Code: Alles auswählen

$box = ' <select name="whichidcatdelete"><option value="-1">-- kein --</option>';

                $sql = "SELECT
                            A.idcat,
                            C.name,
                            A.level
                        FROM
                            ".$cfg["tab"]["cat_tree"]." AS A,
                            ".$cfg["tab"]["cat"]." AS B,
                            ".$cfg["tab"]["cat_lang"]." AS C
                        WHERE
                            A.idcat     = B.idcat AND
                            B.idcat     = C.idcat AND
                            C.idlang    = '".$lang."' AND
                            B.idclient  = '".$client."' 
                        ORDER BY
                            A.idtree";

                $db->query($sql);

                $cat_array = array();
		$cat_status = false;
		$cat_level = -1;

                while ( $db->next_record() ) {
                   $sep = "";
                   for($i = 0; $i< $db->f("level"); $i++ )
                     $sep .= "---";
                   $box .= '\n\t<option value="'.$db->f("idcat").'">'.$sep." ".$db->f("name").'</option>';
				   
		   // wenn zu loeschende kategorie
		   if( isset( $_POST['whichidcatdelete'] ) && $_POST['whichidcatdelete']==$db->f("idcat"))
		   {
  		     $cat_status = true;
		     $cat_level = $db->f("level");
		     $cat_array[] = $db->f("idcat");  
		   }
		   elseif($cat_status == true && $db->f("level") > $cat_level)
		   {
		     $cat_array[] = $db->f("idcat");  
		   }
		   else
		   {
		     $cat_status = false;
		   }
				   
                }

echo $box ."            </select><input type='submit'><br>";


/*############################################################################*/

if( isset( $_POST['whichidcatdelete'] ) && $_POST['whichidcatdelete']!=-1)
{

  echo "Kategorie ".$_POST['whichidcatdelete']." wird gel&ouml;scht.<br><br>";

  $a = 0;
  foreach($cat_array as $id)
  {
  $sql = "SELECT 
            a.idart AS idart 
         FROM 
            ".$cfg["tab"]["art_lang"]." AS a, 
            ".$cfg["tab"]["art"]." AS b, 
            ".$cfg["tab"]["cat_art"]." AS c 
         WHERE 
            a.idlang   = '".$lang."' AND 
            a.idart    = b.idart AND 
            b.idclient   = '".$client."' AND 
            b.idart    = c.idart AND 
            c.idcat    = '".$id."'"; 

  $db2 = new Db_Contenido(); 

  $db2->query($sql); 

  while ( $db2->next_record() ) { 
      conDeleteart($db2->f("idart")); 
      //echo $db2->f("idart")."<br>"; 
      $a++; 
    } 
  strDeleteCategory($id);
  }
echo "$a Artikel gelöscht..."; 
}
Das ganze soll die ausgewählte Kategorie komplett leer machen. Also Vorsicht: Alle Artikel + Unterkategorien!!!

Vielleicht hilft es jemanden.

Wenn noch jemand Verbesserung oder Fixes hat, immer her damit.

Gruß,

Christian

MichFress
Beiträge: 750
Registriert: Mo 5. Jan 2004, 22:32
Wohnort: Bochum
Kontaktdaten:

Beitrag von MichFress » Di 6. Jan 2009, 11:52

Scheint mir auf den ersten Blick zu funktionieren, allerdings weiß ich gerade nicht aus dem Stegreif, wie das bei etwaiger Mehrsprachigkeit abläuft...
Schau dir mal die Klasse ArticleCollection (faq.contenido.org) an, trenne die PHP-Logik vom HTML, mache eine Funktion draus, überprüfe $_POST['whichidcatdelete'] besser nochmal mit is_integer() oder ähnlichem, um SQL-Injections auszuschließen...

Im nächsten Schritt könnte man das an geeigneter Stelle in Contenido integrieren - vielleicht gibt's ja eine sogar Chain, mit der man eine solche Funktionalität in den Kategorien-Bereich einbinden kann. So mit "Sind Sie sicher?"-Nachfrage, Vorschau der zu löschenden Unterkategorien und Artikel und so...

In der Tat habe ich diese Funktion auch schon hin und wieder vermisst.
"Es wird keine Handlung geben, keine Geschichte mit ihrer Versprechung auf einen Anfang und ihrer Hoffnung auf ein Ende." (Andrzej Stasiuk)

chris8408
Beiträge: 87
Registriert: So 2. Apr 2006, 19:07
Wohnort: Korschenbroich
Kontaktdaten:

Beitrag von chris8408 » Di 6. Jan 2009, 14:29

Danke für die Tips; vielleicht trenne ich hier wirklich mal HTML und Code, wenn ich Zeit habe. Ist wie gesagt auch nur eine Quick and Dirty-Lösung.

Gruß,

CJ

Gesperrt