Créer un compte
Connexion

PHP/JS : les cookies

Pour créer et répondre aux sujets, vous devez être connecté.
Pages: 1
Auteur Message
Lolo44
04/03/2011 à 22:48:51
Lolo44
Membre
Bonjour ,
Dans mon menu j'ai un spoiler qui permet de masquer les sous-menu , j'aimerais utiliser les cookies pour que les sous menus restant masqués (en style display:none;) apres actualisation .
Merci
PS: La page ne question : http://www.koopa-legends.tk/ , menus de droite et de gauche.

Lolo44
05/03/2011 à 19:40:54
Lolo44
Membre
Personne?

Spitfire 95
06/03/2011 à 10:09:20
Spitfire 95
Membre
<? setcookie ('$_POST['menu_x]',$_POST['menu_x_display'];,time()+31536000,'',TONSITE'); ?> Tu mets ça dans un fichier PHP séparé.
Ensuite, c'est quand on clique sur un bouton, il faut que le fichier soit appelé avec menu_x = id du menu que l'on change, et menu_x_display = none ou block (ou je sais pas comment il doit s'afficher donc à toi de voir).
Ces données sont transmises en post.
En js, je sais pas, donc soit tu essaye de voir pour le faire en PHP, soit tu attends que quelqu'un t'explique en js.

Lolo44
06/03/2011 à 22:44:08
Lolo44
Membre
Je vais essayer de mettre ca en GET plutot...

Mais pas dans un fichier séparé !

EDIT: Voici le début pour masquer la partie "Twitter" dans le menu de droite :

<?php if $_GET['menur.twitter'] =='ok' {
 setcookie ('$_POST['menur.twitter]',$_POST['menur.twitter.ok'];,time()+31536000,'',Koopa-Legends');
}
?>
Et apres sur le bouton je met simplement ça ? href="?menur.twitter=ok" Merci

Lolo44
07/03/2011 à 16:47:27
Lolo44
Membre
Alors ? Ca marcherais ? Je pense pas car il faut enlever les $_POST mais je sais pas par quoi les remplacer...

ipodtouchpro
07/03/2011 à 23:07:06
ipodtouchpro
Membre
Avec des sessions

Lolo44
07/03/2011 à 23:12:50
Lolo44
Membre
Non , avec des cookies car je suppose que c'est plus complqué avec des sessions...

Spitfire 95
08/03/2011 à 07:52:28
Spitfire 95
Membre
Quand on change la valeur du display d'un menu, il faut appeler une page qui ne s'affichera pas et qui enregistrera si le menu untel doit être affiché. Donc dans tes cookies il y aura l'id du menu dans le nom, et la valeur que doit prendre display.
Et dans le template du menu, pour chacun des menus, tu récupérera la valeur de chacun des menus, et la donnera à un code js qui dira au navigateur si il doit afficher ou non.
Si tu ne veux pas un fichier séparer, je doute que ce soit possible avec PHP. Donc dans ce cas, regarde pour les cookies en js.

Lolo44
08/03/2011 à 09:12:09
Lolo44
Membre
Bon , d'accord pour le fichier séparé , mais je tien a préciser quelque chose : je suis débutant , tu n'aurais pas un code concret ?

Petite précision : le style est soit display:none soit rien du tout , voici le code :  //----------------------------------------------
// Affichage d'un Objet déclaré dans le document...
//----------------------------------------------
function Affiche_OBJ(){
  var Arg = arguments;  // Récup liste des arguments passée à la fonction
  var Obj;
  for( var i=0; i< Arg.length; i++){               // On parcours la liste
    Obj = document.getElementById( Arg[i]); // Récup Objet correspondant
    if( Obj){
      Obj.style.visibility = "visible";
      //-- Ou autre méthode
      Obj.style.display = "";
    }
  }
}
//----------------------------------------------
// Masquage d'un Objet déclaré dans le document...
//----------------------------------------------
function Masque_OBJ(){
  var Arg = arguments;  // Récup liste des arguments passée à la fonction
  var Obj;
  for( var i=0; i< Arg.length; i++){               // On parcours la liste
    Obj = document.getElementById( Arg[i]); // Récup Objet correspondant
    if( Obj){
      Obj.style.visibility = "hidden";
      //-- Ou autre méthode
      Obj.style.display = "none";
    }
  }
}


