magikern Skrevet 27. juni 2003 Del Skrevet 27. juni 2003 bruker scriptet under for å lage en dynamisk meny, men det er en liten ting jeg ikke får til helt som jeg vil: $headers = array( 'Header1' => 'submenu.php?s=1', 'Header2' => 'submenu.php?s=2', 'Header3' => 'submenu.php?s=3' ); $sub_1 = array( 'SubHeader1' => 'http://pear.php.net', 'SubHeader2' => 'http://www.zend.com', 'SubHeader3' => 'http://www.php.net' ); $sub_2 = array( 'SubHeader1' => 'http://www.perdue.net', 'Layer_example' => 'submenu.php?s=2&b=1', 'SubHeader3' => 'http://www.sourceforge.net' ); $sub_2_layer = array( 'SubSubHeader1' => 'http://www.zend.com/', 'SubSubHeader2' => 'http://www.php.net', 'SubSubHeader3' => 'http://smarty.php.net' ); $sub_3 = array( 'SubHeader1' => 'http://www.fastsearch.com', 'SubHeader2' =>'http://www.alltheweb.com', 'SubHeader3' => 'http://www.gravitonic.com' ); foreach ( $headers as $key => $value ) { echo "<a href='$value'>$key</a><br>"; if (($key == "Header1") && ($s == "1")) { foreach ( $sub_1 as $key => $value ) { echo "<ul><a href='$value'>$key</a></ul>"; } } if (($key == "Header2") && ($s == "2")) { foreach ( $sub_2 as $key => $value ) { echo "<ul><a href='$value'>$key</a></ul>"; if (($key == "Layer_example") && ($s == "2") && ($b == "1")) { foreach ( $sub_2_layer as $key => $value ) { echo "<ul><ul><a href='$value'>$key</a></ul></ul>"; if ($key == "SubSubHeader3") {$b = "2";} } } } } if (($key == "Header3") && ($s == "3")) { foreach ( $sub_3 as $key => $value ) { echo "<ul><a href='$value'>$key</a></ul>"; } } } når man trykker på en av toplinkene kommer jo underlinkene fram på menyen og det ser helt greit ut i en browser, men i koden blir det sånn: <ul> <li>toplink</li> <ul><li>underlinke</li></ul> </ul> men det jeg altså vil ha fram er <ul> <li>toplink <ul><li>underlinke</li></ul> </li> </ul> det jeg tenker men ikke får helt til er da, 1.Hvis en toplink er merket så skal den ikke avsluttes med </li> 2. hvis det er flere underlinker så skal alle være: <li>underlink</li> men den første skal starte med <ul><li> istedenfor bare<li> og den siste skal slutte med </li></ul> istedenfor bare </li> 3. når siste underlink er printet skal det føres på </li> for å avslutte toplinken. Lenke til kommentar
magikern Skrevet 29. juni 2003 Forfatter Del Skrevet 29. juni 2003 kom på at jeg kan fixe en del av problemene med count($sub_1)) for å definere forskjell på første siste og de i mellom av underlinkene, men er fortsatt en del ting som blir litt feil så deet hadde fortsatt vært fint med noen forslag fra andre. Lenke til kommentar
b-urn Skrevet 29. juni 2003 Del Skrevet 29. juni 2003 kom på at jeg kan fixe en del av problemene med count($sub_1)) for å definere forskjell på første siste og de i mellom av underlinkene, men er fortsatt en del ting som blir litt feil så deet hadde fortsatt vært fint med noen forslag fra andre. Forslag coming up... Det slo meg at det kanskje er enklere å håndtere en slik meny-struktur rekursivt. For å få til det må datastrukturene planlegges litt bedre. Hvis datastrukturene for menyer istf deklareres slik: $str_menuData = Array( 'header' => array( 'Header1' => Array('type'=>'submenu','value'=>'sub_1'), 'Header2' => Array('type'=>'submenu','value'=>'sub_2'), 'Header3' => Array('type'=>'submenu','value'=>'sub_3'), ), 'sub_1' = array( 'SubHeader1' => Array('type'=>'link','value'=>'http://pear.php.net'), 'SubHeader1' => Array('type'=>'link','value'=>'http://www.zend.com'), 'SubHeader1' => Array('type'=>'link','value'=>'http://www.php.net'), ) ); ..osv Da trenger vi en funksjon som traverserer datastrukturen og bygger HTML. Noe slikt: function fncGetSubMenu($str_menuData,$activeMenu) { $strRetVal = ""; $objData = $str_menuData[$activeMenu]; foreach($objData as $key => $value) { $strItemType = $objData['type']; $strValue = $objData['value']; if($itemType == 'submenu') { $strSubMenu = fncGetSubMenu($str_menuData,$strValue); if($strSubMenu!="") { $strRetVal .= "<LI>$strSubMenu</LI>";} } else { $strRetVal .= "<LI>$value</LI>"; } } if ($strRetVal<>"") { $strRetVal = "<UL>$strRetVal</UL>";} return $strRetVal; } Dermed kan menyen bygges med ett funksjonskall: $strMenuHTML = fncGetSubMenuHTML(str_menuData,"header"); Jeg har skrevet koden on-the-fly (ikke testet), så den må nok bearbeides litt... men du ser hvor jeg vil hen? Lenke til kommentar
magikern Skrevet 29. juni 2003 Forfatter Del Skrevet 29. juni 2003 Takk takk da tror jeg at jeg kom nærmere ihvertfall, men det er noe feil med hvordan den viser $value for det som ble printet ut var: <ul> <li>Array</li> <li>Array</li> <li>Array</li> <li>Array</li> <li>Array</li> <li>Array</li> </ul> skrev om litt for det er sånn her jeg til syvende og sist tror jeg skal ha det. $str_menuData = Array( 'header' => Array( 'welcome' => Array('type'=>'link','value'=>'?p=1'), 'about' => Array('type'=>'link','value'=>'?p=2'), 'cv' => Array('type'=>'link','value'=>'?p=3'), 'links' => Array('type'=>'link','value'=>'?p=4'), 'computers' => Array('type'=>'submenu','value'=>'sub_5'), 'info' => Array('type'=>'submenu','value'=>'sub_6'), ), 'sub_5' => Array( 'my' => Array('type'=>'link','value'=>'?p=5&s=1'), ), 'sub_6' => Array( 'feedback' => Array('type'=>'link','value'=>'?p=6&s=1'), 'css' => Array('type'=>'link','value'=>'?p=6&s=2'), 'log' => Array('type'=>'link','value'=>'?p=6&s=3'), ) ); function fncGetSubMenu($str_menuData,$activeMenu) { $strRetVal = ""; $objData = $str_menuData[$activeMenu]; foreach($objData as $key => $value) { $strItemType = $objData['type']; $strValue = $objData['value']; if($strItemType == 'submenu') { $strSubMenu = fncGetSubMenu($str_menuData,$strValue); if($strSubMenu!="") { $strRetVal .= "<LI>$strSubMenu</LI>rn";} } else { $strRetVal .= "<LI>$value</LI>rn"; } } if ($strRetVal<>"") { $strRetVal = "<UL>rn$strRetVal</UL>rn";} return $strRetVal; } $strMenuHTML = fncGetSubMenu($str_menuData,"header"); echo "$strMenuHTML"; ?> Lenke til kommentar
BlueEAGLE Skrevet 30. juni 2003 Del Skrevet 30. juni 2003 <table width="100%" cellpadding="0" cellspacing="0" align="center" border="0"> <?php $query="SELECT ParentID FROM Page WHERE ID=$Page"; $row=mysql_fetch_assoc(mysql_query($query))or die("Could not find parent!"); $Parent=$row["ParentID"]; $query="SELECT * FROM Page WHERE ParentID=0 ORDER BY ID"; $result=mysql_query($query); for ($Cnt=0; $Cnt<mysql_num_rows($result); $Cnt=$Cnt+1) { $row=mysql_fetch_assoc($result); if (($row["ID"]==$Parent)||($row["ID"]==$Page)) $icon="images/open.gif"; else $icon="images/book.gif"; echo '<tr><td width="19"><img src="'.$icon.'" alt="[]"></td>'; echo '<td>';LinkTo($row["ID"], $row[Title]);echo'</td></tr>'; if ($icon=="images/open.gif") { $squery="SELECT * FROM Page WHERE ParentID=".$row["ID"]." ORDER BY ID"; $sresult=mysql_query($squery); for ($sCnt=0; $sCnt<mysql_num_rows($sresult); $sCnt=$sCnt+1) { $srow=mysql_fetch_assoc($sresult); if ($srow[ID]!=$_GET[PageID]) { echo '<tr><td></td><td style="font-size: 10pt">'; LinkTo($srow["ID"], $srow[Title]); echo'</td></tr>'; } else echo '<tr><td align="right" valign="top"><font size="2">></font></td><td style="font-size: 10pt">'.$srow[Title].'</td></td>'; }; }; }; ?> </table> På den annen side så har jeg alle sidene mine i en database da. LinkTo() er en liten sak som bare lager en link til siden. Den ser slik ut: Function LinkTo($ID, $Title) { echo '<a href="index.php?PageID='.$ID.'">'.$Title.'&&</a>'; }; Resultatet ser dere på hjemmesiden min Lenke til kommentar
magikern Skrevet 30. juni 2003 Forfatter Del Skrevet 30. juni 2003 BlueEagle: det så jo greit nok ut det, men som du sikkert har skjønt prøver jeg å få det til med ul li og uten table, så det blir nok helt feil i denne sammenhengen. Lenke til kommentar
magikern Skrevet 8. juli 2003 Forfatter Del Skrevet 8. juli 2003 sliter fortsatt en del med dette så det hadde vært fint med noen innspill... Lenke til kommentar
b-urn Skrevet 16. september 2003 Del Skrevet 16. september 2003 Sorry.. hadde nesten glemt denne :oops: Fått det til nå, eller vil du at jeg skal ta en kikk på det? Lenke til kommentar
magikern Skrevet 16. september 2003 Forfatter Del Skrevet 16. september 2003 Sorry.. hadde nesten glemt denne :oops: Fått det til nå, eller vil du at jeg skal ta en kikk på det? hadde vært kult hvis du gidder ja, for jeg har prøvd en god del ganger og får det liksom ikke til samme hva... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå