Tämän funktion avulla voit helposti luoda menuja sivuillesi.
Menuja voi luoda niin paljon kuin haluaa ja ne ovat kaikki itsenäisiä.
Laita echo MakeMenu($data_taulukko, "menun_nimi"); rivi sinne kohtaan minne haluat menun tulostuvan.
Alimenuja voi olla PHP:n overflowhun saakka.
Tässä näkee myös esimerkkiä rekursiivisesta funktion kutsumisesta, silmukoista ja lauserakenteista.
Funktiossa käytetään yhtä globaalia muuttujaa ja tämän takia muuttujan nimi on niin outo ettei se korvaisi käyttäjän omia muutujia.
Tämän globaalin muuttujan olisi voinut korvata yhdellä uudella parametrillä (Jota käyttäjän ei tarvitsisi säätää), mutta en nyt ala muuttelemaan.
Niin ja demo löytyy http://jope.psykoosi.org/, jonka menu luodaan tällä skriptillä.
<?php /* * Menu script is coded by Joni Järvinen a.k.a Jope <jope@psykoosi.org> * More scripts can be found at http://jope.psykoosi.org/ (Finnish site) * * With this script you can easily create menu simply by creating an array * in form which you can see in example at the end of function * * Then use function to create menu: * MakeMenu (Array menu, String menu_name [, String pos [, String intend]]) * * You can create as many menus as you want, but you must give name for * every menu. * * There may be coming function for this functon so you can create * menu array easily from directory: $menu = MakeArray("/path/to/menu/folder"); * And then you can use $menu like this: echo MakeMenu($menu, "id"); * */ function MakeMenu ($menu, $name, $pos = FALSE, $IntendString = " ") { global $__MenuIntend; while (list($key, $val) = each ($menu)) { if ($pos) $position = "$pos-$key"; else $position = $key; if ($_GET[$name . "_pos"] == "") { switch ($val[0]) { case 0: if (is_array($val[3])) { $buffer .= @str_repeat($IntendString, $__MenuIntend) . "+ <a href=\"" . $val[1] . "?{$name}_pos=$key&" . $val[2] . "\">$key</a><br>\n"; } else { $buffer .= @str_repeat($IntendString, $__MenuIntend) . "- <a href=\"" . $val[1] . "?" . $val[2] . "\">$key</a><br>\n"; } break; case 1: $buffer .= @str_repeat($IntendString, $__MenuIntend) . "- <a href=\"" . $val[1] . "\">$key</a><br>\n"; break; default: die ("Unknown menu item type at $key"); break; } } else { switch ($val[0]) { case 0: if (is_array($val[3])) { $buffer .= @str_repeat($IntendString, $__MenuIntend) . "+ <a href=\"" . $val[1] . "?{$name}_pos=$position&" . $val[2] . "\">$key</a><br>\n"; if (ereg("^" . $position, $_GET[$name . "_pos"])) { $__MenuIntend++; $buffer .= MakeMenu ($val[3], $name, $position); } } else { $buffer .= @str_repeat($IntendString, $__MenuIntend) . "- <a href=\"" . $val[1] . "?{$name}_pos=$position&" . $val[2] . "\">$key</a><br>\n"; } break; case 1: $buffer .= @str_repeat($IntendString, $__MenuIntend) . "- <a href=\"" . $val[1] . "\">$key</a><br>\n"; break; default: die ("Unknown menu item type at $key"); break; } } } $__MenuIntend--; return $buffer; } ?> Example (Try this!): /* * Every index means menu item. Every index includes array which * has 2 to 4 values. First value indicates weather we add * query string at the end of address or not. 1 means not and 0 * means yes. * * Second value indicates address for example "http://jope.psykoosi.org/" * In this example we leave it empty. * * Third one is your own query string after menus own. Do NOT add * ? or & before the query string. * * Fourth one is optional and if it is set it must be array and that * indicates that this menu item has subitems. * */ $menu = Array ( "Etusivu" => Array (1, "http://jope.psykoosi.org/"), "Koodit" => Array (0, "", "sivu=koodit", Array ( "PHP" => Array (0, "", "sivu=koodit&kieli=PHP", Array ( "Funktio 1" => Array (0, "", "sivu=koodit&koodi=Funktio1"), "Funktio 2" => Array (0, "", "sivu=koodit&koodi=Funktio2"), "Funktio 3" => Array (0, "", "sivu=koodit&koodi=Funktio3"), "Funktio 4" => Array (0, "", "sivu=koodit&koodi=Funktio4"), "Funktio 5" => Array (0, "", "sivu=koodit&koodi=Funktio5"), "Funktio 6" => Array (0, "", "sivu=koodit&koodi=Funktio6"), "Funktio 7" => Array (0, "", "sivu=koodit&koodi=Funktio7"), "Funktio 9" => Array (0, "", "sivu=koodit&koodi=Funktio8"), "Funktio 9" => Array (0, "", "sivu=koodit&koodi=Funktio9") ) ), "mIRC" => Array (0, "", "sivu=koodit&kieli=mIRC", Array ( "Identifier1" => Array (0, "", "sivu=koodit&koodi=Identifier1"), "Identifier2" => Array (0, "", "sivu=koodit&koodi=Identifier2"), "Identifier3" => Array (0, "", "sivu=koodit&koodi=Identifier3"), ) ) ) ), "Linkit" => Array (0, "", "sivu=linkit", Array ( "Google" => Array (1, "http://www.google.fi/"), "Mureakuha.com" => Array (1, "http://mureakuha.com"), "Ohjelmointiputka" => Array (1, "https://www.ohjelmointiputka.net/") ) ) ); echo MakeMenu($menu, "menu1");
Eikös tuolta lopusta puutu ?> ? :)
Eipä ei.. Se on vain esimerkki <?php ?> -tägien ulkopuolla..
Itse koodi on kirjoitettu vain <?php ?> -tägien väliin
eiks kumminkin kannattais pistää kaikki koodit noitten tagien sisään? olisit laittanu ne eri listauksiin :P
Pistäkää nettii demoo
oli jo :-)
Jpe: Ku sulla on toi "Funktio, joka keskittää tekstin kuvaan sinne minne käyttäjä haluaa (Käyttää GD kirjastoa)"
Ni eikis ois helpompi tehä htmllä:
<div id="Layer1" style="position:absolute; left:118px; top:100px; width:223px; height:1844px; background-color:#808080; z-index:8">
<img src="include/sysimages/Image28.jpg" width="222" height="100" border="0" name="Image_Layer1" title="kuva1">
</div>
No kattos kun se on funktio, joka on tarkoitettu jos luodaan PHP:llä kuva. Ja muutenkin on parempi laittaa se teksti siihen kuvaan 'kiinteästi' kuin noilla div käkkyröillä.. Nekään ei toimi esim Netscape 4.7:lla :)
eikä Operalla kunnolla esim. huomasin mun nettisivuil tänään, et toi sivun yläosa sekoo vähän, mut ei se nyt pahasti haittaa
olli taitaa olla aikamoinen nyyppä....
Joo siis Olli eihän tämä skripti siihen vaikuta kun tämä tulostaa sivulle pelkkää tekstiä..
Vika on jossain omassa sohelluksessasi.. Ja T.M. ei Olli mikään nyyppä ole. Ei vain ole tutustunut pahemmin HTML:ään tai PHP:hen.
Esim. onhan Ollilla oma graafinen käyttöjärjestelmä tekeillä(ellen väärin muista?), joka on vielä tosiaan odottamisen arvoinen.
nyyppä on sellainen joka ei osaa jotain asiaa täydellisesti, näin olen käsittänyt asian netissä seikkaillessani.... :D
ja muuten, ton sun välimerkkien toiston vois tehä paremmmin:
str_pad() funktiolla
Joo.. ois ollut varmaan ihan ok mut en tullut ajatelleeksi sillon.
Hmm, onko jossain esimerkkiä kyseisestä skriptasta? Ihan vaan huvinvuoksi. Ei oikein tarvetta tuollaisesta =)
c==8 <-- IME!
kiva ku noi toimii: http://www.freepgs.com/babylovel/data/j.php
Terve, en ole kovin hyvä php:n osaaja, joten jäin kiinni (ilmeisesti aika yksinkertaiseen asiaan) sellaiseen, etten osannut luoda tuota menuarrayta. Voisiko joku teistä ystävällisesti kirjoittaa pienen skriptin pätkän, mikä havainnoilstaa asiaa. Haluan siis useampia erilaisia menuja samalle sivulle.
Kiitos Mauri
Aihe on jo aika vanha, joten et voi enää vastata siihen.