Petit problème sous Firefox

Eléphanteau du PHP | 19 Messages

05 mai 2005, 01:21

Salut à tous,

voilà, j'ai un petit pb avec mon site et je voudrais savoir si c'est juste moi ou si quelqu'un d'autre voit le meme effet!

Je viens de passer mon site en compatible CSS et XHTML.

Le problème suivant ne se passe qu'avec firefox, pas avec IE. Il semblerait que ce soit dû à la présence d'image car que je les enleve, le pb disparait.

Pour voir le problème, allez ici:

http://www.afsurrey.org/index.php?lang= ... =activperm

Une fois la page chargée, faites plusieurs fois des refresh. Chez moi, des que je fais un refresh, j'ai une espece de collone avec les images! C'est comme si il voulait charger les images du haut de l'ecran et finallement se ravisait pour les mettre à leur place. Ca fait une sorte de saccade si vous voulez.

Je sais vraiment pas quoi faire!

C'est une page html avec du css

Merci!

Fred

Mammouth du PHP | 19672 Messages

05 mai 2005, 08:29

La première chose que j'ai fait en ouvrant la page, c'est d'afficher la source: ça m'a pris 5 seconde pour voir que la page est dans deux balises <html> imbriquées et deux minute de plus pour constater qu'en fait il y en a 5 dont un seul avec <!DOCTYPE>.

Je te signale que pour être à tout le mons conforme W3C à défaut d'être valide, une page html doit comprter une balise <!DOCTYPE> correspondant à une DTD particulière.

Le problème vient probablement de ta programmation PHP au moment de la génération de la page, tu as un include quelque part qui ajoute des fichiers qui sont des pages complètes
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

05 mai 2005, 18:24

Salut!

Merci de cette reponse rapide.

Oui en effet les pages chargées par le include (en réalité c'est un menu mysql qui reoriente le visituer selon ses choix) sont des pages completes.

Si je comprends bien, il faudrait que les pages chargées ne le soient pas? Si c'est le cas, je ne suis pas trop.

La partie php est uniquement structurelle: j'ai une page qui me gere l'affichage en recuperant les variable du menu, ss menu et langues, interroge mysql qui verifie si l'info est valide. Si c'est la cas, alors la page en question va charger le fichier html correspondant.

Ainsi ma page php ne contient code htlm, c'est de la pure "programmation". A ce titre, comment alors charger des pages html sans entete? (c'est ca que tu suggerais?)

En plus, du fait de cela je viens de me rendre compte que tu ne vois pas le bon code source! Du moins pas celui de la page. Voila un lien direct:

http://www.afsurrey.org/Activites/ActivPerm.html

Au fait, est ce que tu as vu ce fameux "effet" sous firefox? Tu veras, si ca te le fait, tu te rendra compte que la page html separée ne le fait pas!

Maintenant, en regardant de plus près, je viens de voir ce que tu dis au niveau des <html> imbriqués. Je ne pensais pas qu'il l;e chargerait. Je viens d,essayer de virer tous ces extra (y en avait dans mes fichiers php) mais malheureusement, après ca, ca marche plus. C'est pas parfait sur le site mais je vais d'abord essayer de fixer le problème en local avant de changer sur le site.

Est ce que tu aurais un site avec de l'info sur ces fameux <DOCTYPE> ?

Moi j'avais mis ca:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

c'est pas bon?

merci de ton aide, c'est grandement apprecié!

Fred

Mammouth du PHP | 19672 Messages

05 mai 2005, 18:40

Je te suggère une visite ==> ICI
Tu vas y trouver comment faire des includes qui vont te faire voir la construction de pages dynamiques d'un autre oeil ;)

Pour le doctype, c'est bon, mais il doit être en première ligne, pas à ligne 150 ou 200 de la page ;)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

05 mai 2005, 18:52

Merci mille fois!

Je vais regarder ca de plus pret! je suis entrain de virer mes <html> qui trainent. Je connais cette page et je m'en était servi justement pour lhistoire de mysql et des menus. mais a force de modifier, le coté des pages complete m'etait sorti de l'esprit!

Une petite question cependant: si je prend mon bloc de news, ce dernier est dans un repertoire /news/.
Hors mon fichier css est à la racine! partant de là, si je ne déclare pas la ribanbelle dans cette page, alors il ne trouve pas le css!

Est il possible d'utiliser plusieurs fois cette balise?
<link href="template.css" rel="stylesheet" type="text/css" />

Si non, est ce que tu vois une solution?

Je te tiens au courant!

Fred

Mammouth du PHP | 19672 Messages

05 mai 2005, 19:18

Tu es en train de te diriger vers l'avenir des pages web : le XHTML et les feuilles de style CSS externes.

