kostenloser Webspace werbefrei: lima-city


Rekursion

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    o**s

    Ich habe folgendes Problem:

    Aus einer Tabelle werden Benutzergruppen ausgelesen. Manche Gruppen haben eine Elterngruppe, deren ID im Feld \"elternid\" gespeichert ist. Nun möchte ich eine Hierarchie der Gruppen darstellen: Gruppen einer Elterngruppe sollen nebeneinander dargestellt werden; Kind-Gruppen sollen stets unter dem Namen der Elterngruppe ausgegeben werden. Das habe ich versucht folgendermaßen zu lösen:
    <?php
    function hier_table($groups,$e_id=0)
    	{
    		foreach($groups as $gruppe) {
    			if ($gruppe[\'elterngruppe\']==$e_id && $gruppe[\'gruppeid\']<>\"10\")
    			{
    				$this->content->template[\'plugin\'][\'groupmanager\'][\'hier\'] .= \'<div style=\"border-style:solid;margin:3px;\">\'.$gruppe[\'gruppenname\'].\'\';
    				$this->hier_table($groups,$gruppe[\'gruppeid\']);
    				$this->content->template[\'plugin\'][\'groupmanager\'][\'hier\'] .= \'</div>\';
    			}
    		}
    	}
    ?>

    $groups ist ein verschachteltes Array, das Ergebnis einer Datenbankabfrage.
    Die Ausgabe erfolgt per Zuweisung der $this->content->template, welche in eine CMS eingebunden wird.
    Die Tabelle sieht folgendermaßen aus:
    DROP TABLE IF EXISTS `XXX_papoo_gruppe`; ##b_dump##
    CREATE TABLE `XXX_papoo_gruppe` (
      `gruppeid` int(11) NOT NULL auto_increment ,
      `gruppenname` varchar(255) NOT NULL ,
      `gruppenleiter` int(10) NOT NULL  DEFAULT \'0\' ,
      `elterngruppe` int(11) NOT NULL  DEFAULT \'1\' ,
      `offenfuergruppeid` varchar(255) NOT NULL  DEFAULT \'1\' ,
      `gruppen_beschreibung` text NOT NULL ,
      `allow_internet` int(11) NOT NULL  DEFAULT \'0\' ,
      `allow_intranet` int(11) NOT NULL  DEFAULT \'0\' ,
      `intranet` int(11) NOT NULL  DEFAULT \'0\' ,
      `admin_zugriff` int(11) NOT NULL  DEFAULT \'0\' ,
      `publish_user` int(11) NOT NULL  DEFAULT \'0\' ,
      KEY `gruppeid` (`gruppeid`) 
    ) TYPE=MyISAM ; ##b_dump##
    
    INSERT INTO `XXX_papoo_gruppe` SET gruppeid=\'10\', gruppenname=\'jeder\', gruppenleiter=\'0\', elterngruppe=\'0\', offenfuergruppeid=\'0\', gruppen_beschreibung=\'Jeder ist die Gruppe mit den wenigsten Rechten, Jeder ist z.B. ein Internet_user der die Homepage anschaut.\', allow_internet=\'0\', allow_intranet=\'0\', intranet=\'0\', admin_zugriff=\'0\', publish_user=\'0\'  ; ##b_dump##
    INSERT INTO `XXX_papoo_gruppe` SET gruppeid=\'1\', gruppenname=\'Administratoren\', gruppenleiter=\'10\', elterngruppe=\'0\', offenfuergruppeid=\'g1,\', gruppen_beschreibung=\'Die Administration betreibt und überwacht das System. Sie soll auch ausschließlich dafür benutzt werden. Die von dieser Gruppe erstellten Artikel beziehen sich demnach nur auf das System, nicht auf den Inhalt. Mitglieder dieser Gruppe, die redaktionell tätig sind haben noch ein zusätzliches Userkonto.\', allow_internet=\'1\', allow_intranet=\'1\', intranet=\'0\', admin_zugriff=\'1\', publish_user=\'0\'  ; ##b_dump##
    INSERT INTO `XXX_papoo_gruppe` SET gruppeid=\'12\', gruppenname=\'Redakteure\', gruppenleiter=\'12\', elterngruppe=\'11\', offenfuergruppeid=\'\', gruppen_beschreibung=\'Redakteure für bestimmte Seitenbereiche.\', allow_internet=\'0\', allow_intranet=\'0\', intranet=\'0\', admin_zugriff=\'0\', publish_user=\'12\'  ; ##b_dump##
    INSERT INTO `XXX_papoo_gruppe` SET gruppeid=\'11\', gruppenname=\'Chefredakteure\', gruppenleiter=\'12\', elterngruppe=\'1\', offenfuergruppeid=\'g1,g2,\', gruppen_beschreibung=\'Chefredaktion der Website mit dem Leiter der Website an der Spitze.\', allow_internet=\'1\', allow_intranet=\'0\', intranet=\'0\', admin_zugriff=\'0\', publish_user=\'12\'  ; ##b_dump##
    INSERT INTO `XXX_papoo_gruppe` SET gruppeid=\'13\', gruppenname=\'testgruppe 1\', gruppenleiter=\'12\', elterngruppe=\'12\', offenfuergruppeid=\'1\', gruppen_beschreibung=\'.\', allow_internet=\'0\', allow_intranet=\'0\', intranet=\'0\', admin_zugriff=\'0\', publish_user=\'10\'  ; ##b_dump##
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. m******s


    Ich habe folgendes Problem:


    Und zwar?

    Ich hab ziemlich genau das gleiche gemacht, wie du. Wenn du willst, kann ich das nacher mal ein wenig auf deinen Zweck umschreiben. Weiss aber nicht genau, wie das mit dem Template funktionieren soll...
    Aber das hierarschich darstellen sollte kein Problem sein.
  4. Autor dieses Themas

    o**s

    Das mit dem Template ist so ähnlich wie ein einfaches return. Bloß es wird alles einer Variablen angehängt, die dann im Template an der passenden Stelle ausgegeben wird.
    Wäre schön, wenn du das umschreiben könntest;)
  5. Autor dieses Themas

    o**s

    Ich habe jetzt die Lösung gefunden. Es handelte sich um einen kleinen Denkfehler. Das ganze habe ich nun mit Tabellen realisiert:
    <?php
    	function hier_list()
    	{
    		$groups = $this->read_groups(); //Gruppen aus Datenbank lesen
    		$e_id = 0;
    		
    		$this->content->template[\'plugin\'][\'groupmanager\'][\'hier\'] .= \'<table border=\"1\" style=\"text-align:center;vertical-align:top;width:100%;margin:3px;\"><tr>\';
    		foreach($groups as $gruppe) {
    			if ($gruppe[\'elterngruppe\']==$e_id && $gruppe[\'gruppeid\']<>\"10\")
    			{
    				$this->content->template[\'plugin\'][\'groupmanager\'][\'hier\'] .= \'<td>\'.$gruppe[\'gruppenname\']
    				.$this->hier_table($groups,$gruppe[\'gruppeid\']).\'</td>\';
    			}
    		}
    		$this->content->template[\'plugin\'][\'groupmanager\'][\'hier\'] .= \'</tr></table>\';
    	}
    	
    	// Rekursive Ausgabe-Funktion
    	function hier_table($groups,$e_id)
    	{
    		$untergruppen = false; $g_string = \'\';
    		foreach($groups as $gruppe) {
    			if ($gruppe[\'elterngruppe\']==$e_id && $gruppe[\'gruppeid\']<>\"10\")
    			{
    				$g_string .= \'<td>\'.$gruppe[\'gruppenname\']
    				.$this->hier_table($groups,$gruppe[\'gruppeid\']).\'</td>\';
    			$untergruppen = true;
    			}
    		}
    		if ($untergruppen)
    		return \'<table border=\"1\" style=\"text-align:center;vertical-align:top;width:100%;margin:3px;\"><tr>\'.$g_string.\'</tr></table>\';
    	}
    ?>


    So klappt das einwandfrei.
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!