Nevalidní kód v Drupalu? Snadné řešení.

Nedávno jsem se rozhodl s konečnou platností odstranit několik drobných problémů s validitou kódu, který mi redakční systém Drupal na Maxiorlovi generuje. Validátor od W3C nenašel mnoho závažných chyb, většina se týkala pouze JavaScriptu v použitých počitadlech a jednoho problému, který se týkal přímo Drupalu.

Reklama

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.

Reklama

Přidat komentář