Jump to content

Un Post Pour Poser Des Quetions "sites" !


saoul cool

Recommended Posts

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

Link to comment
Share on other sites

  • Replies 393
  • Created
  • Last Reply

Top Posters In This Topic

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

Link to comment
Share on other sites

  • 3 months later...

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.

Link to comment
Share on other sites

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 by Sfimx
Link to comment
Share on other sites

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 !

Link to comment
Share on other sites

Plus simple aussi, avec glob() :

  1. 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).
  2. On fait un foreach, pour chaque clé de $fichiers qui sera affichée en tant que $file qui est le fichier en cours.
  3. 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 :

Aprè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

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 by DeadPixel
Link to comment
Share on other sites

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 .. !

Link to comment
Share on other sites

Plus simple aussi, avec glob() :
  1. 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).
  2. On fait un foreach, pour chaque clé de $fichiers qui sera affichée en tant que $file qui est le fichier en cours.
  3. 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 :

Aprè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

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.

Link to comment
Share on other sites

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...

Link to comment
Share on other sites

Il accepte les expressions régulieres simples, mais pas completement :D

-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

Link to comment
Share on other sites

  • 3 weeks later...

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" ^^)

Link to comment
Share on other sites

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).

Link to comment
Share on other sites

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">

Link to comment
Share on other sites

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 :o

 

Edit: et s/librairie/bibliothèque/

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...