Problem beim auslesen der Haupt- und Subkategorien

alex130

Erfahrenes Mitglied
Hi
Ich programmiere gerade ein Auktionsscript, ich verwende als Template Klasse "Smarty" und als DB Klasse "ezSql", da ich diese sehr gut finde und die DB Klasse auch sehr gut mit Smarty zusammen arbeitet...
Nun zu meinen Problem:

ich hab eine Tabelle für meine Kategorien, diese sind so aufgebaut:
- cat_id
- cat_name
- main_cat_id (wenn hier 0 steht dann ist es eine hauptkategorie und wenn eine zahl drinen steht, dann ist es eine subkategorie und die zahl is die cat_id der Hauptkategorie)

Und das will will ich richtig auslesen, dass da z.B. steht:
Hauptkategorie 1
- Subkategorie
Hauptkategorie 2
- Subkategorie
.
.

Kann mir bitte jemand helfen?
Danke
 
PHP:
<pre>
<?php
$array = array(
			array(	'id' => 1,
					'name' => 'Haupt1',
					'sub' => 0),
			array(	'id' => 2,
					'name' => 'Haupt2',
					'sub' => 0),
			array(	'id' => 3,
					'name' => 'Haupt3',
					'sub' => 0),
			array(	'id' => 4,
					'name' => 'Sub1-1',
					'sub' => 1),
			array(	'id' => 5,
					'name' => 'Sub1-2',
					'sub' => 1),
			array(	'id' => 6,
					'name' => 'Sub3-1',
					'sub' => 3)
			);

$menu = array();
foreach($array as $key => $val)
{
	if($val['sub'] == 0)
	{
		$menu[$val['id']][] = $val;
	}
	else
	{
		$menu[$val['sub']][] = $val;
	}
}
foreach($menu as $key => $val)
{
	echo $val[0]['name'].'<br>';
	if( count($val) > 1 )
	{
		for($i = 1; $i < count( $val ); $i++)
		{
			echo '- '.$val[$i]['name'].'<br>';
		}
	}
}
?>

Sollte so eigentlich funktionieren... Kann man vielleicht sogar noch verschönern, aber es soll dir erstmal als Input dienen.
 
Danke für deine Antwort, dass ist genau das, was ich gesucht hab :)
Allerdings hab ich ein Problem, ich kanns nicht an meine DB anpassen, egal wie ich es versuche ich brings nicht zusammen...
Kannst du mir das vll. erklären? Muss kein Code sein.
Danke
 
Also mit Smarty lese ich die Kategorien so aus:
PHP:
$tpl->assign("cat", $db->get_results('SELECT * FROM categories'));
//template
Code:
{foreach from=$cat item="cat"}
....
{/foreach}
 
Gut, dann fangen wir da an zu ändern.

PHP:
$array = $db->get_results('SELECT * FROM categories');

$menu = array();
foreach($array as $key => $val)
{
    if($val['sub'] == 0)
    {
        $menu[$val['id']][] = $val;
    }
    else
    {
        $menu[$val['sub']][] = $val;
    }
} 

$tpl->assign('cat', $menu);

Jetzt müsstest du nur noch den letzten Teil meines Skriptes in Smarty umsetzen.
 
So hab ich es vorher schon versucht, allerdings kommt dann:
Code:
Fatal error: Cannot use object of type stdClass as array
 
Mach doch mal bitte folgendes:

PHP:
var_dump($db->get_results('SELECT * FROM categories'));

Und poste was dabei rauskommt.
 
PHP:
array(4) { [0]=>  object(stdClass)#13 (3) { ["cat_id"]=>  string(1) "1" ["cat_name"]=>  string(16) "Hauptkategorie 1" ["main_cat_id"]=>  string(1) "0" } [1]=>  object(stdClass)#14 (3) { ["cat_id"]=>  string(1) "2" ["cat_name"]=>  string(5) "Sub 1" ["main_cat_id"]=>  string(1) "1" } [2]=>  object(stdClass)#15 (3) { ["cat_id"]=>  string(1) "3" ["cat_name"]=>  string(16) "Hauptkategorie 2" ["main_cat_id"]=>  string(1) "0" } [3]=>  object(stdClass)#16 (3) { ["cat_id"]=>  string(1) "4" ["cat_name"]=>  string(6) "Sub 2 " ["main_cat_id"]=>  string(1) "3" } }
 
Dann solltest du dich mit deiner Datenbankklasse solange rumärgern, bis du ein Array zurückbekommst ;)

Ich finde die DB Klasse ehrlich gesagt etwas unnötig und auch nicht gerade schön...
Was reizt dich so an ihr, wenn ich fragen darf?
Warum nicht MySQLi?

Oder wenn du es universell haben möchtest PDO?
 
Zurück