Sfimx Posted April 25, 2007 Report Share Posted April 25, 2007 Je suis en train de travailler sur un menu. Et au clique, un fond CSS doit changer. J'ai donc pendu ça : <script type="text/javascript" language="javascript"> function bottom_image() { var id = document.getElementById('menu_bottom').style.backgroundImage; if(id != 'url(img/menu_bottom_o.png)') { id = 'url(img/menu_bottom_o.png)'; } else { id = 'url(img/menu_bottom.png)'; } } </script> Pour info, normalement la valeur par défaut est img/menu_bottom.png, au clique elle devrait passer au img/menu_bottom_o.png et si je recliquerais elle repasserait à la valeur par défaut. Le truc, c'est qu'il ne se passe rien au clique et aussi le console CSS de Firefox ne réagit pas. Alors par hasard, jme suis dit, une bonne âme plantant ici pourrait éventuellement avoir la réponse... Sfimx Quote Link to comment Share on other sites More sharing options...
Xr Posted April 26, 2007 Report Share Posted April 26, 2007 T'as essayé un bon vieux alert("'"+id+"'"); ? Quote Link to comment Share on other sites More sharing options...
Sfimx Posted April 26, 2007 Report Share Posted April 26, 2007 Rien ne s'affiche, et pourtant dans ma feuille de style CSS il y a bien un valeure à background-image. Javascript serait-il incapable d'aller la chercher tout seul, comme un grand ? Alors pour combler à cette question j'ai ajouté du CSS dans la page : <style type="text/css"> #menu_bottom { background-image:url(img/menu_bottom.png); } </style> Et il n'a rien voulu savoir... Sfimx Quote Link to comment Share on other sites More sharing options...
Trinita Posted July 31, 2007 Report Share Posted July 31, 2007 Salut les gens, J'aimerais créer une page php qui permettrait d'afficher dynamiquement les images stockées dans un repertoire. "Dynamiquement" c'est à dire à chaque fois que je rajoute une image dans le repertoire, cette dernière s'affiche automatiquement sur la page php. Des idées ? Trinita vieille buse en php. Quote Link to comment Share on other sites More sharing options...
Sfimx Posted July 31, 2007 Report Share Posted July 31, 2007 (edited) Salut les gens, J'aimerais créer une page php qui permettrait d'afficher dynamiquement les images stockées dans un repertoire. "Dynamiquement" c'est à dire à chaque fois que je rajoute une image dans le repertoire, cette dernière s'affiche automatiquement sur la page php. Des idées ? Trinita vieille buse en php. Une boucle, toute droit sortie de MauriceCMS : // ouvre le dossier de ton choix $dossier = opendir ("maurice/chose"); // création de la boucle while ($fichier = readdir ($dossier)) { // suppression des fichiers .. et . (qui permette de remonter un répertoire) if ($fichier != "." && $fichier != "..") { // Code HTML de ton choix pour la boucle, $fichier donne le nom du fichier avec l'extension ?> <img src="<? echo $fichier; ?>" alt="<? echo $fichier; ?">"><br /> <? } } // fermeture du dossier closedir ($dossier); Ceci listera tout simplement toutes les images. Tu peux jouer avec $fichier en proposant par exemple un lien dans un <input> pour pouvoir la mettre dans un post . Sinon, si tu veux gérer des fichiers facilement, utilise Lussumo Filebrowser . Sfimx Edited July 31, 2007 by Sfimx Quote Link to comment Share on other sites More sharing options...
GrandMiam Posted July 31, 2007 Report Share Posted July 31, 2007 Une boucle, toute droit sortie de MauriceCMS : // ouvre le dossier de ton choix $dossier = opendir ("maurice/chose"); // création de la boucle while ($fichier = readdir ($dossier)) { // suppression des fichiers .. et . (qui permette de remonter un répertoire) if ($fichier != "." && $fichier != "..") { // Code HTML de ton choix pour la boucle, $fichier donne le nom du fichier avec l'extension ?> <img src="<? echo $fichier; ?>" alt="<? echo $fichier; ?">"><br /> <? } } // fermeture du dossier closedir ($dossier); Ceci listera tout simplement toutes les images. Tu peux jouer avec $fichier en proposant par exemple un lien dans un <input> pour pouvoir la mettre dans un post . Sinon, si tu veux gérer des fichiers facilement, utilise Lussumo Filebrowser . Sfimx Il faut vérifier les valeurs de retour de tout ça ! Quote Link to comment Share on other sites More sharing options...
DeadPixel Posted July 31, 2007 Report Share Posted July 31, 2007 (edited) Plus simple aussi, avec glob() :On crée une variable $fichiers et on lui attribue la valeur de retour de glob('*.jpg'), qui est un array avec tous les fichiers remplissant le masque *.jpg (* étant un joker, donc tous les fichiers qui finissent par .jpg).On fait un foreach, pour chaque clé de $fichiers qui sera affichée en tant que $file qui est le fichier en cours.Dedans, on affiche le texte en utilisant $file.(non j'arrive pas à expliquer plus clairement >_<). En gros ça donne : <?php $fichiers = glob('*.jpg'); foreach ($fichiers as $file) { echo '<a href="' . $file . '">' . $file . '</a>'; } ?> va afficher quelque chose du genre :fichier1.jpgfichier2.jpgAprès libre à toi de changer la ligne, tu peux utiliser toutes les fonctions PHP que tu veux sur $file pour mettre des détails, par exemple tu peux mettre : echo '<a href="' . urlencode($file) . '">' . $file . '</a> (' . round(filesize($file) / 1024,2) . ' kb, modifié le ' . date('d/m/y \à H:i', filectime($file)) . ')'; pour afficher fichier1.jpg (138.4 kb, modifié le 31/07/07 à 13:37)Quand même, tu aurais pu un peu chercher sur Google. Edit : j'ai oublié de préciser le petit inconvénient de cette solution : tu ne peux lister qu'un seul type de fichier (ici juste jpg). Edited July 31, 2007 by DeadPixel Quote Link to comment Share on other sites More sharing options...
Monsieur Banane Posted August 1, 2007 Report Share Posted August 1, 2007 Edit : j'ai oublié de préciser le petit inconvénient de cette solution : tu ne peux lister qu'un seul type de fichier (ici juste jpg). Je ne connaissais pas, mais logiquement, en mettant juste glob('*'); , ou en jouant avec les expression régulières (pas étendues ici apparemment). Le probleme du glob(*), c'est qu'il va essayer d'ouvir . et .. ! Quote Link to comment Share on other sites More sharing options...
Trinita Posted August 1, 2007 Report Share Posted August 1, 2007 Plus simple aussi, avec glob() :On crée une variable $fichiers et on lui attribue la valeur de retour de glob('*.jpg'), qui est un array avec tous les fichiers remplissant le masque *.jpg (* étant un joker, donc tous les fichiers qui finissent par .jpg).On fait un foreach, pour chaque clé de $fichiers qui sera affichée en tant que $file qui est le fichier en cours.Dedans, on affiche le texte en utilisant $file.(non j'arrive pas à expliquer plus clairement >_<). En gros ça donne : <?php $fichiers = glob('*.jpg'); foreach ($fichiers as $file) { echo '<a href="' . $file . '">' . $file . '</a>'; } ?> va afficher quelque chose du genre :fichier1.jpgfichier2.jpgAprès libre à toi de changer la ligne, tu peux utiliser toutes les fonctions PHP que tu veux sur $file pour mettre des détails, par exemple tu peux mettre : echo '<a href="' . urlencode($file) . '">' . $file . '</a> (' . round(filesize($file) / 1024,2) . ' kb, modifié le ' . date('d/m/y \à H:i', filectime($file)) . ')'; pour afficher fichier1.jpg (138.4 kb, modifié le 31/07/07 à 13:37)Quand même, tu aurais pu un peu chercher sur Google. Edit : j'ai oublié de préciser le petit inconvénient de cette solution : tu ne peux lister qu'un seul type de fichier (ici juste jpg). Merci à Sfimx et DeadPixel PS à DeadPixel : ouais c'est vrai j'aurais dû cherché sur google, le problème c'est que je dois gérer trop de trucs en même temps que je ne connais pas (donc faire des recherches sur sites), et j'ai pas eu l'idée de googeliser pour cette demande. Quote Link to comment Share on other sites More sharing options...
Xr Posted August 1, 2007 Report Share Posted August 1, 2007 Il faut vérifier les valeurs de retour de tout ça !Boh, c'est du php et les erreurs sont sans doute fatales donc tu mets des gros "or die('plantu')" derrière les deux fonctions d'ouverture et de fermeture et c'est bon (encore que si tu sais pas fermer, tu sais rien faire donc ça vaut sans doute pas la peine de planter, un warning suffirait). Je ne connaissais pas, mais logiquement, en mettant juste glob('*'); , ou en jouant avec les expression régulières (pas étendues ici apparemment). Le probleme du glob(*), c'est qu'il va essayer d'ouvir . et .. ! Normalement, '^[^\.].*\.(png|gif|jpg)' devrait virer ., .. et tous les fichiers cachés. Mais c'est une regex, pas de la syntaxe simple et je sais pas si glob prend ça. Edit: bah en fait on dirait pas que glob accepte les expressions régulières... Quote Link to comment Share on other sites More sharing options...
Monsieur Banane Posted August 1, 2007 Report Share Posted August 1, 2007 Il accepte les expressions régulieres simples, mais pas completement -le début ^ et la fin $ sont implicites -le + et le {x,y} sont pas digérés -le | non plus en gros, pas si terrible cette fonction, rien ne vau un bon if (eregi(".(jpg|gif|png)$", $file) mais sinon, avec glob(), j'en suis arrivé à glob('*.[pgj][nip][gf]') qui marche comme on veut Quote Link to comment Share on other sites More sharing options...
DeadPixel Posted August 21, 2007 Report Share Posted August 21, 2007 J'ai une pitite question... j'ai voulu faire un lien qui fait un "toggle", en affichant ou cachant un certain div quand on clique dessus. Le code JS : function togglediv(iddiv) { var elem = document.getElementById(iddiv); // on récupère l'objet du div à cacher/afficher if(elem.style.display == 'none') elem.style.display = 'block'; //s'il est caché, on l'affiche else elem.style.display = 'none'; //s'il est affiché, on le cache } Et le HTML : <a href="connexion.html" onclick="togglediv('connexion'); return false;">Connexion</a> <div id="connexion" style="display:none">...</div> Donc en gros, le lien pointe sur connexion.html (donc pour ceux qui n'ont pas Javascript), et l'attribut onclick réagit pour la fonction (avec le paramètre iddiv = connexion) puis retourne false, afin d'annuler le comportement du href (la page ne changera donc pas pour ceux qui ont JS d'activé). Jusque là, tout marche à peu près : le problème, c'est que dès le premier chargement de la page, il faut cliquer deux fois sur le lien pour que le div s'affiche, alors qu'un seul clic devrait suffire ; une fois qu'on a cliqué deux fois dessus, tout marche normalement, un clic pour l'afficher et un autre pour le cacher. Je soupçonne largement le display:none, qui cache le div dès le chargement mais Javascript ne semble pas l'interpréter de cette manière, comme s'il était déjà en display:block dès le début (d'où le double clic). Une idée pour régler ça ? C'est pas très ergonomique et c'est difficilement remplaçable ("merci de cliquer deux fois sur le lien pour vous connecter, merci" ^^) Quote Link to comment Share on other sites More sharing options...
Sfimx Posted August 21, 2007 Report Share Posted August 21, 2007 L'utilisation d'une classe CSS avec la propriété display:none; et un JS très simple : http://findel.free.fr/blog/post/2004/09/30...asquer-un-block. Sfimx Quote Link to comment Share on other sites More sharing options...
Xr Posted August 22, 2007 Report Share Posted August 22, 2007 Oubliez les anims à la main : http://jquery.com/ Par contre c'est pas pratique si vous utilisez table-cell plutôt que block pour vos display (mais bon, IE6 reconnaît pas table-cell) Quote Link to comment Share on other sites More sharing options...
DeadPixel Posted August 22, 2007 Report Share Posted August 22, 2007 Oubliez les anims à la main : http://jquery.com/ Par contre c'est pas pratique si vous utilisez table-cell plutôt que block pour vos display (mais bon, IE6 reconnaît pas table-cell) Ouais mais bon, c'est moyen de charger toute une librairie JS alors qu'il n'y a qu'un seul toggle sur la page, et qui en plus n'est utilisé que par les visiteurs (vu que c'est le module de connexion). Quote Link to comment Share on other sites More sharing options...
Monsieur Banane Posted August 22, 2007 Report Share Posted August 22, 2007 le problème, c'est que dès le premier chargement de la page, il faut cliquer deux fois sur le lien pour que le div s'affiche, alors qu'un seul clic devrait suffire ; une fois qu'on a cliqué deux fois dessus, tout marche normalement, un clic pour l'afficher et un autre pour le cacher. Je soupçonne largement le display:none, qui cache le div dès le chargement mais Javascript ne semble pas l'interpréter de cette manière, comme s'il était déjà en display:block dès le début (d'où le double clic). Une idée pour régler ça ? C'est pas très ergonomique et c'est difficilement remplaçable ("merci de cliquer deux fois sur le lien pour vous connecter, merci" ^^) C'est que tu a mit la propriété display en feuille css ou entre <style> Faut le mettre en ligne : <div id="connexion" style="display:none"> Quote Link to comment Share on other sites More sharing options...
DeadPixel Posted August 22, 2007 Report Share Posted August 22, 2007 C'est que tu a mit la propriété display en feuille css ou entre <style> Faut le mettre en ligne : <div id="connexion" style="display:none"> Je déteste les gens logiques, ils ont toujours raison. Merci beaucoup Quote Link to comment Share on other sites More sharing options...
Xr Posted August 23, 2007 Report Share Posted August 23, 2007 Ouais mais bon, c'est moyen de charger toute une librairie JS alors qu'il n'y a qu'un seul toggle sur la page, et qui en plus n'est utilisé que par les visiteurs (vu que c'est le module de connexion).jquery-1.1.3.1.pack.js 21.1 KB Je parie que le logo de ton site est plus gros que ça Edit: et s/librairie/bibliothèque/ Quote Link to comment Share on other sites More sharing options...
DeadPixel Posted August 23, 2007 Report Share Posted August 23, 2007 En effet, mais mon unique fonction fait 182 octets, donc même à 21 Ko près je m'en tamponne un peu Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.