Crée-toi un répertoire "styles" et mets-y tes CSS, puis dans l'en-tête de tes pages, tu mettras un <link>

bon code :)
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

05 mai 2005, 19:46

Oui c'est ca: je n'ai qu'une seule feuille de style (j'ai trouvé ca plus simple que 50 fichiers css!) que jusqu'a présent j'appelais via mon <head>.

Mais en le virant, ben c'est un peu space. Ca à l'air de marcher malgré tout donc c'est ok.

Par contre, dans mon fichier header, j'avais le fameux bloc de javascript qui me permettait de faire defiler les news au lieu d'avoir un scroller. Depuis que j'ai viré mes <html> en trop, ben il marche plus!

J'essaye de voir mais c'est chaud ;)

Fred

Mammouth du PHP | 19672 Messages

05 mai 2005, 19:58

Même chose pour le JavaScript, tu le mets en externe <script type="text/javascript" src="./js/monscript.js"></script> l<a ou tu as besoin qu'il soit ou dans le head.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

05 mai 2005, 20:15

Oui c'est ce que je voulais faire au debut mais ca merdouille...

C'est un script qui permet de determiner une zone d'Affichage n'importe ou et d'utiliser deux gif pour faire un scrolling. Touche moi pourquoi, depuis que j'ai clarifier ces histoire de balises, il veut plus scroller!

Voila le code au cas ou tu verais un truc qui peche!

Si je lance mon fichier header.php separement, ca marche! On aurait dit que c'est le css qui le fait c*** mais pourtant c'est la même chose partout!

===============================================
[code]
<div class="newscontent">

<script type="text/javascript">
iens6=document.all||document.getElementById
ns4=document.layers
//specify speed of scroll (greater=faster)
var speed=2

