PHP->Arrays
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abrufen
array
aufgefallen
ausgabe
aussehen
bauen
code
entsprechen
http
kontakt
ordern
packen
position
problem
punkt
schleife
sektion
string
vorhaben
vorschau
-
Hallo,
Ich hab grad ein problem, uns zwar:
Ich bin dabei in menu zusammen zu bauen mit templates.
Ich benütze Smarty und will diese menus mit einer foreach-schleife aufbauen.
Hier ein beispiel:
php:
$content->assign(\'menu\', array(array(\'Main-Menu\' => array(\"http://www.google.de\" => \"Google.de\", \"http://www.google.com\" => \"Google.com\") )));
template:
{foreach name=menu item=kontakt from=$menu} {foreach key=menutitle item=value from=$kontakt} <center><u>{$menutitle}</u></center> {foreach key=link item=title from=$value} <center><a href=\"{$link}\">{$title}</a></center> {/foreach} {/foreach} {/foreach}
Würd dann so aussehen:
Main-Menu
Google.de
Google.com
(mit hyperlinks dann)
Aber das problem ist, die menu-sektionen und menu-punkte, sind in mysql gespeichert.
Also muss ich jede Sektionn mit ihren unterlinks herauslesen und dann in einne correcten array packen.
Doch genau da ist das problem, soweit bin ich bis jetzt:
function GetMenu($sql){ $result = $sql->query(\"SELECT * FROM site_menu ORDER BY position ASC\"); if(mysql_num_rows($result) > 0) { while($row = mysql_fetch_assoc($result)){ $id = $row[\'id\']; $title = $row[\'title\']; $menuresult = $sql->query(\"SELECT * FROM site_menuitems WHERE menuid= $id ORDER BY position ASC\"); if(mysql_num_rows($menuresult) > 0) { while($menurow = mysql_fetch_assoc($menuresult)){ $temp[] = array($menurow[\'link\'] => $menurow[\'title\']); } } $menu[] = array($title => $temp); } } return $menu; }
Ausgabe is aber:
Main-Menu
Array
Array
Was ist falsch?
Beitrag geändert: 21.7.2008 21:41:03 von crackcheck -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Also auf den ersten Blick, ist die Ausgabe einfach noch ein Array!
Um herauszufinden wie das Array aussieht, würde ich bei den einzelnen Menüpunkten mal eine Ausgabe mit var_dump($variable) machen. Dann bekommst du den Inhalt angezeigt. Danach kannst du dann den Array-Key noch anhängen und der Array-Wert müsste ausgegeben werden.
Also im Template:
<center><a href=\"{$link}\"><? var_dump({$title}) ?></a></center>
müsste reichen.
Werde mir die Arrays nochmal anschauen.
Dein Menü-Array sieht übrigens so aus:
$menu = array(\'title\' => array( \'link\' => \'title\') )
Ich nehme mal an das zweite sollte wohl kein Array werden, sondern so aussehen, oder?
$menu = array(\'title\' => \'link\')
Grüßle
Beitrag geändert: 22.7.2008 11:14:44 von scout -
Ich finde Smarty alles andere als \"smart\" und daher stehe ich auch mit dessen kruder Syntax auf Kriegsfuß. Daher nehme ich mal an, dass die Arrays mit dem Namen $temp, welche du mit GetMenu() erstellst, irgendwie in deinem Template dem Array $value[1] zugewiesen werden.
Man darf an Hand der Ausgabe vermuten, dass deine Funktion GetMenu() $temp als ein Array of Arrays gebaut hat, statt eines Array of Strings. Ich würde an deiner Stelle mal probieren in Zeile 10, statt
\"$temp[] = array($menurow[\'link\'] => $menurow[\'title\']);\"
besser
\"$temp[$menurow[\'link\']] = $menurow[\'title\'];\"
zu schreiben.
Im Template wird dann \"$menurow[\'link\']\" zum KEY und \"$menurow[\'title\']\" zum ITEM. Das dürfte eher deinem Vorhaben entsprechen.
--
[1] Dem zu durchlaufendem Array in einer foreach-Schleife den Namen $value zu geben, ist übrigens missverständlich. $value oder $val ist da üblicherweise der Wert (== Value in PHP == item in Smarty(?)) eines ausgelesenen Elements.
*nachschieb*
Hoppala, da hab ich wohl zu lange in der Vorschau-Schleife rumeditiert.
Natürlich ist auch das eine Möglichkeit: Statt der Benutzerfunktion das Template zu ändern.
Beitrag geändert: 22.7.2008 11:44:14 von alopex -
Okay danke euch beiden.
Ich habs dann gestern doch noch gelöst bekommen.
Doch mir ist dann aufgefallen das diese lösung komplette blöd ist.
Ich kann einfach den array normal mitschicken und so abrufen z.B. {$array.title}
Also der punkt ist wie [\'\'] also $array[\'title\'].
Hab dann alles so gemacht, und muss sagen das es jetzt super funktioniert.
Danke trotzdem :) -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage