PHP & Cookie inklap menu
Auteur: Carpmadness - 26 september 2004 - 16:56 - Gekeurd door: Dennisvb - Hits: 5198 - Aantal punten: (0 stemmen)
php checked welk menu open en welk menu dicht moet zijn
javascript zet de cookies.
Nu gaat ie dat checken dus niet achteraf bij de client doen, wat als irritant word ervaren.
alle menu's zitten in één cookie opgeslagen. dit omdat ik heb ontdekt dat je per server maar 20 cookies mag gebruiken en voor een menu zou het dan snel tveel worden.
Ok daar gaan we.
1. de javascript, zet deze binnen de <head> tags of in een extern javascript-bestand.
verander het domein bij de cookie in je eigen domein
de expiretijd bij de cookie heb ik maar gewoon een verre datum gezet, zodat je daar niet een hele functie voormoet gaan schrijven.
voor de rest hoeft hierin niks te worden veranderd
Code:
<script type="text/javascript">
function toggleMenu(id) {
if(document.getElementById(id).style.display == 'none') {
document.getElementById(id).style.display = 'block';
cookie = replaceChars(getCookie('menu'),id,"1");
setCookie("menu",cookie);
}else {
document.getElementById(id).style.display = 'none';
cookie = replaceChars(getCookie('menu'),id,"0");
setCookie("menu",cookie);
}
}
function replaceChars(entry,id, what) {
before = entry.slice(1,id);
id = parseInt(id)+1;
after = entry.slice(id,entry.lenght);
return "M" + before + what + after;
}
function setCookie(name, value) {
document.cookie = name + "=" + escape(value) + "; expires=Fri, 31 Dec 2010 23:59:59 GMT; path=/; domain=rechtophulp.nl;"
}
function getCookie(id) {
var prefix = id + "=";
var begin = document.cookie.indexOf("; " + prefix);
if (begin == -1) {
begin = document.cookie.indexOf(prefix);
if (begin != 0)
return null;
}else
begin += 2;
var end = document.cookie.indexOf(";", begin);
if (end == -1)
end = document.cookie.length;
return unescape(document.cookie.substring(begin + prefix.length, end));
}
</script>
< script type= "text/javascript" >
function toggleMenu( id) {
if ( document. getElementById( id) . style. display == 'none' ) {
document. getElementById( id) . style. display = 'block' ;
cookie = replaceChars( getCookie( 'menu' ) , id, "1" ) ;
} else {
document. getElementById( id) . style. display = 'none' ;
cookie = replaceChars( getCookie( 'menu' ) , id, "0" ) ;
}
}
function replaceChars( entry, id, what) {
before = entry. slice( 1 , id) ;
id = parseInt( id) + 1 ;
after = entry. slice( id, entry. lenght) ;
return "M" + before + what + after;
}
document. cookie = name + "=" + escape( value) + "; expires=Fri, 31 Dec 2010 23:59:59 GMT; path=/; domain=rechtophulp.nl;"
}
function getCookie( id) {
var prefix = id + "=" ;
var begin = document. cookie. indexOf( "; " + prefix) ;
if ( begin == - 1 ) {
begin = document. cookie. indexOf( prefix) ;
if ( begin != 0 )
return null ;
} else
begin += 2 ;
var end = document
. cookie
. indexOf
( ";" , begin
) ; end = document
. cookie
. length
; return unescape
( document
. cookie
. substring
( begin
+ prefix
. length
, end ) ) ; }
</script>
2. de php functie die menu's checked: open of dicht.
deze kun je eigenlijk overal neerzetten als hij maar niet ná de menu's komt! het beste is om deze gwoon bovenaan de pagina tzetten of net onder de eerste <body> tag.
stel de standaard instelling voor het menu in, voor als er nog geen cookie is of de cookies staan uitgeschakeld.
er moet altijd een "M" (van Menu) achter staan. dus, zoals nu, bij drie menu's 4 tekens waarvan de eerste een "M".
stel de standaard-instellingen van menu in en aantal menu's.
je telt bij instellingen vanaf links. dus menu 1 heeft als waarde: "1", menu 2: "0" en menu 3: "1".
"1" is open "0" is dicht.
<?
if (!isset($_COOKIE["menu"])) {
setcookie("menu","M101",time()+60*60,"/","rechtophulp.nl");
} //dit moet ergens op je pagina voordat er output is gegenereerd.
function menu($which) {
$menu = (isset($_COOKIE['menu']) && $_COOKIE['menu'] != "NaN") ? $_COOKIE['menu'] : "M111101";
return (substr($menu, $which,1) == "0") ? "none" : "block";
}
?>
<?
if ( ! isset ( $_COOKIE [ "menu" ] ) ) { } //dit moet ergens op je pagina voordat er output is gegenereerd.
function menu( $which ) {
$menu = ( isset ( $_COOKIE [ 'menu' ] ) && $_COOKIE [ 'menu' ] != "NaN" ) ?
$_COOKIE [ 'menu' ] : "M111101" ; return ( substr ( $menu , $which , 1 ) == "0" ) ?
"none" : "block" ; }
?>
3. nu de menu's. dit was best lastig. maar ik vond een bug en heb dit dus maar opgelost. volg de instructies goed op
in een menu moeten 3 dingen komen te staan:
- een knop om menu dicht te klappen (deze moet dus in een gedeelte staan dat niet onzichtbaar wordt als je erop klikt)
- een id toekennen aan het gedeelte dat onzichtbar wordt. deze id moet hetzelfde zijn als bij knop is opgegeven.
- de style-display die aan het begin van maken v pagina door php wordt ingevuld.
je moet hierbij goed opletten dat het eerste menu "1" heet, het tweede "2", enz, enz
er mogen geen cijfers ontbreken. (dus niet bv menu's 1,2,4,5 en 6 maar wel 1,2,3,4,5)
in deze drie dingen die ik noemde moeten overal dat nummer komen te staan.
een vbtje voor menu 1:
a href="javascript:toggleMenu('1')">Menu1</a> //het knopje voor menu 1
id="1" style="display:<?=menu('1')?>" // in de tag/het gedeelte dat onzichtbaar word gemaakt
a href="javascript:toggleMenu('1')">Menu1</a> //het knopje voor menu 1
id="1" style="display:<? = menu( '1' ) ?> " // in de tag/het gedeelte dat onzichtbaar word gemaakt
om het helemaal duidelijk te maken heb ik er maar weer een menuutje als vb bij gdaan. netzoals in vb hierboven met drie menuutje die met cookie worden onthouden. Om het dus tlaten draaien moet je een pagina maken met erin:
de php-check voor cookie, boven aan.
<html><head>
de javascript
</head><body>
je menu met de php-check voor de status per menu
<?
if (!isset($_COOKIE["menu"])) {
setcookie("menu","M101",time()+60*60,"/","carpmadness.nl"); // <=Aanpassen
} //dit moet ergens op je pagina voordat er output is gegenereerd.
function menu($which) {
$menu = (isset($_COOKIE['menu']) && $_COOKIE['menu'] != "NaN") ? $_COOKIE['menu'] : "M111101";
return (substr($menu, $which,1) == "0") ? "none" : "block";
}
?>
<html>
<head>
<script type="text/javascript">
function toggleMenu(id) {
if(document.getElementById(id).style.display == 'none') {
document.getElementById(id).style.display = 'block';
cookie = replaceChars(getCookie('menu'),id,"1");
setCookie("menu",cookie);
}else {
document.getElementById(id).style.display = 'none';
cookie = replaceChars(getCookie('menu'),id,"0");
setCookie("menu",cookie);
}
}
function replaceChars(entry,id, what) {
before = entry.slice(1,id);
id = parseInt(id)+1;
after = entry.slice(id,entry.lenght);
return "M" + before + what + after;
}
function setCookie(name, value) {
document.cookie = name + "=" + escape(value) + "; expires=Fri, 31 Dec 2010 23:59:59 GMT; path=/; domain=carpmadness.nl;" // <= Aanpassen
}
function getCookie(id) {
var prefix = id + "=";
var begin = document.cookie.indexOf("; " + prefix);
if (begin == -1) {
begin = document.cookie.indexOf(prefix);
if (begin != 0)
return null;
}else
begin += 2;
var end = document.cookie.indexOf(";", begin);
if (end == -1)
end = document.cookie.length;
return unescape(document.cookie.substring(begin + prefix.length, end));
}
</script>
</head>
<body>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#111111" width="200">
<tr>
<td width="175" style="font-family: Arial Black; font-variant: small-caps; font-size:10pt">
<a href="javascript:toggleMenu('1')">Menu</a>
</td>
</tr>
<tr>
<td style="font-family: Arial Black; font-variant: small-caps; font-size:10pt" id="1" style="display:<?=menu('1')?>">
1. <a href="linka.htm">Link a</a><br>
2. <a href="linkb.htm">Link b</a><br>
3. <a href="linkc.htm">Link c </a>
</td>
</tr>
</table>
<br><br>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#111111" width="200">
<tr>
<td width="175" style="font-family: Arial Black; font-variant: small-caps; font-size:10pt">
<a href="javascript:toggleMenu('2')">Menu</a>
</td>
</tr>
<tr>
<td style="font-family: Arial Black; font-variant: small-caps; font-size:10pt" id="2" style="display:<?=menu('2')?>">
1. <a href="linka.htm">Link a</a><br>
2. <a href="linkb.htm">Link b</a><br>
3. <a href="linkc.htm">Link c </a>
</td>
</tr>
</table>
<br><br>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#111111" width="200">
<tr>
<td width="175" style="font-family: Arial Black; font-variant: small-caps; font-size:10pt">
<a href="javascript:toggleMenu('3')">Menu</a>
</td>
</tr>
<tr>
<td style="font-family: Arial Black; font-variant: small-caps; font-size:10pt" id="3" style="display:<?=menu('3')?>">
1. <a href="linka.htm">Link a</a><br>
2. <a href="linkb.htm">Link b</a><br>
3. <a href="linkc.htm">Link c </a>
</td>
</tr>
</table>
</body>
</html>
<?
if ( ! isset ( $_COOKIE [ "menu" ] ) ) { setcookie ( "menu" , "M101" , time ( ) + 60 * 60 , "/" , "carpmadness.nl" ) ; // <=Aanpassen } //dit moet ergens op je pagina voordat er output is gegenereerd.
function menu( $which ) {
$menu = ( isset ( $_COOKIE [ 'menu' ] ) && $_COOKIE [ 'menu' ] != "NaN" ) ?
$_COOKIE [ 'menu' ] : "M111101" ; return ( substr ( $menu , $which , 1 ) == "0" ) ?
"none" : "block" ; }
?>
<html>
<head>
<script type="text/javascript">
function toggleMenu(id) {
if(document.getElementById(id).style.display == 'none') {
document.getElementById(id).style.display = 'block';
cookie = replaceChars(getCookie('menu'),id,"1");
setCookie("menu",cookie);
}else {
document.getElementById(id).style.display = 'none';
cookie = replaceChars(getCookie('menu'),id,"0");
setCookie("menu",cookie);
}
}
function replaceChars(entry,id, what) {
before = entry.slice(1,id);
id = parseInt(id)+1;
after = entry.slice(id,entry.lenght);
return "M" + before + what + after;
}
function setCookie(name, value) {
document.cookie = name + "=" + escape(value) + "; expires=Fri, 31 Dec 2010 23:59:59 GMT; path=/; domain=carpmadness.nl;" // <= Aanpassen
}
function getCookie(id) {
var prefix = id + "=";
var begin = document.cookie.indexOf("; " + prefix);
if (begin == -1) {
begin = document.cookie.indexOf(prefix);
if (begin != 0)
return null;
}else
begin += 2;
var end = document.cookie.indexOf(";", begin);
if (end == -1)
end = document.cookie.length;
return unescape(document.cookie.substring(begin + prefix.length, end));
}
</script>
</head>
<body>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#111111" width="200">
<tr>
<td width="175" style="font-family: Arial Black; font-variant: small-caps; font-size:10pt">
<a href="javascript:toggleMenu('1')">Menu</a>
</td>
</tr>
<tr>
<td style="font-family: Arial Black; font-variant: small-caps; font-size:10pt" id="1" style="display:<? = menu( '1' ) ?> ">
1. <a href="linka.htm">Link a</a><br>
2. <a href="linkb.htm">Link b</a><br>
3. <a href="linkc.htm">Link c </a>
</td>
</tr>
</table>
<br><br>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#111111" width="200">
<tr>
<td width="175" style="font-family: Arial Black; font-variant: small-caps; font-size:10pt">
<a href="javascript:toggleMenu('2')">Menu</a>
</td>
</tr>
<tr>
<td style="font-family: Arial Black; font-variant: small-caps; font-size:10pt" id="2" style="display:<? = menu( '2' ) ?> ">
1. <a href="linka.htm">Link a</a><br>
2. <a href="linkb.htm">Link b</a><br>
3. <a href="linkc.htm">Link c </a>
</td>
</tr>
</table>
<br><br>
<table border="1" cellpadding="0" cellspacing="0" bordercolor="#111111" width="200">
<tr>
<td width="175" style="font-family: Arial Black; font-variant: small-caps; font-size:10pt">
<a href="javascript:toggleMenu('3')">Menu</a>
</td>
</tr>
<tr>
<td style="font-family: Arial Black; font-variant: small-caps; font-size:10pt" id="3" style="display:<? = menu( '3' ) ?> ">
1. <a href="linka.htm">Link a</a><br>
2. <a href="linkb.htm">Link b</a><br>
3. <a href="linkc.htm">Link c </a>
</td>
</tr>
</table>
</body>
</html>
Het onderste voorbeeld moet compleet werken... Je moet er alleen op letten dat je 2x het domein aanpast! Download code (.txt)
Stemmen
Niet ingelogd.