Kipperlenny
Erfahrenes Mitglied
Moin Moin
Ich mal wieder mit einem absurden Problem an dem ich seit Tagen hänge...
Ich habe in der Datenbank (MySQL) die Seiten meiner HP gespeichert, diese möchte ich als Liste (<ul>) ausgeben. Bisher ganz einfach...
Nun können die Seiten allerdings Unterseiten einer anderen Seite sein, und die Unterseiten wiederum Unterseiten haben - ich weiß nicht wieviele Unterseiten und wieviele Ebenen es gibt.
Zuerst habe ich bei jeder Seite zugeschrieben unter welcher Seite sie steht und welches Level sie hat.
Dann allerdings erschien es mir einfacher eine neue Tabelle anzulegen die (mit einigen Beispielseiten) folgendermaßen aussieht:
| mid | sid |
1 | 2
2 | 8
3 | 7
3.1 | 1
3.1.1 | 2
3.1.2 | 2
3.2 | 1
4 | 7
mid zeigt dabei die Menustruktur an.
Dies kann ich dann in einem schönen Array speichern wo auch gleich die sid (ID der Seite) und der Text für den Link drin steht. Nun versuche ich das ganze in einer UL auszugeben, wobei jede Seite wieder eine <ul> enthält, in der falls Unterseiten vorhanden, diese drin stehen.
Folgendermaßen sieht es momentan aus:
http://vorlage.heerschaft.de/
Und vereinfach dargestellt sollte es so RICHTIG aussehen:
Nun ja, ich bekomme es nicht hin, so sieht momentan der Smarty Template Teil aus um das oben auszugeben:
Völliger Schwachsinn also....
Einfach Fragestellung:
Wie gebe ich einen Mehrdimensionalen Array in einer Liste aus, schön mit Unterebenen und so?
Und den restlichen Teil den ich jetzt Poste können die Uninteressierten Leute ungelesen lassen, sind einfach meiner verschiedenen Lösungsansätze die ich wieder verworfen habe (um einen Array zusammenzubauen, mit unterschiedlichen Tabellenlayouts etc., den man hinterher schön ausgeben kann)
Hoffe mal mir wird geholfen...
lenny
Ich mal wieder mit einem absurden Problem an dem ich seit Tagen hänge...
Ich habe in der Datenbank (MySQL) die Seiten meiner HP gespeichert, diese möchte ich als Liste (<ul>) ausgeben. Bisher ganz einfach...
Nun können die Seiten allerdings Unterseiten einer anderen Seite sein, und die Unterseiten wiederum Unterseiten haben - ich weiß nicht wieviele Unterseiten und wieviele Ebenen es gibt.
Zuerst habe ich bei jeder Seite zugeschrieben unter welcher Seite sie steht und welches Level sie hat.
Dann allerdings erschien es mir einfacher eine neue Tabelle anzulegen die (mit einigen Beispielseiten) folgendermaßen aussieht:
| mid | sid |
1 | 2
2 | 8
3 | 7
3.1 | 1
3.1.1 | 2
3.1.2 | 2
3.2 | 1
4 | 7
mid zeigt dabei die Menustruktur an.
Dies kann ich dann in einem schönen Array speichern wo auch gleich die sid (ID der Seite) und der Text für den Link drin steht. Nun versuche ich das ganze in einer UL auszugeben, wobei jede Seite wieder eine <ul> enthält, in der falls Unterseiten vorhanden, diese drin stehen.
Folgendermaßen sieht es momentan aus:
http://vorlage.heerschaft.de/
HTML:
<ul id="list_to_sort">
<li id="1"><a href="index.php?sid=2">Login</a><ul></ul></li>
<li id="2"><a href="index.php?sid=8">unterindex1</a><ul></ul></li>
<li id="3"><a href="index.php?sid=7">unterindex</a>
<ul>
<li id="3.1"><a href="index.php?sid=1">Index Link</a>
<ul>
<li id="3.1.1"><a href="index.php?sid=2">Login</a>
<ul></ul>
</li>
</ul>
</li>
<li id="3.1.2"><a href="index.php?sid=2">Login</a><ul></ul></li>
</ul>
</li>
<li id="3.2"><a href="index.php?sid=1">Index Link</a><ul></ul></li>
<li id="4"><a href="index.php?sid=7">unterindex</a><ul></ul></li>
</ul>
Und vereinfach dargestellt sollte es so RICHTIG aussehen:
HTML:
<ul>
<li>text</li><ul></ul></li>
<li>text
<ul>
<li>text</li><ul></ul>
</li>
</ul>
Nun ja, ich bekomme es nicht hin, so sieht momentan der Smarty Template Teil aus um das oben auszugeben:
PHP:
<ul id="list_to_sort">
{ foreach key=keye value=valuee from=$end }
{ foreach key=keyv value=valuev from=$valuee }
{ if $keye|count_dots eq 0 && $keye != 1}
</ul></li><li id="{ $keye }"><a href="index.php?sid={ $keyv }">{ $valuev }</a><ul>
{ elseif $keye|count_dots eq 0}
<li id="{ $keye }"><a href="index.php?sid={ $keyv }">{ $valuev }</a><ul>
{ elseif $keye|count_dots eq 1 }
<li id="{ $keye }"><a href="index.php?sid={ $keyv }">{ $valuev }</a><ul>
{ elseif $keye|count_dots eq 2 }
<li id="{ $keye }"><a href="index.php?sid={ $keyv }">{ $valuev }</a><ul></ul></li></ul></li>
{ /if }
{ /foreach }
{ /foreach }
</ul></li></ul>
Völliger Schwachsinn also....
Einfach Fragestellung:
Wie gebe ich einen Mehrdimensionalen Array in einer Liste aus, schön mit Unterebenen und so?
Und den restlichen Teil den ich jetzt Poste können die Uninteressierten Leute ungelesen lassen, sind einfach meiner verschiedenen Lösungsansätze die ich wieder verworfen habe (um einen Array zusammenzubauen, mit unterschiedlichen Tabellenlayouts etc., den man hinterher schön ausgeben kann)
PHP:
function menu(&$db,&$tpl,$rights,$sid="") {
$menu = "";
$sql = "SELECT sid, link, under, level
FROM seiten WHERE ";
if($sid != "") $sql .= "sid NOT IN (".$sid.") AND ";
$sql .= "rights IN (".$rights.")
ORDER BY under ASC,level DESC";
$result = $db->query($sql);
while($inhalt = $db->fetch_array($result)) {
$menu[$inhalt['sid']]['level'] = $inhalt['level'];
$menu[$inhalt['sid']]['link'] = $inhalt['link'];
}
print_r($menu);
die;
$tpl->assign("menu",$menu);
}
function menu(&$db,&$tpl,$rights,$sid="") {
$sql = "SELECT sid,link FROM seiten"; // WHERE rights IN (".$rights.")";
$result = $db->query($sql);
while($links = $db->fetch_array($result)) {
$link[$links['sid']] = $links['link'];
}
$sql = "SELECT *
FROM menu ORDER BY mid ASC,lvl DESC";
$result = $db->query($sql);
while($inhalt = $db->fetch_array($result)) {
$menu[$inhalt['sid']]['lvl'] = $inhalt['lvl'];
$menu[$inhalt['sid']]['link'] = $link[$inhalt['sid']];
}
$tpl->assign("menu",$menu);
}
function menu(&$db,&$tpl,$rights,$sid="") {
$sql = "SELECT sid,link FROM seiten"; // WHERE rights IN (".$rights.")";
$result = $db->query($sql);
while($links = $db->fetch_array($result)) {
$link[$links['sid']] = $links['link'];
}
$sql = "SELECT *
FROM menu ORDER BY mid ASC";
$result = $db->query($sql);
$i = 1;
$j = 1;
while($inhalt = $db->fetch_array($result)) {
$menu = array();
$menu[$inhalt['sid']] = $link[$inhalt['sid']];
/*if($inhalt['lvl'] > 0) {
$end[$i][$inhalt['sid']]['lvl'] = $inhalt['lvl'];
$end[$i][$inhalt['sid']]['link'] = $link[$inhalt['sid']];
} else*/
$end[$inhalt['mid']] = $menu;
}
$tpl->assign("end",$end);
}
Hoffe mal mir wird geholfen...
lenny
Zuletzt bearbeitet: