28211 sujets

CSS et mise en forme, CSS3

Salut!

J'envisage de faire un include php de pages dynamiques en html/php/javascript.

Or, ayant lu et je pense compris le tutoriel de ce site concernant les include php, j'ai noté que dans ce qui est inclus, il ne doit pas y avoir de balise <head>.

Comment alors utiliser des scripts Javascript pour utiliser des effets dans mes pages, sachant qu'habituellement, je déclare mes scripts Javascript dans les en-têtes?

Est-ce correct de mettre toutes les fonctions Javascript que j'utilise dans mes pages web dans un fichier .js, auquel je fais référence dans les en-têtes de ma page HTML contenant les DIV? Je pense que cela risquerait d'alonger le temps de chargement inutilement (le .js contiendrait par exemple 50 fonctions et seulement 2 seraient utilisées). Est-ce la solution ou en existe-t-il une autre? Ou alors est ce que ce que j'essaie de faire n'est pas possible?

Merci de vos conseils avisés !
Salut Smiley cligne

oulaaalllaa, que de confusions Smiley smile

Alors, dans le tuto, il y a bien les balises <head>, tu as peut être mal vu/lu

Il est plus interessant de séparer totalement les scripts JS dans des fichiers séparés pour plus de souplesse d'utilisation... je me permet de te faire lire ce post que je viens d'écrire sur un autre topic, la flemme de réexpliquer (désolé Smiley langue ) http://forum.alsacreations.com/topic.php?fid=1&tid=5550#p48440

Et rien ne t'empeche de faire plusieurs fichiers JS pour différentes fonctions, mais j'imagine que certaines sont à utiliser ensemble etc

Et ne t'en fait pas, ton fichier JS n'atteindra (en principe Smiley langue ) pas des sommets en terme de poid !
Au pire si tu as des très grosses fonctions, tu les mets dans un fichier à part, ça en sera d'autant plus clair et tu n'appelles que ceux dont tu as besoin.
Modérateur
À moins de me tromper sur les intentions de Mathieu, Olivier, je crois que le problème c'est qu'avec les includes, avec la technique des pseudo-tu-sais-quoi, il ne sait pas comment lier le bon fichier js selon la page qui est incluse. Par exemple, il y a trois pages différentes qui peuvent être incluses. La première a besoin du fichier js abc.js, la deuxième page a besoin du fichier def.js, et la troisième ghi.js.

Un peu comme lorsqu'on veut changer les métas description et keywords pour chaque page incluse, avec la technique des pseudos-machins.

En fait, il n'a qu'à utiliser le switch également pour inclure le bon fichier js selon la page de contenu incluse.

En Coldfusion, par contre, il y a une belle fonction indiquant au serveur d'ajouter dynamiquement du code dans la balise head html, qu'on peut gentillement appeler n'importe où dans le code. N'est-ce pas merveilleux ? Smiley nananere
Modifié par Merkel (22 Jul 2005 - 03:03)
Je propose de ré-écrire le tuto des pseudo-tu-sais-quoi pour .Net et Coldfusion, en virant ce PHP qui complique vraiment trop les choses Smiley biggol
Est-ce que Laurent Denis a écrit :

Je me propose de ré-écrire le tuto des pseudo-tu-sais-quoi...

hé hé Smiley biggol

=> []
Modifié par Stephan (22 Jul 2005 - 06:06)
Laurent Denis a écrit :
Je propose de ré-écrire le tuto des pseudo-tu-sais-quoi pour .Net et Coldfusion, en virant ce PHP qui complique vraiment trop les choses Smiley biggol


Ce PHP qui simplifie tout et permet d'aller très loin dans la sélection des éléments que doit contenir une page !

Il est très possible (et facile !) de stocker les fonctions .js en base de donnée et d'appeler chacune en fonction de la page : reconstituer le .js en fonction de la page demandée.

Faut-il rappeler que php permet de gérer des phénomènes conditionnels ?

Et donc "include()" peut s'utiliser en réponse à la réunion de certaines conditions, comme toute autre fonction.

Il faudrait surtout se débarrasser de ce vocabulaire qui ne signifie rien de clair dans l'esprit de certaines gens : "faire un include".

De mon point de vue "on ne fait pas un include" mais on introduit dans un script, lorsque cela est nécessaire et s'avère pratique, un fragment de script dans un autre, ce qui évite le copier - coller, allège la présentation du script et met en commun ce qui peut être mis en commun.

Par exemple je travaille actuellement sur un générateur de planning en php.

J'ai créé un petit script qui contient uniquement des fonctions de conversion de timestamp en dates exprimées en clair et en français (je devrai traduire ce script en une ou deux autres langues).

