JavaScript a validní XHTML
Maxiorel používá XHTML 1.0 Transitional, ve kterém nemůžete jen tak vkládat JavaScriptový kód. Interpret XHTML totiž jeho značky považuje za součást XHTML a snaží se hledat odpovídající párové značky, což logicky vyústí v chybu. Řešení je několik. Tam, kde to je možné, použijte oddělený soubor s javascriptovým kódem, který vložíte do XHTML stránky pomocí následující značky:
<script type="text/javascript" language="javascript"
src="javascript.js">
</script>
Pokud kód JavaScriptových funkcí nechcete nebo nemůžete umístit do samostatného souboru, který posléze zavoláte, stačí vložit mezi značky <script></script> speciální poznámku, která zamezí kontrole javascriptového kódu ze strany interpreta XHTML. Tím označením mám na mysli dvojici poznámek //<![CDATA[ a //]]>. Ve výsledku to může vypadat nějak takto:
<script type="text/javascript">
//<![CDATA[
alert('ahoj');
//]]>
</script>
XHTML a značka noscript
Občas můžete najít hlášení, které sděluje, že element noscript nemůžete mít v daném umístění:
document type does not allow element "noscript" here; missing one
of "object", "applet", "map", "iframe", "button", "ins",
"del" start-tag
Řešení je opět velice jednoduché. Dvojice značek <noscript></noscript> slouží k vypsání kódu, který se zobrazí uživatelům s vypnutým JavaScriptem. Aby to prošlo validací, je nutné element noscript umístit do odstavce nebo divu. Například takto:
<p>
<noscript>
Váš prohlížeč nepodporuje JavaScript.
</noscript>
</p>
Drupal a dvojitý element s id=“edit-submit“
Na svém webu jsem se setkal s tím, že redakční systém Drupal mi vypisoval do XHTML dvakrát element se stejným identifikátorem edit-submit. Ten se zaprvé vyskytuje u vyhledávacího políčka, za druhé ve formuláři, který se zobrazuje pod komentáři k článku a umožňuje návštěvníkům vybrat různý způsob zobrazení těchto komentářů. Není vyloučeno, že se tento element vypisuje i jinde. Žádná oprava celého Drupalu, která by toto řešila, momentálně asi neexistuje. Z celé řady řešení, které lze na drupal.org najít, se mi líbila úprava souboru template.php v motivu vzhledu.
Nemusíte upravovat standardní moduly a vyhnete se riziku, že při jejich aktualizaci tyto úpravy zmizí. Podmínkou je, aby web používal pro správu motivů vzhledu phptemplate. Ve složce s motivem vzhledu tedy vytvořte, případně otevřete pro úpravy soubor template.php a doplňte do něj následující kód:
/**
* Correct 'ID "edit-submit" already defined' validation error caused
* by search forms.
*/
function phptemplate_submit($element) {
srand ((double) microtime( )*1000000);
$random_number = rand(100,999);
return
str_replace('edit-submit','edit-submit-'.$random_number,
theme('button', $element));
}
// return a následující dva řádky patří na jeden jediný
Co tato úprava konkrétně dělá? Při generování stránky vyhledá všechny výskyty řetězce edit-submit, ke kterému do názvu doplní pomlčku a náhodné číslo. Jednoduché, funkční a přitom velmi jednoduše proveditelné řešení.
Také jste řešili nějaké problémy s validitou kódu Drupalu? Byl na vině systém samotný nebo vámi vytvořená šablona? Co říkáte na (ne)validitu kódu různých počitadel přístupu? Potýkali jste se s tím někdy? Dejte vědět do komentáře pod článkem, budu rád za vaše poznatky.
Tvůrce webů z Brna se specializací na Drupal, WordPress a Symfony. Acquia Certified Developer & Site Builder. Autor několika knih o Drupalu.
Web Development Director v Lesensky.cz. Ve volných chvílích podnikám výlety na souši i po vodě. Více se dozvíte na polzer.cz a mém LinkedIn profilu.
Přidat komentář