Spitfire 95
08/03/2011 à 18:49:23
Spitfire 95
Membre
Le style peut-être display none soit autre chose. J'ignore la valeur par défaut dans ton cas, legtux est en erreur 500 (et le serveur semble être completement indisponible actuellement) donc je peux pas espionner. ^^

Pour le côté javascript, essaye :
 //----------------------------------------------
// Affichage d'un Objet déclaré dans le document...
//----------------------------------------------
var aujourdhui = new Date();
var expdate = new Date();
expdate.setTime( aujourdhui.getTime() + ( 365*24*60*60*1000 ) )     // Le cookie vivra un an
       
function Affiche_OBJ(){
  var Arg = arguments;  // Récup liste des arguments passée à la fonction
  var Obj;
  for( var i=0; i< Arg.length; i++){               // On parcours la liste
    Obj = document.getElementById( Arg[i]); // Récup Objet correspondant
    if( Obj){
        Obj.style.visibility = "visible";
        document.cookie = Arg[i] + "= visible ; expires=" + expdate.toGMTString() ;
        //-- Ou autre méthode
        Obj.style.display = "";
    }
  }
}
//----------------------------------------------
// Masquage d'un Objet déclaré dans le document...
//----------------------------------------------
function Masque_OBJ(){
  var Arg = arguments;  // Récup liste des arguments passée à la fonction
  var Obj;
  for( var i=0; i< Arg.length; i++){               // On parcours la liste
    Obj = document.getElementById( Arg[i]); // Récup Objet correspondant
    if( Obj){
      Obj.style.visibility = "hidden";
        document.cookie = Arg[i] + "= hidden ; expires=" + expdate.toGMTString() ;
      //-- Ou autre méthode
      Obj.style.display = "none";
    }
  }
}
 
Ça créera les cookies mais ne te permettra pas de les lire.
Donc après chaque menu, tu mettra ce code :
<script type="text/javascript">  /* Dans un script js pour ne pas générer d'erreur W3C */
ID_MENU.style.visibility="
<? echo $_COOKIE['NOM_DU_COOKIE'];      // Le nom transmit au cookie par Arg[i] ?>
";      // En remplaçant ID_MENU par l'id du menu que l'on charge
</script>
En supposant qu'il soit possible de lire un cookie créé en js avec PHP.
J'ai testé aucun code. Je ne pense pas que ça marche pour être honnête mais... Si ça peut t'avancer ou permettre à quelqu'un de t'aider plus facilement...

Lolo44
08/03/2011 à 21:09:47
Lolo44
Membre
Oui legtux , beuge souvent j'ai changé (koopa-legends.tk redirige vers le nouveau)
tu peut donc regarder le code source (pas tres propre )

Spitfire 95
09/03/2011 à 07:21:29
Spitfire 95
Membre
Donc display:block par défaut. Mais je ne pense pas qu'il soit nécessaire de changer le display, la visibility devrait suffire non ?

Lolo44
09/03/2011 à 08:38:12
Lolo44
Membre
Oui, bien sur mais clique sur les boutons - , tu vois ? Le menus se "rétractent" je ne sais pas si visibility:hidden ne laissera pas l'espace entre le titre et le menu...

Spitfire 95
09/03/2011 à 18:35:37
Spitfire 95
Membre
Ah, si, exact. Donc il faudra verifier le contenu du cookie pour déduire le display depuis la visibilité.
Et plutôt qu'un JS pour changer les style, mettre directement les CSS dans le style="" puisque tu as style="visibility:visible;" dans tes menus.

Lolo44
09/03/2011 à 20:46:52
Lolo44
Membre
Ok, donc quel serait le code ?

