Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP Menu

Sivun loppuun

odys [30.06.2003 18:50:58]

#

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");

Queq [01.07.2003 20:20:53]

#

Eikös tuolta lopusta puutu ?> ? :)

odys [01.07.2003 22:21:22]

#

Eipä ei.. Se on vain esimerkki <?php ?> -tägien ulkopuolla..
Itse koodi on kirjoitettu vain <?php ?> -tägien väliin

T.M. [02.07.2003 21:36:50]

#

eiks kumminkin kannattais pistää kaikki koodit noitten tagien sisään? olisit laittanu ne eri listauksiin :P

Olli Vanhoja [03.07.2003 22:49:03]

#

Pistäkää nettii demoo

Olli Vanhoja [03.07.2003 22:49:18]

#

oli jo :-)

Olli Vanhoja [03.07.2003 22:54:51]

#

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>

odys [03.07.2003 23:34:07]

#

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 :)

Olli Vanhoja [05.07.2003 15:06:18]

#

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

T.M. [05.07.2003 20:46:59]

#

olli taitaa olla aikamoinen nyyppä....

odys [09.07.2003 18:02:17]

#

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.

T.M. [10.07.2003 21:44:24]

#

nyyppä on sellainen joka ei osaa jotain asiaa täydellisesti, näin olen käsittänyt asian netissä seikkaillessani.... :D

T.M. [16.07.2003 12:35:32]

#

ja muuten, ton sun välimerkkien toiston vois tehä paremmmin:
str_pad() funktiolla

odys [16.07.2003 21:50:03]

#

Joo.. ois ollut varmaan ihan ok mut en tullut ajatelleeksi sillon.

DjSamu [12.10.2003 12:12:28]

#

Hmm, onko jossain esimerkkiä kyseisestä skriptasta? Ihan vaan huvinvuoksi. Ei oikein tarvetta tuollaisesta =)

stere [25.02.2004 18:34:43]

#

c==8 <-- IME!

stere [25.02.2004 18:35:40]

#

kiva ku noi toimii: http://www.freepgs.com/babylovel/data/j.php

Mauri [26.11.2007 16:07:07]

#

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


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta