Toto je validní -//WellDone//DTD XHTML-with iframe 1.1//EN!
MyEgo.cz
Toto je validní -//WellDone//DTD XHTML-with iframe 1.1//EN!
Začal jsem používat iAudit a musel
tedy do kódu WELL.DONE vložit v XHTML 1.1 zakázanou značku <iframe>
.
Naštěstí, díky modularitě XHTML 1.1, je snadno řešitelné aby byla stránka
validní i s touto značkou, stačí použít vlastní DOCTYPE.
Když se teď pokusíte zvalidovat tento
web, zjistíte, že je to validní -//WellDone//DTD XHTML-with iframe 1.1//EN
.
Třeba takto:
<!DOCTYPE html PUBLIC '-//WellDone//DTD XHTML-with iframe 1.1//EN' 'http://hulan.cz/styles/doctype/welldone.dtd'>
A definice DTD welldone.dtd
zahrnující jak XHTML 1.1 + <iframe>
je
zde:
<?xml version="1.0" encoding="utf-8"?> <!ENTITY % xhtml-datatypes.module "INCLUDE"> <![%xhtml-datatypes.module;[ <!ENTITY % xhtml-datatypes.mod PUBLIC "-//W3C//ENTITIES XHTML Datatypes 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-datatypes-1.mod"> %xhtml-datatypes.mod;]]> <!ENTITY % xhtml-qname.module "INCLUDE"> <![%xhtml-qname.module;[ <!ENTITY % xhtml-qname.mod PUBLIC "-//W3C//ENTITIES XHTML Qualified Names 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-qname-1.mod"> %xhtml-qname.mod;]]> <!ENTITY % iframe.qname "%XHTML.pfx;iframe"> <!ENTITY % Misc.extra "| %iframe.qname;"> <!ENTITY % xhtml11.dtd PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> %xhtml11.dtd; <!ENTITY % xhtml-iframe.module "INCLUDE"> <![%xhtml-iframe.module;[ <!ENTITY % xhtml-iframe.mod PUBLIC "-//W3C//ELEMENTS XHTML Inline Frame Element 1.0//EN" "http://www.w3.org/TR/xhtml-modularization/DTD/xhtml-iframe-1.mod"> %xhtml-iframe.mod;]]>
Problém ovšem nastane, pokud Váš web servírujete s MIME typem application/xhtml+xml
,
pokud používáte vlastní DTD, kromě pár základních entit jsou všechny ostatní
nedefinovány a parserování stránky se zastaví.
Řešením je napsat si plugin, který ve všech článcích a komentářích převede pojmenované entity na jejich numerické ekvivalenty, a udělá to při uložení článku / komentáře, aby nezatěžoval server.
Takže jsem si napsal plugin NP_Entities.php
a vše funguje dle mých představ
a validně:
createOption('itemreal','Parse Items real-time?','yesno','yes'); $this->createOption('itemsave','Parse Items when saving?','yesno','yes'); $this->createOption('commentreal','Parse Comments real-time?','yesno','yes'); $this->createOption('commentsave','Parse Commetns when saving?','yesno','yes'); } function init(){ $this->_itemreal=$this->getOption('itemreal'); $this->_itemsave=$this->getOption('itemsave'); $this->_commentreal=$this->getOption('commentreal'); $this->_commentsave=$this->getOption('commentsave'); } function event_PreItem(&$data) { if ($this->_itemreal == 'yes') { $content = array('title'=>&$data['item']->title,'body'=>&$data['item']->body,'more'=>&$data['item']->more); $this->parseString($content); } } function event_PreAddItem(&$data) { if ($this->_itemsave == 'yes') { $content = array('title'=>&$data['title'],'body'=>&$data['body'],'more'=>&$data['more']); $this->parseString($content); } } function event_PreUpdateItem(&$data) { $this->event_PreAddItem($data); } function event_PreComment(&$data) { if ($this->_commentreal == 'yes') { $data['comment']['body'] = entity_to_decimal_value($data['comment']['body']); } } function event_PreAddComment(&$data) { if ($this->_commentsave == 'yes') { $data['comment']['body'] = entity_to_decimal_value($data['comment']['body']); } } function event_PreUpdateComment(&$data) { if ($this->_commentsave == 'yes') { $data['body'] = entity_to_decimal_value($data['body']); } } function parseString(&$content) { $keys=array('title','body','more'); foreach ($keys as $key) $content[$key] = entity_to_decimal_value($content[$key]); } } ?>
Jojo, takhle mě před pár dny štvalo, že xhtml nemá možnost otevřít do jiného okna - pro můj RSS přehled na http://www.superbox.cz , takže už tam používám extra definici s podporou Target. Škoda jen, že to nejde napsat přímo do html dokumentu, když jsem to zjišťoval, tak prohlížeše typu Firefox pak ukazují na začátku stránky znak "<" a nějak s tím nešlo nic dělat.
To jsem možná obešel o dost jednodušeji http://xy.wz.cz/test-textlink/index2.php...
[2] ale fuj, různá řešení pro různé browsery, to opravdu ne, a ještě JavaScript.. To je potom mnohem lépe použít XHTML 1.0 Transitional ;-)
Výborně, tahle úprava XHTML vypadá vážně dobře. Je to mnohem lepší příklad využití modularity, než třeba RDDL (http://www.rddl.org/ ). Díky za inspiraci.
[1] Čo ti bráni použiť XHTML 1.0 Transitional? Tento Strict/1.1 fetišizmus sa fakt nejako strašne rozmohol.
To si môžeš do rovno do XHTML 1.1 narvať atribút bgcolor, tag font a sme presne tam odkiaľ sme sa tak dlho vyhrabávali.
[1] Proc nepozuvas neco jako neco nebo jeste lepe neco a pak si pres nejaky javascriptovy eventattacher vsem a.external priradis fuknci na onclick. Ma to velke plus: nova okna se oteviraji pouze pokud je zapnuty javascript. Pokud je nekde js vypnuty, tezko bude chtit ten uzivatel, aby se mu odkazy oteviraly do noveho okna. A ani s popup blockery neni problem.
[5] to mohu, ale potom bych se nic nového nenaučil o XHTML 1.1 modulech a DTD..
[7] Nereagoval som na teba.
Diskuze se zasekla takze se spozdenim nabizim neidealni reseni javascriptem, ale zapnuty ho ma temer kazdy... vice na http://www.matematika.webz.cz/forum/iframe/...