if (iens6){
document.write('<div id="container" style="position:relative;width:500px;height:136px;overflow:hidden">')
document.write('<div id="content"
}
</script>

<ilayer name="nscontainer" width=500 height=136 clip="0,0,600,340">
<layer name="nscontent" width=500 height=136 visibility=hidden>

<!--INSERT CONTENT HERE-->
<? include("news/newsbox.php"); ?>
<!--END CONTENT-->

</layer>
</ilayer>

<script language="JavaScript1.2">
if (iens6)
document.write('</div></div>')
</script>

<script language="JavaScript1.2">
if (iens6){
var crossobj=document.getElementById? document.getElementById("content") : document.all.content
var contentheight=crossobj.offsetHeight
}
else if (ns4){
var crossobj=document.nscontainer.document.nscontent
var contentheight=crossobj.clip.height
}

function movedown(){
if (iens6&&parseInt(crossobj.style.top)>=(contentheight*(-1)+10))
crossobj.style.top=parseInt(crossobj.style.top)-speed+"px"
else if (ns4&&crossobj.top>=(contentheight*(-1)+10))
crossobj.top-=speed
movedownvar=setTimeout("movedown()",20)
}

function moveup(){
if (iens6&&parseInt(crossobj.style.top)<=0)
crossobj.style.top=parseInt(crossobj.style.top)+speed+"px"
else if (ns4&&crossobj.top<=0)
crossobj.top+=speed
moveupvar=setTimeout("moveup()",20)
}

function getcontent_height(){
if (iens6)
contentheight=crossobj.offsetHeight
else if (ns4)

document.nscontainer.document.nscontent.visibility="show"
}
window.onload=getcontent_height
</script>
</div>
[/code]

Mammouth du PHP | 19672 Messages

05 mai 2005, 20:28

Il en manque pas un bout là ??
if (iens6){
document.write('<div id="container" style="position:relative;width:500px;height:136px;overflow:hidden">')
document.write('<div id="content"
}
Dans le deuxième document.write...
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

05 mai 2005, 20:35

Oui, j'ai du l'effacer par mégarde en virant les tab dans mon fichier!

il fallait lire:

if (iens6){
document.write('<div id="container" style="position:relative;width:500px;height:136px;overflow:hidden">')
document.write('<div id="content" style="position:absolute;width:500px;left:0;top:5">')
}

Mais c'est quand même dingue ca! En rendant le truc à priori standard, ca merdouille!

Le pire, c'est que je vois pas d'òu ce peut venir!

Je prend le fichier header.php tt seul, ca fonctionne. Je prend mon fichier index.php et je vire tout sauf la partie qui include le header et ca marche plus!

Je pensais que ca aurait pu venir d'autre bloc ou codage d'autre blocs qui auraient pu causer un conflit mais même pas puisqu'il se charge pas!

Ca doit etre un truc bien con!

Fred

Mammouth du PHP | 19672 Messages

05 mai 2005, 20:42

Possible, j'essaye d'imaginer comment est organisée ta structure de fichiers, j'ai un peu de mal.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphanteau du PHP | 19 Messages

05 mai 2005, 21:06

Ok, je vais essayer de faire clair sans te noyer dans le code!

Le site demarre sur index.html avec un preloadeur qui charge les images. Après le chargement, il bascule sur index.php?lang=fr (car version anglaise à venir).

Ce fichier index.php contient plusieurs trucs. Entre autre il appelle le css comme tu me l'as suggéré (et uniquement lui)

Il include le fichier header.php

Il declare le bloc central (en dessous du header sur le site) qui est lui meme subdivisé en partie gauche et droite et ainsi de suite.

Le fichier header lui declare le menu en haut à gauche (via requete mysql pour verifier l'existence de la page et pour securiser) + le bloc de news qui est à droite.

Ce bloc de news est fait comme suit: tout est stocké dans une db mysql avec affichage par un "while" etc...

Etant donné que le bloc de news à une dimension fixe via le css (pour pas que ca nicke l'interface), il me fallait un script pour que la fenetre d'affichage du bloc de news soit fixe. C'est le fameux javascript!

Donc, pour plus de clarté, j'ai sauvegardé le code que je t'ai mis au dessus en trois fichier (en gros, chaque balise <script></script> est mis dans un fichier .js que je declare comme tu m'as dit.

ce qui donne:

Code : Tout sélectionner

<div class="news"> <div class="newscontent"> <script type="text/javascript" src="jspart01.js"></script> <ilayer name="nscontainer" width=500 height=136 clip="0,0,600,340"> <layer name="nscontent" width=500 height=136 visibility=hidden> <!--INSERT CONTENT HERE--> <? include("news/newsbox.php"); ?> <!--END CONTENT--> </layer> </ilayer> <script type="text/javascript" src="jspart02.js"></script> <script type="text/javascript" src="jspart03.js"></script> </div> <div class="newscursor"> <a href="#" onMouseover="moveup()" onMouseout="clearTimeout(moveupvar)"><img src="pics/up.gif" border=0></a> <a href="#" onMouseover="movedown()" onMouseout="clearTimeout(movedownvar)"><img src="pics/down.gif" border=0></a></div> </div>
La seule différence entre le site actuel et en local, c'est que j'ai corrigé le probleme des balises exedentaire (les <html> et <body> qui trainait car je les avait declaré dans tout mes fichiers html et php qui était include.

Depuis ca, le javascript fonctionne plus quand il est imbriqué dans le fichier index.php. En revanche, il marche tout seul, ce qui laisse penser que le script est bon!

Compte tenu que mon header inclus aussi le menu en haut à gauche, je me suis dit que c'etait peut etre ca le pb. Que neni! Quand je charge mon fichier header.php avec les balises de body et autres, le menu apparait sans pb (un peu decalé mais c'est normal) et le scroller marche.

Donc je me suis dit que j'alais juste include le heaper.php dans mon fichier index.php. Et la ca marche plus!

La seule différence entre seul et seul dans le index.php, c'est ma class container. Pourtant y a aucune reference à autoscroll ou autre connerie. Mais de toute facon, ca devrait rien avoir à faire avec ce pb logiquement!

J'espere que ca t'exlaire un peu plus!

Fred

Eléphanteau du PHP | 19 Messages

05 mai 2005, 21:16

Par contre, je viens de regarder entre local et online, meme si a priori mon fichier css est le meme, il semble que la boite en local soit plus large qu'online! Je viens d'essayer de raccourcir pour voir mais il semble que cela n'a aucun effet (positif du moins!)

Mammouth du PHP | 19672 Messages

05 mai 2005, 21:20

un peu dur à suivre, ça doit te générer un joyeux foutoir... :-k

Principe de la construction de page par inclusion de "briques": la PHP est un langage comme beaucoup d'autres qui lit et exécute des instruction dans l'ordre où elles sont écrites. Donc premièrement, si tu insères le CSS avant le Header, ton code va avoir un grave problème de structure. Ensuite, rien ne t'empèche d'avoir des includes à tiroir, je veux dire par là que ton header peut très bien avoir une ligne juste avant le </head> qui fait l'inclusion du CSS.... ce qui est idiot puisque tant qu'à utiliser un CSS externe, il est aussi bien là où il est et on met dans le header une balise <link> vers le CSS.

Passé ce stade, tu arrives à la balise <body> Le contenu sera inséré dans l'ordre de tes includes. Tu ne peux pas mettre ça au petit bonheur en pensant que ça va se reconstruire tout seul : un ordinateur est stupide, il fait les choses qu'on lui demande de la manière dont on les lui demande. Si on lui demande d'afficher dans un sens, il pose pas de question: si ton code est valide, il exécute, point final.

Tu devrais vraiment étudier les pseudos-frames PHP, tu économiseras un temps considérable.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe: