Horizontaal drop-out menu
Beste mede-scripter,
ik heb zelf een script geschreven waarmee door middel van php een menu wordt opgebouwd. Er wordt gebruikt gemaakt van een array waarin je je menu opties kunt zetten. Dit script zorgt er voor dat er een net menu wordt gemaakt zoals onderstaand voorbeeld:
De php code hiervoor is:
Nu wil ik dit menu echter uitbreiden. Wat ik dus extra wil maken zijn submenu's in deze menu structuur. Kan iemand mij een stuk opweg helpen? Je zult ergens moeten invoeren welke hoofdmenu-opties er zijn en welke opties een submenu zijn, en waarbij deze submenu's horen, denk ik.
(Ik bedoel een menu zoals hier bovenaan bij phphulp.nl ook gebruikt wordt.) Alvast hartstikke bedankt.
ik heb zelf een script geschreven waarmee door middel van php een menu wordt opgebouwd. Er wordt gebruikt gemaakt van een array waarin je je menu opties kunt zetten. Dit script zorgt er voor dat er een net menu wordt gemaakt zoals onderstaand voorbeeld:
Code (php)
1
2
3
4
5
2
3
4
5
<ul>
<li><a href="Websiteurl">Item1</a></li>
<li><a href="Websiteurl">Item2</a></li>
<li><a href="Websiteurl">Item3</a></li>
</ul>
<li><a href="Websiteurl">Item1</a></li>
<li><a href="Websiteurl">Item2</a></li>
<li><a href="Websiteurl">Item3</a></li>
</ul>
De php code hiervoor is:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<ul class="menu">
<?php
$aPages = array('Item1', 'Item2', 'Item3'); // De pagina's in die in het menu moeten verschijnen
foreach($aPages as $page){
$current = ((!empty($_GET['pagina']) && in_array($_GET['pagina'], $aPages) && $_GET['pagina'] == $page) || (!isset($_GET['pagina']) && $page == 'Home'))? ' class="current"':'';
echo '<li'.$current.'><a href="?pagina='.$page.'">'.$page.'</a></li>'.PHP_EOL;
}
?>
</ul>
<?php
$aPages = array('Item1', 'Item2', 'Item3'); // De pagina's in die in het menu moeten verschijnen
foreach($aPages as $page){
$current = ((!empty($_GET['pagina']) && in_array($_GET['pagina'], $aPages) && $_GET['pagina'] == $page) || (!isset($_GET['pagina']) && $page == 'Home'))? ' class="current"':'';
echo '<li'.$current.'><a href="?pagina='.$page.'">'.$page.'</a></li>'.PHP_EOL;
}
?>
</ul>
Nu wil ik dit menu echter uitbreiden. Wat ik dus extra wil maken zijn submenu's in deze menu structuur. Kan iemand mij een stuk opweg helpen? Je zult ergens moeten invoeren welke hoofdmenu-opties er zijn en welke opties een submenu zijn, en waarbij deze submenu's horen, denk ik.
(Ik bedoel een menu zoals hier bovenaan bij phphulp.nl ook gebruikt wordt.) Alvast hartstikke bedankt.
Gewijzigd op 01/01/1970 01:00:00 door Tom
Heb je ajax (mootools, j_qeury) als eens geprobeerd ?...
zodra ik een voorbeeld heb post ik heb even voor je.
edit: Dit is 1. jQeury:
http://be.twixt.us/jquery/suckerFish.php
Mischien heb je er wat aan: wpQeury
http://nettuts.com/javascript-ajax/tabbed-content-using-jquery-and-wp_query/
zodra ik een voorbeeld heb post ik heb even voor je.
edit: Dit is 1. jQeury:
http://be.twixt.us/jquery/suckerFish.php
Mischien heb je er wat aan: wpQeury
http://nettuts.com/javascript-ajax/tabbed-content-using-jquery-and-wp_query/
Gewijzigd op 01/01/1970 01:00:00 door Bart Tuma
@Bart
Ik denk dat hij meer bedoeld hoe hij kan zorgen dat dat op de juiste manier opgebouwd wordt. Daarvoor kan hij zoeken op recursief of recursieve array. (in het nederlands dan, maar het kan ook handig zijn om op de engelse variant te zoeken)
door Recursief uitlezen maakt het niet uit hoe diep een array is.
Ik denk dat hij meer bedoeld hoe hij kan zorgen dat dat op de juiste manier opgebouwd wordt. Daarvoor kan hij zoeken op recursief of recursieve array. (in het nederlands dan, maar het kan ook handig zijn om op de engelse variant te zoeken)
door Recursief uitlezen maakt het niet uit hoe diep een array is.
De menu's zijn goed, maar niet dynamisch. Ik wil dus enkel in een array aangeven de hoofd items en sub-items(en daarbij aageven welk hoofd item hierbij hoort). Misschien gebruik maken van string uitlezen steeds in de foreach loop? Dat je bijvoorbeeld zoekt of ergens sub staat.
Ik dacht bijv zoiets:
Alleen moet je dus deze aan elkaar linken of iets dergelijks en dan dus in een volgende lus laten bekijken waar het menu moet worden aangepast.
Ik dacht bijv zoiets:
Code (php)
1
2
3
2
3
$aPages = array('Item1', 'Item2', 'Item3'); // De pagina's in die in het menu moeten verschijnen
$aSubs = array('sub1', 'sub2', 'sub3'); // Hier de sub-items
$aSubs = array('sub1', 'sub2', 'sub3'); // Hier de sub-items
Alleen moet je dus deze aan elkaar linken of iets dergelijks en dan dus in een volgende lus laten bekijken waar het menu moet worden aangepast.
@Tom
daarom wees ik je naar een recursieve functie. Voor het werken met een submenu kan je ook prima met multidimensionale arrays werken:
daarom wees ik je naar een recursieve functie. Voor het werken met een submenu kan je ook prima met multidimensionale arrays werken:
Ok en dan moet ik dus een multidimensionale array uit gaan lezen. Maar kun je me een eindje opweg helpen hoe ik dan de structuur van mijn menu kan opbouwen? Dan kom ik er verder zelf wel uit denk ik :)
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
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
<?php
/**
* @author Robert Deiman
* @copyright 2008
*/
function generate_menu($array_items)
{
if(!isset($return_string)){
$return_string = '<ul>';
}
foreach($array_items AS $key => $value)
{
if(!is_array($value))
{
$return_string .= '<li>'.$value.'</li>';
}
if(is_array($value))
{
$return_string .= '<li>'.$key.'</li>';
$return_string .= generate_menu($value);
}
}
$return_string.= '</ul>';
return $return_string;
}
$menu = array('home','nieuws'=>array('archief','laatste','recent'=>array('vandaag','gisteren')),'contact');
echo generate_menu($menu);
?>
/**
* @author Robert Deiman
* @copyright 2008
*/
function generate_menu($array_items)
{
if(!isset($return_string)){
$return_string = '<ul>';
}
foreach($array_items AS $key => $value)
{
if(!is_array($value))
{
$return_string .= '<li>'.$value.'</li>';
}
if(is_array($value))
{
$return_string .= '<li>'.$key.'</li>';
$return_string .= generate_menu($value);
}
}
$return_string.= '</ul>';
return $return_string;
}
$menu = array('home','nieuws'=>array('archief','laatste','recent'=>array('vandaag','gisteren')),'contact');
echo generate_menu($menu);
?>
Gewijzigd op 01/01/1970 01:00:00 door Robert Deiman
Dit komt inderdaad wel in de buurt Robert, maar bij mij werkt hij nog niet. Ik zit uit te zoeken hoe ik hem werkend kan krijgen. heb ook wel een url gevonden.
In ieder geval bedankt dat je met me meedenkt !! toppie!
http://www.phpinsider.com/smarty-forum/viewtopic.php?t=11686
ps. voor degene met css oplossingen. Dit is niet wat ik zoek. Dit heb ik al onder de knie, en ook al werkend. Maar een menu maken en helemaal uittypen in html kost meer tijd. Wanneer je een php script hebt scheelt dit tijd :) En werkt het fijner.
In ieder geval bedankt dat je met me meedenkt !! toppie!
http://www.phpinsider.com/smarty-forum/viewtopic.php?t=11686
ps. voor degene met css oplossingen. Dit is niet wat ik zoek. Dit heb ik al onder de knie, en ook al werkend. Maar een menu maken en helemaal uittypen in html kost meer tijd. Wanneer je een php script hebt scheelt dit tijd :) En werkt het fijner.
@Tom
Mag ik vragen wat er nog niet werkt? ;) Ben wel benieuwd eigenlijk want wat ik net heb bekeken in de bron die die genereert klopt helemaal. Als er nog een foutje in zit, wil ik die er natuurlijk ook wel uithalen. :)
Mag ik vragen wat er nog niet werkt? ;) Ben wel benieuwd eigenlijk want wat ik net heb bekeken in de bron die die genereert klopt helemaal. Als er nog een foutje in zit, wil ik die er natuurlijk ook wel uithalen. :)
Robert, hij werkt inderdaad goed, waarschijnlijk zal ik nu enkel css moeten toepassen. Er zat wel een heel klein foutje in maar deze is zo verholpen:
moet zijn
Bij de eerste code komt er nog "2" te staan (dus de hoeveelheid in de 2e geneste array. Nu is hij goed. Ik zal hem nog wel uitbreiden en dan het complete script hier posten (inclusief css). Zodat mensen hem kunnen gebruiken. Ik wil hem zo uitbreiden dat elke sub-items de volgende url krijgen:
?pagina=item1§ion=subitem1 . Maar daar kom ik wel uit denk.
Complete code nu dus:
Altijd handig :)
In ieder geval bedankt voor je zetje Robert, ik stel het erg op prijs!
Code (php)
1
$menu = array('home','nieuws'=>array('archief','laatste', array('vandaag','gisteren')),'contact');
moet zijn
Code (php)
1
$menu = array('home','nieuws'=>array('archief','laatste'=>array('vandaag','gisteren')),'contact');
Bij de eerste code komt er nog "2" te staan (dus de hoeveelheid in de 2e geneste array. Nu is hij goed. Ik zal hem nog wel uitbreiden en dan het complete script hier posten (inclusief css). Zodat mensen hem kunnen gebruiken. Ik wil hem zo uitbreiden dat elke sub-items de volgende url krijgen:
?pagina=item1§ion=subitem1 . Maar daar kom ik wel uit denk.
Complete code nu dus:
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
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
<?
function generate_menu($array_items)
{
if(!isset($return_string)){
$return_string = '<ul>';
}
foreach($array_items AS $key => $value)
{
if(!is_array($value))
{
$return_string .= '<li><a href="?pagina='.$value.'">'.$value.'</li>';
}
if(is_array($value))
{
$return_string .= '<li><a href="?pagina='.$key.'">'.$key.'</li>';
$return_string .= generate_menu($value);
}
}
$return_string .= '</ul>';
return $return_string;
}
$menu = array('home','nieuws'=>array('archief','laatste'=>array('vandaag','gisteren')),'contact');
echo generate_menu($menu);
?>
function generate_menu($array_items)
{
if(!isset($return_string)){
$return_string = '<ul>';
}
foreach($array_items AS $key => $value)
{
if(!is_array($value))
{
$return_string .= '<li><a href="?pagina='.$value.'">'.$value.'</li>';
}
if(is_array($value))
{
$return_string .= '<li><a href="?pagina='.$key.'">'.$key.'</li>';
$return_string .= generate_menu($value);
}
}
$return_string .= '</ul>';
return $return_string;
}
$menu = array('home','nieuws'=>array('archief','laatste'=>array('vandaag','gisteren')),'contact');
echo generate_menu($menu);
?>
Altijd handig :)
In ieder geval bedankt voor je zetje Robert, ik stel het erg op prijs!
Gewijzigd op 01/01/1970 01:00:00 door Tom
Ik kom er niet uit om de nette url te krijgen bij een genest item. Iemand die mij hierbij kan helpen?
Het volgende zou ik graag willen: ?pagina=item1§ion=subitem1
Ook werkt het niet helemaal met css, het eerst item waar subitems onder hangen moet de class: top-parent krijgen. De items die een subitem van een subitem zijn moeten echter de class: parent krijgen.
Heb het geprobeerd met de code om het zo aan de praat te krijgen, maar dit was niet zo heel eenvoudig. Is er misschien een oplossing om dit met een javascript toe te voegen oid?
Alvast bedankt
Het volgende zou ik graag willen: ?pagina=item1§ion=subitem1
Ook werkt het niet helemaal met css, het eerst item waar subitems onder hangen moet de class: top-parent krijgen. De items die een subitem van een subitem zijn moeten echter de class: parent krijgen.
Heb het geprobeerd met de code om het zo aan de praat te krijgen, maar dit was niet zo heel eenvoudig. Is er misschien een oplossing om dit met een javascript toe te voegen oid?
Alvast bedankt
Check even dit voorbeeld. Ik heb het eerste niveau van je menu geen style gegeven, en het tweede en het derde niveau elk zijn eigen style:
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
47
48
49
50
51
52
53
54
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
47
48
49
50
51
52
53
54
<?php
$menu = array('home','nieuws'=>array('archief','laatste'=>array('vandaag','gisteren')),'contact');
function generate_menu($array_items)
{
if(!isset($return_string)){
$return_string = '<ul>';
}
foreach($array_items AS $key => $value)
{
if(!is_array($value))
{
$return_string .= '<li><a href="?pagina='.$value.'">'.$value.'</li>';
}
if(is_array($value))
{
$return_string .= '<li><a href="?pagina='.$key.'">'.$key.'</li>';
$return_string .= generate_menu($value);
}
}
$return_string .= '</ul>';
return $return_string;
}
$menu = array('home','nieuws'=>array('archief','laatste'=>array('vandaag','gisteren')),'contact');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="mootools/mootools.js"></script>
<script type="text/javascript">
window.addEvent ('domready', function () {
$$('ul ul ul li a').each (function (item) {
item.setStyle ('color', 'red');
});
$$('ul ul li a').each (function (item) {
if (item.getStyle ('color') != 'red') {
item.setStyle ('color', 'green');
}
});
});
</script>
</head>
<body>
<?php
echo generate_menu($menu);
?>
</body>
</html>
$menu = array('home','nieuws'=>array('archief','laatste'=>array('vandaag','gisteren')),'contact');
function generate_menu($array_items)
{
if(!isset($return_string)){
$return_string = '<ul>';
}
foreach($array_items AS $key => $value)
{
if(!is_array($value))
{
$return_string .= '<li><a href="?pagina='.$value.'">'.$value.'</li>';
}
if(is_array($value))
{
$return_string .= '<li><a href="?pagina='.$key.'">'.$key.'</li>';
$return_string .= generate_menu($value);
}
}
$return_string .= '</ul>';
return $return_string;
}
$menu = array('home','nieuws'=>array('archief','laatste'=>array('vandaag','gisteren')),'contact');
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript" src="mootools/mootools.js"></script>
<script type="text/javascript">
window.addEvent ('domready', function () {
$$('ul ul ul li a').each (function (item) {
item.setStyle ('color', 'red');
});
$$('ul ul li a').each (function (item) {
if (item.getStyle ('color') != 'red') {
item.setStyle ('color', 'green');
}
});
});
</script>
</head>
<body>
<?php
echo generate_menu($menu);
?>
</body>
</html>




