Autor Zpráva
JardaR
Profil
Zdravím,

vytvářím pomocí php administrativní prostředí, které mám rozděleno na 3 celky / soubory: header.php, index.php a footer.php.
V header.php mám deklaraci dokumentu XHTML 1.0 pro zobrazení ovládacího menu. Samostatně je soubor validní.
V index.php hned na začátku header includuji, následovat bude php kód a na konci includuji zobrazení footer.php. Stále vše validní.
Pokud však doplním mezi includy do indexu kód pro zobrazení a ovládání stromové struktury kategorií, kde mám deklarován další XHTML 1.0 dokument
pro zobrazení tohoto menu, tak je s validitou ámen. Přitom samostatně bez include jsou všechny soubory validní.
Vypíše mi to asi 5 chyb, ale důležitá je hned ta první, protože z ní odvíjejí další:
Line 90, Column 9: "DOCTYPE" declaration not allowed in instance
</div><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww…

Dotazy tedy zní:
Deklarací mohu na webu udělat přece kolik chci, jen dodržet 1 deklaraci na soubor, že?
Není problém právě v tom include souborů v indexu? Vycházím z toho </div> před <!DOCTYPE html PUB... Jen nechápu proč. Vše funguje jak má.

Výsek ze zobrazení zdrojového kódu přes FF:
<!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">
zbytek deklarací a kódu
</html>
php kód končící
</div>
<br style="clear: left" />
a hned následuje
</div><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
zbytek deklarací a kódu
</html>
zbytek php kódu


Snad jsem to napsal na začátečníka srozumitelně.
Komentáře typu Chamurappi prosím vynechte. Jen to chci s validitou zkusit a nerad bych se dopustil nějakých HTML zvěrstev.
Chamurappi
Profil
Reaguji na JarduR:
Samostatně je soubor validní
… a v tom je ta chyba, protože samostatně ho asi nikdo nalistovávat, ani validovat nebude.

Deklarací mohu na webu udělat přece kolik chci, jen dodržet 1 deklaraci na soubor, že?
<!doctype> smí být v HTML či XML dokumentu jen jeden. To, jak je fyzicky poskládána stránka na straně serveru (z kolika souborů), nehraje vůbec žádnou roli. Do prohlížeče i validátoru jde jen výsledek toho sestavení.

Komentáře typu Chamurappi prosím vynechte.
Jak vypadají komentáře mého typu? Narážíš na to, že neholduji validitě, nebo na to, že mám vlastní validátor, který by ti chyby vysvětlil česky?

nerad bych se dopustil nějakých HTML zvěrstev
Máš ve stránce několikrát hlavičku — už se stalo :-)
JardaR
Profil
Chamurappi:
Díky za rychlost. Narážel jsem pouze na tvůj přístup k validitě, nic osobního. Jen jsem to tady dnes dlouho prolézal a nechtěl jsem zde rozpoutávat diskuzi zda validovat nebo ne jako u jiných dotazů. :-) Prostě začátečník a zkouším to.

<!doctype> smí být v HTML či XML dokumentu jen jeden. To, jak je fyzicky poskládána stránka na straně serveru, nehraje vůbec žádnou roli.
Tak to jsem si myslel a je to i logické. Takže jestli jsem to pochopil, tak můj problém je v tom, že do souboru s deklarací includuji další, kde je též deklarace. Zkrátka najít jiné řešení.
JardaR
Profil
Dovolím si pokračovat v tomto vlákně kvůli návaznosti. Vytvořil jsem krátký velmi ořezaný kód, na kterém prezentuji předchozí problém
a opravdu si nevím rady jak to řešit jiným způsobem.

soubor index.php
<?php
include("menu.php");
?>
<!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><?php echo HEADER_TITLE; ?></title>
</head>
<body>
<?php echo "Ahoj"; ?>
</body>
</html>
<?php
include("footer.php");
?>


soubor menu.php
<!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><?php echo HEADER_TITLE; ?></title>
</head>
<body>
<div id="menu">
<ul>
 <li><a href="index.php"><?php echo MENU_DASHBOARD; ?></a></li>
 <li><a href="logout.php"><?php echo INDEX_LOGOUT; ?></a></li>
</ul>
</div>
</body>
</html>


Menu je pomocí řešeno pomocí javascriptu a deklaraci se nevyhnu. Je to sice funkční, ale nevalidní. Napadá někoho, jak to řešit jiným způsobem,
než přes include? Menu se bude zobrazovat vždy a na základě volby se načte nějaká stránka, kde bude většinou nějaká deklarace.
_es
Profil
JardaR:
Chamurappi ti to už písal, validátor serverové skripty vôbec nezaujímajú. Sprav to tak, aby bol výsledok serverových skriptov validný.
Napríklad si sprav dve verzie súboru menu.php, jeden, ktorý sa dá načítať ako samostatná stránka a jeden na vkladanie do iných skriptov.
Okrem nedôležitej validity riskuješ, že sa ti obsah v niektorých prehliadačoch môže zobraziť zle, alebo neúplný - značky </body> a </html>.
shaggy
Profil
JardaR:
Menu je pomocí řešeno pomocí javascriptu a deklaraci se nevyhnu.
To je sprostosť. Čo má spoločné menu riešené pomocou javascriptu v includovanom súbore s tou "deklaráciou", ktorej sa nevyhneš? Uvedomuješ si, čo vlastne robíš, aký je výstup toho tvojho kódu? Máš pocit, že tak má vyzerať dobre napísaná stránka?
JardaR
Profil
_es a Chamurappi:
Díky chlapi, již mě vše docvaklo a změnou menu.php jsem vše vyřešil. Menu nyní neobsahuje deklaraci protože include na něj jsem přesunul do sekce <body> indexu což vyřešilo problém a deklaraci indexu jen rozšířil o potřební linky a scripty z původního menu. To budu podobně opakovat do dalších stránek, na které budu z menu poukazovat a </body></html> jsem přesunul až na konec footer.php.
Nyní vše perfektní.

shaggy:
Uvedomuješ si, čo vlastne robíš, aký je výstup toho tvojho kódu? Máš pocit, že tak má vyzerať dobre napísaná stránka?
No vidíš, jsi kluk všímavá, ale jsme v diskuzi a jako začátečník když nevím, tak se zeptám zkušenějších. Co jsem nevěděl, nebo jen tušil bylo zodpovězeno a teď vím co dělám. Výše uvedený kód byl jen příklad.

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: