2012-12-05 1 views
1

Voici la page de mon index. $ page est défini en haut, puis les sections de la page (en-tête, menu, corps & footer) sont remplacées en bas.Le chargement incorrect de DOCTYPE et de HEAD dans PHP

Le problème que je rencontre est que le DOCTYPE et les données ne se chargent pas en premier, avant le contenu de la page restante. Cela provoque l'exécution du navigateur en mode Quirks. Faites-moi savoir si/comment je peux clarifier cette question.

Merci d'avance pour votre temps!

MISE À JOUR: J'ai supprimé toutes les balises PHP, et définissez le require ('includes/....') aux variables à éliminer lors du chargement de la page. Le DOCTYPE refuse toujours de charger. Le code ci-dessous reflète les changements. Le DOCTYPE est maintenant directement ajouté à la variable $ page, éliminant ainsi tous les espaces. En outre, lors de la visualisation dans le navigateur, j'ai remarqué que cela est montré, même si l'ouverture ne l'est pas. Toutes les feuilles de style et autres contenus sont rendus à l'intérieur de la page.

SOLUTION: La solution aurait pu être plusieurs facteurs, comme l'a fait par plusieurs personnes (tels que les nouvelles lignes étant générées avant le DOCTYPE), mais je ne peux dire avec certitude que la réponse finale est la suivante: L'extérieur les documents appelés dans la page $ n'étaient pas définis sur des variables. Ainsi, ils semblaient être en train de charger avant la page. Une fois que j'ai défini l'include/requires externe aux variables dans leurs documents de respect, le DOCTYPE chargé correctement. Je ne peux pas vous remercier tous pour votre temps.

<? 
require('includes/functions/get_content.php'); 
$header=require('includes/header.php'); 
$footer=require('includes/footer.php'); 

$page='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
<title>Website Name</title> 

<link rel="stylesheet" href="/css/primary_layout.css" type="text/css" charset="utf-8" /> 
<script src="http://ajax.aspnetcdn.com/ajax/jquery/jquery-1.8.0.min.js" type="text/javascript"></script> 
</head> 

<body> 
<div id="bodyContainer">     
%HEADERS% 

%MENU% 

<div id="bodyContentPane" role="main"> 
%BODY% 
</div> <!-- Close bodyContentPane --> 
%FOOTER% 
</div> 
</body> 
</html>'; 

//############### LOAD BODY CONTENT and SET CATEGORY ############### 
$p = $_GET['p']; 
switch ($p){ 
case "port-a-cool": 
$filename='includes/content1.html'; 
$data=get_content($filename); 
$product_category = '1'; 
$body=$data; 
break; 

case "radiant-heaters": 
$filename='includes/content2.html'; 
$data=get_content($filename); 
$product_category = '2'; 
$body=$data; 
break; 

default: 
$body= include('includes/index.php'); 
break; 
} 

//############### DEFINE CONTENT TO LOAD BY CATEGORY ############### 
$i = $product_category; 
switch ($i){ 
case "1": 
$menu=include('includes/menus/content1.php'); 
break; 
case "2": 
$menu=include('includes/menus/content2.php'); 
break; } 

// ############### CHECK FOR UNDEFINED SUB MENU ############### 
if ($menu=="") 
$menu = include ('includes/menus/default.php'); 

$page=str_replace('%HEADER%',$header,$page); 
$page=str_replace('%MENU%',$menu,$page); 
$page=str_replace('%BODY%',$body,$page); 
$page=str_replace('%FOOTER%',$footer,$page); 
echo $page; 
?> 
+0

Est-ce que get_content.php, header.php ou footer.php affiche du contenu? Dans ce cas, vous devrez rendre notre doctype et votre tête avant de require() ou include() ces fichiers. – Maritim

+0

Pourquoi avez-vous une variable '$ page' ??? –

+2

Vous avez d'innombrables '?> Musa

Répondre

2

Vous avez encore des espaces blancs avant doctype, ici

$page=' 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

supprimer les espaces

$page='<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

Note: Pour $header=require('includes/header.php'); pour retourner le contenu que vous aurez à avoir quelque chose comme return 'the content'; dans le inclus fichier.

+0

Modifié. Malheureusement, cela n'a pas résolu le problème. – RAB

+0

@RAB Peut-être que vous devriez publier vos fichiers inclus afin que nous puissions voir s'ils produisent quelque chose. – Musa

+0

Eh bien, je les ai maintenant mis à des variables afin qu'ils ne se chargent même pas jusqu'à l'appel.Jetez un oeil à la question révisée et faites-moi savoir si cela a du sens. – RAB

4

Cela se produit probablement parce que vous avez beaucoup d'espaces en sortie devant le contenu de la page.

Si vous affichez la source de la page, vous devriez voir plusieurs lignes vides sorties avant le doctype.

Les retours à la ligne sont affichés avant le contenu de la page en raison des sauts de ligne entre vos balises PHP.

Par exemple:

<? 
require('includes/functions/get_content.php'); 
require('includes/header.php'); 
require('includes/footer.php'); 
?> 

<? 
page=' 

Sorties un saut de ligne avant la balise PHP où vous définissez la variable $page. La solution consistera à éliminer toutes les nouvelles lignes entre vos balises php, donc soit ne pas basculer entre les balises PHP lorsque cela n'est pas nécessaire, soit assurez-vous qu'il n'y a pas de ligne vide entre les balises d'ouverture et de fermeture.

Espérons que ça aide.

+0

Je ne pense pas que cela causerait le doctype à ne pas être défini. Newlines ne sont pas analysés comme html –

+0

@ drew010 - Oh, c'est ce que Musa voulait dire ci-dessus ^^. Ouvrir et fermer les balises PHP ne génère pas les espaces, c'est le code HTML qui est généré entre eux. Mec, maintenant que tu le fais remarquer, je me sens un peu bête de le faire de cette façon. J'essayais de garder mon code propre et facile à revoir! Je remettrais en question votre réponse, mais je ne peux pas encore. Merci quand même! – RAB

+0

@Shredder Dans certains navigateurs (en particulier IE), toute sortie avant le doctype, y compris les espaces blancs, déclenchera le mode quirks donc le doctype doit être au tout début du document. – drew010

0

Assurez-vous qu'aucun des fichiers dont vous avez besoin ou que vous incluez n'affiche rien dans le navigateur. Si elles le sont, elles seront sorties avant que le doctype ne soit déclaré et il sera forcé d'entrer en mode quirks.

+0

Absolument. C'était une erreur maladroite de ma part. Les exigences ont maintenant été changées en variables. Le problème persiste cependant. – RAB

+0

Faites-moi une faveur. Commentez '/ * * /' tout sauf votre déclaration '$ page' et quand vous' echo $ page; 'et dites moi si c'est encore le mode quirks :) –

+0

J'aurais dû faire ça depuis le début. Le problème persiste. – RAB