DHTML editor – snadná úprava HTML kódu ve formuláři

7. ledna 2002

V řadě aplikací uvítáte, když si klient může z formuláře ve stránce sám upravit vzhled odesílaného textu (vložit aktivní odkazy, obrázky nebo multimediální obsah) – např. při vkládání inzerátu nebo příspěvku do diskusního fóra. Uvedený DHTML editor sice pracuje jen v prohlížeči IE4+ na Windows (na Macu bohužel obvykle zbortí prohlížeč), ovšem i tak je naprosto ideální pro nasazení v intranetu.

Editor umožňuje automaticky rozpoznávat typ prohlížeče a alternativně nabídnout alespoň klasický formulář s jednoduchým javascriptovým doplňkem pro přímé vkládání HTML značek.

Základní kámen

Nasazení editoru podle tohoto návodu je velmi snadné – postačí si stáhnout celý balíček dhtmed.zip, který obsahuje příklad stránky s editorem, potřebný skript, obrázky a soubor stylů.

Základem editoru je tento HTML soubor (pro přehlednost jsou v ukázce úmyslně přidány prázdné řádky):

<link rel="stylesheet" type="text/css" href="enhed.css">
<script language="JavaScript" src="enhed.js"></script>
<table width="100%" cellspacing="2" cellpadding="0" border="0" class="dhtmed-bg">
<form action="skript.php" name="form1" method="post" onSubmit="return SendData()">
<tr><td>
<input type="hidden" name="body" id="ID"><input type="hidden" name="NET">
<img alt="Režim HTML / Vizuální" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="swappmodeE" onclick="swappMode()" height="20" src="images/html.gif" width="20">
<span id="formatToolbar"><img height="18" src="images/spc.gif" width="2">
<img alt="Tučné (Ctrl+B)" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="boldE" onclick="DoCommand(‚Bold‘)" src="images/bold.gif" width="20" height="20">
<img alt="Kurzíva (Ctrl+I)" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="italE" onclick="DoCommand(‚Italic‘)" src="images/italic.gif" width="20" height="20">
<img alt="Podtržené (Ctrl+U)" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="underE" onclick="DoCommand(‚Underline‘)" src="images/underline.gif" width="20" height="20">
<img height="18" src="images/spc.gif" width="2">
<img alt="Velké písmo" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="ibigE" onclick="ExtBig()" height="20" src="images/big.gif" width="20">
<img alt="Malé písmo" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="ismallE" onclick="ExtSmall()" height="20" src="images/small.gif" width="20">
<img height="18" src="images/spc.gif" width="2">
<img alt="Číslovaný seznam" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="iolE" onclick="DoCommand(‚InsertOrderedList‘)" height="20" src="images/numbered.gif" width="20">
<img alt="Nečíslovaný seznam" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="iulE" onclick="DoCommand(‚InsertUnorderedList‘)" height="20" src="images/buleted.gif" width="20">
<img height="18" src="images/spc.gif" width="2">
<img alt="Vodorovná čára" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="ihlE" onclick="DoCommand(‚InsertHorizontalRule‘)" height="20" src="images/hr.gif" width="20">
<img alt="Běžící text" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="marqueeE" onclick="ExtMarq()" height="20" src="images/marquee.gif" width="20">
<img alt="Obrázek" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="imageE" onclick="DoCommand(‚InsertImage‘,true)" height="20" src="images/image.gif" width="20">
<img alt="Multimédia" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="embedE" onclick="ExtMedia()" height="20" src="images/media.gif" width="20">
<img height="18" src="images/spc.gif" width="2">
<img alt="Vložit e-mail" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="emailE" onclick="ExtMail()" height="20" src="images/mail.gif" width="20">
<img alt="Vložit odkaz (Ctrl+K)" class="dhtmed-v" onmouseover="className=’dhtmed-o’" onmouseout="className=’dhtmed-v’" id="hyperlinkE" onclick="DoCommand(‚CreateLink‘,true)" height="20"
src="images/hyperlink.gif" width="20">
</span>
<iframe ID="Editor" width="100%" height="300" src="enhedsup.htm"></iframe>
<script language="javascript" type="text/javascript">
<!–
frames.Editor.document.designMode = "On";
//–>
</script>
[Enter] – odstavec<br>[Shift + Enter] – nový řádek<br><input type="Submit" value="Uložit" class="button">
</td></tr></form></table>

Soubor obsahuje přilinkování souboru stylů (ten upravuje vzhled tak, aby editor vypadal jako aplikace Windows včetně tlačítek a systémových barev), volání podpůrného JavaScriptu, definici formuláře (v té je třeba uvést URL na skript, který zpracuje odesílaný text) a panel nástrojů (ten tvoří obrázky s popiskem, nadefinovaným stylem při přejetí myší a patřičnou akcí při klepnutí). Pokud nechcete dovolit použití některé funkce, prostě kód obrázku dané funkce odeberte.

Speciálním tlačítkem nástrojů editoru je první tlačítko s popiskem "Režim HTML / Vizuální" – přepíná běžný vizuální režim na režim přímé editace HTML kódu a zpět. Po klepnutí na toto tlačítko se zobrazí "surový" HTML kód a specialisté tak mohou upřesnit vlastnosti některých značek. Současně také zmizí zbývající tlačítka panelu nástrojů – v tomto režimu je nelze použít, což také indikuje zvolený režim HTML. Dalším klepnutím se opět zapne vizuální režim, zobrazí se aktuální vzhled textu a objeví se všechna tlačítka.

Okno pro editaci není jako obvykle tvořeno pomocí textarea, ale vnořeným rámcem iframe (zde je možné upravit rozměr okna pro editaci). Rámec je pomocí identifikátoru ID pojmenován a následným povelem JavaScriptu "frames.Editor.document.designMode" je HTML editor aktivován. Důležitý je zde soubor enhedsup.htm, který je výchozím souborem a načte se do vnořeného rámce. Obsah tohoto souboru tvoří výchozí obsah editoru.

Pro odesílání textu formátovaného pomocí HTML je nutné, aby byl, jako v našem příkladu, úplně prázdný. Pokud bychom chtěli odesílat text s nějakým záhlavím nebo zápatím, nebo třeba celou korektní HTML stránku, přidáme potřebný kód do souboru enhedsup.htm. Ačkoli máme nyní enhedsup.htm prázdný (má nulovou délku), nelze jej vynechat – jinak by se v editační části objevilo chybové hlášení "Stránku nelze zobrazit".

Nakonec je v souboru ukázka nápovědy pro přechod na nový řádek a pro vytvoření odstavce a tlačítko pro odeslání obsahu formuláře. Tag formuláře je úmyslně vnořen mezi značky tabulky, což sice není úplně korektní, ale v Internet Exploreru plně funkční. Zamezí to navíc zbytečnému vložení prázdného řádku.

Šaty editoru

Pokud použijete editor samostatně ve stránce (nebude v ní nic jiného), je dobré nastavit nulové okraje stránky. Vhodné je případně otevírat editor do okna pomocí JavaScriptu – pak můžete nadefinovat okno tak, že nebude mít panely nástrojů ani stavový řádek, a bude tak vzhledem plně splývat se systémem uživatele.

Nechcete-li, aby editor přebíral systémové barvy, ale měl barvy vlastní, změníte názvy systémových barev (např. menu, buttonface) za konkrétní barvu (např. #996699) v souboru stylů enhed.css. Obrázky panelu nástrojů editoru jsou průhledné – počítá se s tím, že editor bude mít různé barvy u každého klienta v závislosti na nastavení jeho barev.

Obsah formuláře se po odeslání tlačítkem "Uložit" odešle metodou post na server v proměnné "body". Název proměnné je uveden v podpůrném JavaScriptu enhed.js a dle potřeby je možné si ho změnit. Na závěr doplňuji, že je velmi potřebné ve skriptu (v tomto případě skript.php), který následně zpracovává obsah odeslaného formuláře, důkladně ošetřit nepovolené tagy a konstrukce (v PHP například funkcí strip_tags). Předejdete tak případnému narušení konstrukce HTML kódu, vkládání JavaScriptů nebo dokonce přesměrování.

Příklad ošetření nepovolených tagů ve zpracovávajícím skriptu pomocí PHP:

$allowtags = "<embed>, <marquee>, <blink>, <hr>, <ul>, <li>, <ol>, <p>, <br>, <font>, <b>, <u>, <i>, <small>, <big>, <strong>, <em>, <a>, <img>"; // výčet povolených tagů
$body = strip_tags($body,$allowtags); // z obsahu proměnné body vyjmout nepovolené tagy

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *