Navigeren met php
Wat ik wil:
Een navigatiebalk met submenu's
deze submenu's zijn te zien langs het "main"-textveld, dus niet uitklapbaar oid
Graag wil ik een active kleur aan de navigatiebalk EN een active kleur aan het submenu.
Het submenu moet zichtbaar blijven als er een item uit het submenu wordt weergegeven.
Hopelijk is het duidelijk wat ik zoek
Wat ik heb: misschien niet slim en ik sta open voor suggesties...
een database met de namen van menu en submenu
hoofd1 - sub1
hoofd1 - sub2
hoofd2 - sub1
etc
ik krijg de navigatiebalk opgebouwt en ik krijg er ook het submenu bij
hoe?
HOOFDMENU
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
function menu() {
$sql = mysql_query("SELECT * FROM contentmenu WHERE C_name = C_hoofd ORDER BY C_id ASC");
$array = array();
$i = 0;
while($tmp = mysql_fetch_array($sql)) {
$array[$i]["naam"] = $tmp["C_hoofd"];
$i++;
}
return $array;
}
$menu = menu();
foreach($menu as $menudata) {
$actief = $menudata["naam"] == $_GET['func'] ? ' actief' : '';
echo "<a href = 'index_new2.php?func=".$menudata["naam"]."' class='".$menudata["naam"]. $actief ." ' >".$menudata["naam"]."</a>";
}
?>
function menu() {
$sql = mysql_query("SELECT * FROM contentmenu WHERE C_name = C_hoofd ORDER BY C_id ASC");
$array = array();
$i = 0;
while($tmp = mysql_fetch_array($sql)) {
$array[$i]["naam"] = $tmp["C_hoofd"];
$i++;
}
return $array;
}
$menu = menu();
foreach($menu as $menudata) {
$actief = $menudata["naam"] == $_GET['func'] ? ' actief' : '';
echo "<a href = 'index_new2.php?func=".$menudata["naam"]."' class='".$menudata["naam"]. $actief ." ' >".$menudata["naam"]."</a>";
}
?>
</div>
<div id="contentmenu">
<ul>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
[b]SUBMENU[/b]
function submenu(){
$func= mysql_real_escape_string($_GET['func']);
$sql = mysql_query ("SELECT * FROM contentmenu WHERE C_name != C_hoofd AND C_hoofd = '$func' ORDER BY C_id ASC ") or die (mysql_error());
$array = array();
$i = 0;
while($tmp = mysql_fetch_array($sql)) {
$array[$i]["naam"] = $tmp["C_name"];
$i++;
}
return $array;
}
$submenu = submenu();
foreach($submenu as $submenudata) {
$actief = $submenudata["naam"] == $_GET['func'] ? ' actief' : '';
echo "<li><a href = 'index_new2.php?func=".$submenudata["naam"]."' class='".$submenudata["naam"]. $actief ." ' >".$submenudata["naam"]."</a></li>";
}
?>
[b]SUBMENU[/b]
function submenu(){
$func= mysql_real_escape_string($_GET['func']);
$sql = mysql_query ("SELECT * FROM contentmenu WHERE C_name != C_hoofd AND C_hoofd = '$func' ORDER BY C_id ASC ") or die (mysql_error());
$array = array();
$i = 0;
while($tmp = mysql_fetch_array($sql)) {
$array[$i]["naam"] = $tmp["C_name"];
$i++;
}
return $array;
}
$submenu = submenu();
foreach($submenu as $submenudata) {
$actief = $submenudata["naam"] == $_GET['func'] ? ' actief' : '';
echo "<li><a href = 'index_new2.php?func=".$submenudata["naam"]."' class='".$submenudata["naam"]. $actief ." ' >".$submenudata["naam"]."</a></li>";
}
?>
So far so good
maar als ik nu een submenu aanklik dan verdwijnt het submenu
ook is de navigatieknop niet meer active
het doel is om in 1x heel het menu te kunnen vangen zodat ik maar 1x mijn pagina op maak.
Is het mogelijk wat ik wil...op deze manier???
Gewijzigd op 15/08/2012 14:09:44 door Niels R
Ik ben eigenlijk benieuwt waarom je kiest om het menu in een database te zetten ipv php bestanden te gebruiken?
Chris NVT op 15/08/2012 14:28:10:
Ik ben eigenlijk benieuwt waarom je kiest om het menu in een database te zetten ipv php bestanden te gebruiken?
ik weet niet hoe ik anders kan vertellen welk submenu in welk hoofdmenu hoort.
Hoe kan het anders?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$menu = array("Home" => "index.php",
"Over Ons" => "overons.php",
"Links" => "links.php",
"Contact" => "contact.php");
// of met submenu's
$menu = array("Home" => array("Sub1" => "submenu_1",
"Sub2" => "submenu_2"),
"Over Ons" => array("Sub1" => "submenu_1",
"Sub2" => "submenu_2"),
"Links" => array("Sub1" => "submenu_1",
"Sub2" => "submenu_2"));
?>
$menu = array("Home" => "index.php",
"Over Ons" => "overons.php",
"Links" => "links.php",
"Contact" => "contact.php");
// of met submenu's
$menu = array("Home" => array("Sub1" => "submenu_1",
"Sub2" => "submenu_2"),
"Over Ons" => array("Sub1" => "submenu_1",
"Sub2" => "submenu_2"),
"Links" => array("Sub1" => "submenu_1",
"Sub2" => "submenu_2"));
?>
Chris z'n manier is inderdaad beter tenzij je een systeem hebt waarbij paginas online aangemaakt worden.
Stefan van den Broek op 15/08/2012 14:49:52:
Chris z'n manier is inderdaad beter tenzij je een systeem hebt waarbij paginas online aangemaakt worden.
sorry voor de waarschijnlijk domme vraag...ben nog niet zo heel erg thuis hierin..en het is ook phpHULP :)
maar je zet zo'n array op deze manier in je html/php?
dit komt zo niet uit een database?
Op de manier zoals ik het voordoe, zet je de waardes gewoon met de hand in de array door het zo te typen.
Dat sla je dan op in je config.php of menu.php of hoe je het dan ook wil noemen. Die include je vervolgens gewoon in je pagina met include ('menu.php');
Gewijzigd op 15/08/2012 14:56:08 door Chris PHP
hoe maak ik daar nu een menu van die aan alle eisen voldoet
als basis heb ik 1 php pagina met de html/css waarin in alle andere pagina's include en deze met een functie de juiste op het scherm laat zien index.php?func=".$submenudata["naam"]
Ik snap eerlijk gezecht ook niet waarom je het in een array zet..
Hellemaal omdat hij aan geeft het dynamischer wilt gaan maken.
Dan kan je toch veel beter kiezen om het gelijk in een database te zetten..
want ik ben persoonlijk van mening dat bij een dynamisch menu ook dynamisch pagina's horen want anders zou het weinig zin hebben.
want in een array zet je ze weer 'statisch' in.
Reshad F op 15/08/2012 16:31:21:
misschien helpt deze tutorial je verder :)
http://www.phphulp.nl/php/tutorial/php-algemeen/simpel-website-routing/792/
http://www.phphulp.nl/php/tutorial/php-algemeen/simpel-website-routing/792/
na deze gelezen te hebben ben ik wat gerichter gaan zoeken...en ben hierop uitgekomen
http://www.sitemasters.be/scripts/1/19/1088/PHP/Uitklap_menu
Doet redelijk wat ik wil en na wat verbouwen van het bestaande script ben ik een heel end...maar aan 1 ding kom ik nog niet uit
Code (php)
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
<?php
//Menu 0
$menu[0][] = "home";
$menu[0]['ONTSTAAN'] = "index.php?p=ontstaan&menuid=0";
$menu[0]['NIEUWS'] = "index.php?p=nieuws&menuid=0";
$menu[0]['AGENDA'] = "index.php?p=agenda&menuid=0";
$menu[0]['GASTENBOEK'] = "index.php?p=gastenboek&menuid=0";
?>
//Menu 0
$menu[0][] = "home";
$menu[0]['ONTSTAAN'] = "index.php?p=ontstaan&menuid=0";
$menu[0]['NIEUWS'] = "index.php?p=nieuws&menuid=0";
$menu[0]['AGENDA'] = "index.php?p=agenda&menuid=0";
$menu[0]['GASTENBOEK'] = "index.php?p=gastenboek&menuid=0";
?>
Als dit de array is voor het menu
hoe kan ik dan van "home" een pagina maken?
dit is de rest van het menu
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
if (!isset($_GET['menuid'])) // Als menuid niet gezet is => standaard openen
{
$_GET['menuid'] = $standaard;
}
for ($i=0; $i<count($menu); $i++)
{
if ($i == $_GET['menuid']) // Links tonen + menu ZONDER link
{
echo "<a class='actief ".$menu[$i][0]."' href=\"?menuid=".$i."\">".$menu[$i][0]."</a>";
array_shift($menu[$i]); // Schuif een element van het begin van de array af
$p=" ";
if(isSet($_GET['p']) && file_exists('includes/'. $_GET['p'] .'.php')) {
$p = $_GET['p'];
}
foreach($menu[$i] as $key => $value) // Key en waarde
{
$p = strtoupper($p);
if ($p == $key)
{
echo "<li><a class='actief' href=\"".$value."\">".$key."</a></li>";
}
else
{
echo "<li><a href=\"".$value."\">".$key."</a></li>";
}
}
}
else // Geen links tonen + menu MET link
{
echo "<a class='".$menu[$i][0]."' href=\"?menuid=".$i."\">".$menu[$i][0]."</a>";
[0]."</a>";
}
}
?>
if (!isset($_GET['menuid'])) // Als menuid niet gezet is => standaard openen
{
$_GET['menuid'] = $standaard;
}
for ($i=0; $i<count($menu); $i++)
{
if ($i == $_GET['menuid']) // Links tonen + menu ZONDER link
{
echo "<a class='actief ".$menu[$i][0]."' href=\"?menuid=".$i."\">".$menu[$i][0]."</a>";
array_shift($menu[$i]); // Schuif een element van het begin van de array af
$p=" ";
if(isSet($_GET['p']) && file_exists('includes/'. $_GET['p'] .'.php')) {
$p = $_GET['p'];
}
foreach($menu[$i] as $key => $value) // Key en waarde
{
$p = strtoupper($p);
if ($p == $key)
{
echo "<li><a class='actief' href=\"".$value."\">".$key."</a></li>";
}
else
{
echo "<li><a href=\"".$value."\">".$key."</a></li>";
}
}
}
else // Geen links tonen + menu MET link
{
echo "<a class='".$menu[$i][0]."' href=\"?menuid=".$i."\">".$menu[$i][0]."</a>";
[0]."</a>";
}
}
?>
Scheelt je een al die \ --> overzichtelijker, minder kansen op fouten.
Zie ook http://www.phphulp.nl/php/tutorial/php-algemeen/correct-quoten/772/
Obelix en Idefix op 26/08/2012 14:36:00:
Even een tip, los van je vraag. Gebruik in PHP ' en in HTML "
Scheelt je een al die \ --> overzichtelijker, minder kansen op fouten.
Zie ook http://www.phphulp.nl/php/tutorial/php-algemeen/correct-quoten/772/
Scheelt je een al die \ --> overzichtelijker, minder kansen op fouten.
Zie ook http://www.phphulp.nl/php/tutorial/php-algemeen/correct-quoten/772/
bedankt voor de tip...tis een gejat script wat ik heb aangepast...misschien wel slim om de \ uit te halen en single quotes te gebruiken...
misschien ook een tip ontopic ;-)