Spitfire 95
09/03/2011 à 21:06:22
Spitfire 95
Membre
Sais pas, legtux mouru, et ton autre lien aussi ^^

Lolo44
09/03/2011 à 21:24:00
Lolo44
Membre
Ah lala ! Dot TK de m**** , je change , vas sur : koopalegends.olympe-network.com
mais tous est blanc je retransfere mes fichiers...

Spitfire 95
09/03/2011 à 21:45:40
Spitfire 95
Membre

<div class="menu_droit_text" style="visibility:<?echo $_COOKIE['NOM_DU_COOKIE'].';';if ($_COOKIE['NOM_DU_COOKIE']=='visible"){echo'display:block;';}else{echo 'display:none;';}?>">
 
Suis pas sûr. Et à adapter pour tous les menus.
je précise, je ne suis sûr pour aucun de mes codes x)

Lolo44
09/03/2011 à 22:00:58
Lolo44
Membre
Ok , merci , je teste ce soir ou demain et j'édite ce message pour te dire si ca marche ...

Lolo44
11/03/2011 à 18:15:40
Lolo44
Membre
Voici mon code : <div style="visibility:<?php echo $_COOKIE['menu_twitter'].';';
if ($_COOKIE['menu_twitter']=='visible'){echo'display:block;';}else{echo 'display:none;'}?> class="menu_droit_text"><a OnClick="Affiche_OBJ('twitter');"><img style="float:left;margin-bottom:5px;margin-top:5px;margin-left:2px;" src="http://koopalegends.olympe-network.com/ico_mac_plus.png" alt="menu de droite"></a><a OnClick="Masque_OBJ('twitter');"><img style="float:left;margin-bottom:5px;margin-top:5px;margin-left:2px;" src="http://koopalegends.olympe-network.com/ico_mac_moins.png" alt="moins"></a><div class="menu_droit_titre">Twitter</div>
</div><br>
Mais comment fixer le cookie menu_twitter par exemple?

Spitfire 95
11/03/2011 à 18:41:40
Spitfire 95
Membre
Avec function Affiche_OBJ() ou Masque_OBJ(). Quand la fonction est appellée, elle génère le cookie.

Lolo44
11/03/2011 à 19:27:02
Lolo44
Membre
J'ai mis ca : <div style="<?php echo $_COOKIE['menu_twitter'].';';
if ($_COOKIE['menu_twitter']=='visible') echo 'display:block;';
else echo 'display:none;';
?>" class="menu_droit_text"><a OnClick="Affiche_OBJ('twitter');"><img style="float:left;margin-bottom:5px;margin-top:5px;margin-left:2px;" src="http://koopalegends.olympe-network.com/ico_mac_plus.png" alt="menu de droite"></a><a OnClick="<?php setcookie("menu_twitter", "display:none;", time()+3600*24*360);?>;Masque_OBJ('twitter');"><img style="float:left;margin-bottom:5px;margin-top:5px;margin-left:2px;" src="http://koopalegends.olympe-network.com/ico_mac_moins.png" alt="moins"></a><div class="menu_droit_titre">Twitter</div>
</div>
Mais ca n'affiche pas le bouton qui cache!

Spitfire 95
11/03/2011 à 19:38:41
Spitfire 95
Membre
Ça va pas de toute façon. La fonction est exécutée au chargement de la page, même avant. PHP créera le cookie, que tu clique ou non. Pour cela que je parlais d'un fichier différent pour traiter les cookies. Donc si tu veux faire des cookies en PHP, faut faire un autre fichier comme je le proposais plus haut.

Lolo44
11/03/2011 à 19:46:52
Lolo44
Membre
Pas de problèmes, mais il me faut un code ....

Lolo44
15/03/2011 à 17:57:20
Lolo44
Membre
Alors ?

Lolo44
16/03/2011 à 15:10:50
Lolo44
Membre
Je ferrais peut etre mieux de m'adresser a un autre forum...

Pages: 1