Seite 1 von 1

Kategorien mit allen Inhalten leeren

Verfasst: Fr 2. Jan 2009, 18:49
von chris8408
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

Verfasst: Di 6. Jan 2009, 11:52
von MichFress
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.

Verfasst: Di 6. Jan 2009, 14:29
von chris8408
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