PHP me permet, avec la fonction include(), d'appeler ce script dans les pages où il est utile : j'appellerai donc bientôt en fonction de la langue utilisée (en fait les données linguistiques seront probablement en base de donnée, ou dans un "switch()", et le script chargera les termes dans la langue voulue en fonction d'une variable correspondant à la langue, et qui correspondra à la langue principale déclarée par le navigateur du client (HTTP_ACCEPT_LANGUAGE)).

Et c'est php qui gèrera lui même cet aspect linguistique et définira quel est le lien à inscrire dans "include()"; .

Avec "include()" on introduit donc CE QUE L'ON VEUT, LA OU L'ON VEUT, et cela avec la forme que cela doit avoir (avec les balises "head" s'il s'agit d'introduire un en-tête de page, et sans ces balises dans les autres cas, et souvent sans aucune balise).

Quand les "faiseurs d'include" auront compris cela ils ne parleront plus de "faire un include" mais de gérer leurs scripts de façon rationnelle, pour plus d'efficacité et de clarté de lecture (car certains scripts peuvent devenir très touffus).

Et il faut bien se dire qu'un "include" en php c'est d'abord et avant tout :


<?php

Du code php

?>
Didju...

Pourquoi se casser la tête avec le PHP pour inclure des foutus script JS !!!

<script type="text/javascript" src="script.js"></script>

Qu'est ce qu'il y a de compliqué la dedans ?? ahh mais nan, c'est peut être pas assez select, faut se la péter avec les includes Smiley biggol

Franchement, je ne comprend pas le problème... et à mon avis, aucun rapport entre le problème et ces fichu pseudo bidule frame

Et inclure des scripts dans une base de donnée... hmm belle idée, certe c'est faisable, mais aucun interet, vraiment aucun.
Connexion à la base de donnée, temps d'accès, récupération du script qui va bien avec la requete qui va bien, insertion du script... Wwoowowo

Et le chercher direct sur le FTP en bon vieux HTML ça vout dit pas ??

Et je ne parle même pas des eventuelles modifications à apporter à un script...

Pourquoi pas les styles CSS dans une base de donnée inclues dans la page...

Parfois, je comprend pas cet art de se compliquer la vie... on dirait que c'est juste pour le fun Smiley langue

Allez, on reprend à zéro !
Mathieu, peux nous éclaircir par rapport à ton problème qu'on y voit plus clair.

Qu'est ce que tu veux faire (et pourquoi ?) ?
Modifié par Olivier (22 Jul 2005 - 11:19)
Laurent Denis a écrit :
Désolé, jcm, mon intervention hors-sujet était une blague un peu interne, . . . . .



Pas de problème !
Olivier a écrit :
. . . . . . .

Et inclure des scripts dans une base de donnée... hmm belle idée, certe c'est faisable, mais aucun interet, vraiment aucun.
Connexion à la base de donnée, temps d'accès, récupération du script qui va bien avec la requete qui va bien, insertion du script... Wwoowowo

. . . . . . .


Je ne sais pas si ce serait dans tous les cas dénué d'intérêt.

J'ai imaginé cela afin de résoudre le cas de scripts nombreux et volumineux si on les regroupe tous, et qui ne seraient utilisés que par fragments pour chaque page : un cas probablement très rare et qu'il faudrait étudier en plus de quelques secondes.

Cela dit PHP peut inscrire le lien que l'on souhaite là où l'on souhaite dans une page : un lien vers un .js par exemple.

Et quelle que soit la forme que prenne cette inscription, par une variable contenant le lien, par une variable assignant une valeur à un "include()"...

Mais là où je te suis à 150%, Olivier, c'est lorsque tu écris :

a écrit :
Parfois, je comprend pas cet art de se compliquer la vie... on dirait que c'est juste pour le fun
Olivier a écrit :
Didju...
Mathieu, peux nous éclaircir par rapport à ton problème qu'on y voit plus clair.

Qu'est ce que tu veux faire (et pourquoi ?) ?


Salut !

En fait tout ce que je veux, c'est avoir des pages construites avec des DIV et du CSS (jusque là pas de souci). Ces pages doivent avoir plusieurs "parties" : Menu latéral, contenu, ...

Je veux donc qu'en cliquant sur un lien dans le menu latéral, la page idoine s'affiche dans le DIV de contenu. Pas de souci non plus jusque la avec les Include PHP.

La question que je me posais était de savoir comment, via les include PHP, inclure des "bouts" de pages (càd sans <HTML>, <HEAD> et <BODY>) contenant du Javascript. En effet, si on n'a pas de <HEAD> dans cette page, comment déclarer les fonctions?

D'où ma question : est-ce correct si je rassemble toutes les fonctions javascript que j'utilise dans toutes mes pages dans un fichier .JS auquel je fais appel dans les headers de ma page globale? Ou alors existe-t-il des moyens de ne charger que les fonctions utiles (ca doit surement être possible!)?

Je pense avoir été plus clair que mon message d'hier soir, non?? Smiley smile

En tous cas, merci pour toutes vos réponses, ce forum est très agréable et regorge de contributeurs très compétents !
Mathieu a écrit :

Je veux donc qu'en cliquant sur un lien dans le menu latéral, la page idoine s'affiche dans le DIV de contenu. Pas de souci non plus jusque la avec les Include PHP.

<remarque méchante>
Quand tu comprendra que cette phrase ne décrit absolument pas ce qu'exécute la fonction include et que de ce fait elle n'a absolument aucune signification, tu n'aura plus aucune difficulté pour solutionner le problème que tu évoques.
</remarque>

bon je rédige la solution gentille et je reviens

++
Modifié par clb56 (22 Jul 2005 - 12:33)
Aïe Aïe Aïe !!! Smiley smile

Il y a de la confusion dans l'air.

Les pages incluses sont juste des équivalent automatisé par le langage côté serveur (ici PHP) d'un simple copié/collé.

Pour éviter de t'embrouiller et bien comprendre, fais ta page sans includes, fais ton truc en HTML brut, inclus tes scripts JavaScript dans <head> avec la méthode que je t'indiquais à base de <script type="text/javascript" src="script.js"></script>

Ca y est ?
Okay, donc maintenant, reprenons, avec tes includes, pour le JavaScript tu n'en aura pas besoin puisque tes fichiers sont appelés avec le HTML tout simplement, tu auras juste à eventuellement modifier le chemin vers les différents script en fonction de la page, aucun include.

En fonction de la page à afficher (je ne sais pas comment tu gères ça), tu modifies le chemin vers le fichier JS à utiliser.

Ou bien tu mets toutes tes fonctions dans un seul fichier et tu n'as plus de soucis. Mais là tout dépend de la longueur des scripts, du type etc

Tu n'a aucun besoin d'inclure avec un quelconque langage côté serveur tes scripts dans la page.
Le HTML est là pour ça et fonctionne très bien et sera plus efficace.
Dis toi que c'est exactement pareil que l'appel à une feuille de style CSS.

Enfin, dernier point, <div> et CSS, ça ne veut pas dire grand chose Smiley cligne , il y a bien d'autres balises que les <div>. Je suppose que tu dis ça pour raccourcir la chose, mais dans ce cas, il vaut mieux parler de mise en page CSS en oposition à la mise en page par tableaux.
Modifié par Olivier (22 Jul 2005 - 13:19)
OK, ca marche bien en rassemblant toutes mes fonctions dans un fichier scripts.js, que l'on inclut dans les en-tête de la page HTML contenant les DIV.

Je vais réflechir à une manière de n'inclure que les scripts nécéssaires dans l'en-tête de ma page, de façon à optimiser le chargement de celle-ci. Si quelqu'un a une idée, je suis preneur!

Merci beaucoup à vous tous en tous cas.

Mathieu
Mathieu a écrit :

Je vais réflechir à une manière de n'inclure que les scripts nécéssaires dans l'en-tête de ma page, de façon à optimiser le chargement de celle-ci. Si quelqu'un a une idée, je suis preneur!
Mathieu


d'une certaine manière j'ai déjà répondu à ta question.

version définitive en cours de rédaction (mais expliquer et désillusionner en même temps c'est pas si facile)
La perspective dans laquelle je répond est assez différente de celle d'Olivier puisque je suit ton souhait de n'associer tel fichier(s) JS qu'à une seule page (ou un seule type de page).

soit page.php

<html>
<head>
<title>La page en cours  [lol]  j'y reviendrai</title>
</head>
<body>
code+blabla1

+
<a href="?page=page2">

+
<div>
<?
if ($page=='page2') {include ('fichier_contenant_code+blabla2_pour_compléter_code+blabla1.inc');}
?>
</div>
</body>
</html>

Donc page2 (plus précisemment page.php?page2) sera :

<html>
<head>
<title>La page en cours</title>
</head>
<body>
code+blabla1

+
<a href="?page=page2">

+
<div>
code+blabla2
</div>
</body>
</html>

Evidemment rien ne nous empêche de faire

page.php

<html>
<head>
<title>La page en cours</title>
</head>
<body>
code+blabla1

+
<a href="?page=page2">

+
<div>
<?
if ($page=='page2') {include ('fichier_contenant_code+blabla2_pour_compléter_code+blabla1.inc');}
?>
</div>
<div>
<?
if ($page=='page2') {include ('fichier_contenant_code+blabla2bis_pour_compléter_code+blabla1.inc');}
?>
</div>
<div>
<?
if ($page=='page2') {include ('fichier_contenant_code+blabla2ter_pour_compléter_code+blabla1.inc');}
?>
</div>
</body>
</html>


auquel cas page2 (page.php?page2) serait :


<html>
<head>
<title>La page en cours</title>
</head>
<body>
code+blabla1

+
<a href="?page=page2">

+
<div>
code+blabla2
</div>
<div>
code+blabla2bis
</div>
<div>
code+blabla2ter
</div>
</body>
</html>

Evidemment si on a pu jouer à ce point dans <body></body> pourquoi ne pas faire la même chose dans <head></head> pour avoir enfin un title qui ressemble à quelque chose.

Donc page.php :

<html>
<head>
<?
if ($page=='page2') {include ('fichier_contenant_code+blabla_du_title_de_la_page2.inc');}
?>
</head>
<body>
code+blabla1

+
<a href="?page=page2">

+
<div>
<?
if ($page=='page2') {include ('fichier_contenant_code+blabla2_pour_compléter_code+blabla1.inc');}
?>
</div>
<div>
<?
if ($page=='page2') {include ('fichier_contenant_code+blabla2bis_pour_compléter_code+blabla1.inc');}
?<
</div>
<div>
<?
if ($page=='page2') {include ('fichier_contenant_code+blabla2ter_pour_compléter_code+blabla1.inc');}
?>
</div>
</body>
</html>

Avec contenu du "fichier_contenant_code+blabla_du_title_de_la_page2.inc" :

<title>Ici le texte ad hoc pour la page 2</title>

Ami mystique des pseudo frame la solution est là car rien ne t'empêche de rajouter à page.php :

<head>
<?
if ($page=='page2') {include ('fichier_contenant_code+blabla_du_title_de_la_page2.inc');}
?>
<?
if ($page=='page2') {include ('fichier_contenant_script_JS_uniquement associé_à_la_page2.inc');}
?>
</head>
<body>
code+blabla1

+
<a href="?page=page2">

+
<div>
<?
if ($page=='page2') {include ('fichier_contenant_code+blabla2_pour_compléter_code+blabla1.inc');}
?>
</div>
<div>
<?
if ($page=='page2') {include ('fichier_contenant_code+blabla2bis_pour_compléter_code+blabla1.inc');}
?<
</div>
<div>
<?
if ($page=='page2') {include ('fichier_contenant_code+blabla2ter_pour_compléter_code+blabla1.inc');}
?>
</div>
</body>
</html>

avec contenu de "fichier_contenant_script_JS_uniquement_associé_à_la_page2.inc" :


<script type="text/javascript" src="js_only_page2.js"></script>


Remarque : tu auras remarqué que j'utilise l'extension .inc pour les fichiers à inclure. En fait ce choix est assez contesté. Quoiqu'il en soit une seule obligation à mon sens, ne pas utiliser .html, c'est une question de santé mentale.
Modifié par clb56 (22 Jul 2005 - 15:59)
Ok donc si j'ai bien compris il suffit de faire un include dans les headers de ma page "mère", qui va insérer les bons en-têtes de la page, de la même façon que je fais des includes dans la DIV de contenu pour y insérer ce que je veux?

Donc pour résumer :

1) Je clique sur un lien du style <A HREF="index.php?page=page1>Lien>/A>

2) dans la page mère(index.php) j'ai un truc de ce genre pour les headers :


<HEAD>
     <?php
          switch($page)
          case 'page1': include ('entete1.php');break;
          case 'page2': include ('entete2.php');break;
     ?>
</HEAD>


et dans la DIV de contenu :


<DIV ID='contenu'>
     <?php
          switch($page)
          case 'page1': include ('contenu1.xxx');break;
          case 'page2': include ('contenu2.xxx');break;
     ?>
</DIV>


et j'aurai donc, dans les fichiers enteteX.php :


<?php
     echo "<SCRIPT TYPE=\"text/javascript\" SRC=\"scriptsX.js\">";
?>


et dans les fichiers contenuX.xxx :


     -- Code décrivant le contenu --


J'ai bien compris?

J'avais pensé à la base faire un include mais je m'étais dit que c'était pas possible dans les headers.
Mais réflexion faite, je vois pas ce qui m'en empeche!

Mathieu
Personnellement j'aureis utilisé la même méthode pour include ma page et mon entête (plus simple à comprendre)
Pour ce qui est du include renseigne toi ici pour éviter de faire des switchs lourds et difficilement évolutif.