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"<br /> src="javascript.js"><br /></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"><br />//<![CDATA[<br />alert('ahoj');<br /> //]]><br /></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<br />of "object", "applet", "map", "iframe", "button", "ins", <br />"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><br /><noscript><br />Váš prohlížeč nepodporuje JavaScript.<br /></noscript><br /></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:

/**<br />* Correct 'ID "edit-submit" already defined' validation error caused<br />* by search forms.<br />*/<br />function phptemplate_submit($element) {<br />srand ((double) microtime( )*1000000);<br />$random_number = rand(100,999);<br />return <br />  str_replace('edit-submit','edit-submit-'.$random_number,<br />    theme('button', $element));<br />}<br />// 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.

Autor článku: Jan Polzer

Tvůrce webů z Brna se specializací na Drupal a Symfony. Obojí také školím spolu se základy SEO. Jsem Acquia Certified Developer a Site Builder a napsal jsem několik knih o Drupalu. Ve volných chvílích cestuji a podnikám výlety. Více se dozvíte na mém firemním webu.

reklama

Komentáře k článku

Přidat komentář

Filtered HTML

  • Povolené HTML značky: <a href hreflang> <em> <strong> <cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <p> <br>
  • Řádky a odstavce se zalomí automaticky.
  • Web page addresses and email addresses turn into links automatically.

Odesláním komentáře souhlasíte s podmínkami Ochrany osobních údajů

reklama
Sledujte Maxiorla na Facebooku

Maxiorel na Facebooku

Poslední komentáře
reklama
Nové diskuze
reklama
Hosting pro Drupal a WordPress

Hledáte český webhosting vhodný nejenom pro redakční systém Drupal? Tak vyzkoušejte Webhosting C4 za 1200 Kč na rok s doménou v ceně, 20 GB prostoru a automatické navyšováním o 2 GB každý rok. Podrobnosti zde.

Knihy o Drupalu

Kniha Drupal 8 Kniha Drupal 7 333 tipů a triků pro Drupal
Více na KnihyPolzer.cz

Co píší na Interval.cz
@maxiorel na Twitteru

Maxiorel na Twitteru