Cookies avec expand/collapse sur un div

Signaler
Messages postés
95
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
30 octobre 2013
-
Messages postés
95
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
30 octobre 2013
-
Salut à tous,

j'ai créé un tableau avec 2 lignes: celle du haut qui est fixe, et celle du bas, fermée, qui s'ouvre lorsqu'on clique sur une image, utilisant tout simplement une méthode de expand/collapse sur un div.
J'ai laissé un exemple sur mon forum (http://omhistorique.free.fr/forOM/) en bas de page là où il y a écrit "aaa" pour que vous puissiez voir en entendant que mon problème soit résolu.

A partir de là j'ai donc 2 problèmes:
- La ligne du dessous est d'origine fermé et je souhaiterai connaitre le moyen de la laisser ouverte par défaut (en suspens car je ne sais pas encore si je vais le faire réellement);
- Si j'agrandi cette ligne du bas et que j'actualise ma page, cette ligne se referme automatiquement, sans aucune utilisation de cookies.

Pour ce 2è problème je compte par conséquent utiliser les cookies mais problème: si je commence à me dépatouiller en php et css, le javascript n'est pour moi à l'heure actuelle qu'un langage incompréhensible (du moins j'arrive parfois à le lire... bref) et donc je fais appel à vous car j'imagine que les mecs doivent être aussi sympa ici que sur phpcs.
N'arrivant pas déjà à utiliser un cookies pour une date ou autre texte, pour un expand/collapse c'est pire encore...

Voici donc le code que j'ai utilisé por réalise mon expand/collapse:

<script type= "text/javascript">
appear=function(id) {
    var d = document.getElementById(id);
    if (d.style.display!="none") {
        d.style.display ="none";
    } else {
        d.style.display ="";
    }
}
</script>

   
        [ javascript:appear('q3') " alt ="Collapse" id="img_<?php echo $cat_count?>" />]
        aaa
   

   

id="q3" style="display: none">... ... ...

pour faire simple pour ceux qui ne gèrent pas bien le html, après le javascript j'ai pu tout aussi bien mettre ceci:

   
[javascript:appear('q3') A quoi répondra la communauté ?]

   

... ... ...

J'ai trouvé ce site (http://www.actulab.com/ecrire-les-cookies.php) qui a l'air clair pour quelqu'un qui connait le javascript, donc si ça peut aider....
Je vos remercie d'avance car là je galère bien..

11 réponses

Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
Bonjour,

    je suis sûr de ne pas répondre à la question...

>>connaitre le moyen de la laisser ouverte par défaut
   


id= "q3" style="display:inline">... ... ...



>>n'arrivant pas déjà à utiliser un cookies

    un cookie, c'est du texte, "mémorisé" pour un utilisateur d'un site. point barre.
    ( après, on y met ce qu'on veut dans ce string ! )

    c'est en fait tout simple ( hélas, la plupart des docs ajoute la gestion
       de données dans ce string, ce qui complique l'histoire )

    créer un cookie pour ~1 an :
        var da = new Date();
        var d=new Date(Date.parse(da)+(1000*60*60*24*365));
        document.cookie=" données du cookies " + ";expires =" + d.toGMTString() + ";" ;

    utiliser les données du cookie :
        var cook=document.cookie;

    mais tu ne devrais pas en avoir besoin, si j'ai compris le problème
       ( et rien n'est moins sûr )


  
<hr />
Cordialement                Bul     [mon Site]     [M'écrire]
<hr />
Messages postés
95
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
30 octobre 2013

Pour mon premier problème merci beaucoup ça marche: c'était en vrai tout bête, je suis même certain que c'est un des 1ers trucs qu'on aprend en javascript...

Pour le 2è problème, dans mon cas, où puis-je trouver les "données du cookies"? Est-ce que je dois la configurer ou est-elle sous mes yeux?
Justement comme tu as l'air de vouloir le dire, ce n'est pas du texte que je veux mémoriser mais un "état", si j'ai bien compris c'est le display que je veux mémoriser.
Puis por ton code, dois-je le mettre au milieu de mon script ou créer un fichier genre "cookies.js"?
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
>>un des 1ers trucs qu'on aprend en javascript...
    en html. pas de javascript sur ce coup là.     ;-)
>>
    y'a pas d'quoi !





    les données du cookie ?    c'est ce que tu veux y mettre.

>>ce n'est pas du texte que je veux mémoriser mais un "état",
    certes, mais le cookie c'est du string.

    alors, ch'tit exemple :

       document.cookie=
            document.getElementById(q3).style.display + ";expires=" + d.toGMTString() + ";" ;

    et quand tu "relira", plus tard,
            document.cookie sera égal à "none" ou "inline".
   

<hr />
Cordialement                Bul     [mon Site]     [M'écrire]
<hr />
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
il faut lire ...
document.getElementById('q3')... bien entendu



<hr />



Cordialement                Bul         [mon Site]     [M'écrire]



<hr />
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
je n'ai pas répondu à :

>> dois-je le mettre au milieu de mon script ou créer un fichier genre "cookies.js"?

    comme tu le sens.
    tu le mets là où il faut qu'il soit.

    le mettre dans un .js ne change rien ( sauf la lisibilité du html
       qui est nettement meilleur, la maintenance probablement aussi ... )
       un .js c'est le copié/collé du contenu du fichier .js là où
          est mis le <Script     Type="Text/JavaScript"
                                            Src="chemin et nom du .js"></Script>
          ni plus, ni moins.

<hr />


Cordialement                Bul         [mon Site]     [M'écrire]



<hr />
Messages postés
95
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
30 octobre 2013

En réalité le javascript n'a pas l'air plus complexe que le php expliqué comme tu le fais, ça a l'air simplment différent...
J'ai fait ce que tu m'as dit mais ça ne marche pas... Tout d'abord j'ai mis le code que tu m'as donné "avant" le mien mais du coup le collapse ne se faisait plus. J'ai essayé de le mettre "après" mon script: là çà le collapse marche mais pas ton script. Voici ce que j'ai mis:

 <script type="text/javascript">

        
// script pour le expand-collapse

appear=function(id) {
    var d = document.getElementById(id);
    if (d.style.display!="none") {
        d.style.display ="none";
    } else {
        d.style.display ="";
    }
}

// script pour les cookies

  var da = new Date();
        var d=new Date(Date.parse(da)+(1000*60*60*24*365));
        document.cookie= document.getElementById(q3).style.display + ";expires=" + d.toGMTString() + ";" ;

        var cook=document.cookie;
</script>
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
tel que tu fais là, la séquence pour les cookies est exécutée
    lors de l'interprétation de la page htm
    faut pas oublier : le navigateur interpréte les lignes html/javascript
    ( saus les fonctions ! ) dans l'ordre, bêtement de la 1ère à la dernière.

    le cookie est bien créé ( tu peux vérifier ),
        la variable cook le contient d'ailleurs.

    mais tu n'en fais rien. et surtout tu ne mémorise l'état du div qu'une fois,
       au chargement de la page...

    crée une fonction

function memCookie()
{ var da = new Date();
  var d=new Date(Date.parse(da)+(1000*60*60*24*365));
  document.cookie=
      document.getElementById(q3).style.display + ";expires=" + d.toGMTString() + ";" ;


}


tu l'appelles lorsque c'est nécessaire ( tu sauras ! )
lorsque tu as besoin de réutiliser le contenu
( dans une autre page, et/ou 3 jours plus tard
    après extinction du micro...  ) : document.cookie est toujours bon.

>>javascript n'a pas l'air plus complexe que le php
    ben non. c'est un langage.
    ( avec une syntaxe que je n'aime pas trop, mais comme php,c,c++... )

>>ça a l'air simplment différent...
    ben oui. pas plus.
    pas sur la même machine, et ne se déroule pas en même temps. c'est tout.




<hr />



Cordialement                Bul     [mon Site]     [M'écrire]



<hr />
Messages postés
95
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
30 octobre 2013

ben je ne trouve pas...
Pourtant avec on explication simple ça parait logique et ça devrait marcher mais j'ai essayé tout un tas de trucs et ça veut pas. Peut-être que je n'ai pas trouvé où mettre comme  var cook=document.cookie; tu l'attendait de moi... 
Messages postés
13616
Date d'inscription
jeudi 13 février 2003
Statut
Membre
Dernière intervention
15 octobre 2013
32
je pense surtout que tu n'as pas tout à fait compris les cookies...

un cookie c'est du texte, mémorisé sur le micro d'un utilisateur,
    valable pour un site ( un domaine ).
ce cookie est mémorisé par l'instruction document.cookie="ce qu'on veut";
    c'est un fichier texte ( dans %userprofile%\cookies de mémoire )

on le réutilise... quand c'est nécessaire
    quand tu en as besoin ! je ne peux pas t'en dire plus !
    c'est finalement une variable qui conserve sa valeur même
    si on ferme le navigateur, le micro...
avec document.cookie ( c'est le contenu qu'on y a mis, "ce qu'on veut", ici )

ce fichier sera détruit manuellement ou lorsque la date
    d'expiration sera atteinte.

on peut couper le micro complètement, le fichier continue à exister.

>>je n'ai pas trouvé où mettre comme 
var cook=document.cookie;
    tu le met, là où tu dois réutiliser ce que tu as mémorisé auparavant !








<hr />



Cordialement                Bul     [mon Site]     [M'écrire]



<hr />





Généralement, c'est absurde de généraliser.
Messages postés
95
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
30 octobre 2013

On m'a fait une remarque pertinante sur un autre forum que je cite ici afin d'aider les personnes désirantes de résoudre on problème:

"""
En fait, memCookie() te sert actuellement à stocker un cookie, mais tu ne vérifies pas la valeur du cookie avant d'expand ou de collapse ton tableau.
Il faudrait que tu fasses une fonction qui récupère le cookie au démarrage de la page, si le cookie est égal à "non", il ne faut pas l'afficher, sinon, il faut l'afficher.
"""

j'ai trouvé 2ou3 script utilisant le collapse avec des cookies sur le net mais aucun ne marche avec mon cas. Il faudrait au besoin les trafiquer... Si jamais la remarque ci-dessus n'aide pas je peux toujours fournir les scripts que j'ai trouvé.
Pour mémoire, en récapitulatif, voici mes codes:

- en html:

   

           
          [javascript:appear('q7') " alt= "Collapse" id="img_<?php echo $cat_count?>" />]
        [javascript:appear('q7') essai q7]
       

       

        aaa
       



- sur le .js:

// script pour le expand-collapse:

appear =function(id) {
    var d = document.getElementById(id);
    if (d.style.display!="none") {
        d.style.display ="none";
    } else {
        d.style.display ="";
    }
}

// script pour les cookies:
 
function memCookie()
{ var da = new Date();
  var d=new Date(Date.parse(da)+(1000*60*60*24*365));
  document.cookie=
      document.getElementById(q3).style.display + ";expires=" + d.toGMTString() + ";" ;
}
 var cook=document.cookie;

- Mon problème:
Les cookies ne marches pas (visiblement un problème de lecture...)

Merci d'avance...
Messages postés
95
Date d'inscription
lundi 20 octobre 2003
Statut
Membre
Dernière intervention
30 octobre 2013

Au passage, pour ceux qui comme on m'a appris à l'école ont une mémoire visuelle ou qui ont besoin d'un apperçu pour être aider, voici donc ce que ça donne pour l'instant: