51.6.4. Naše první stránky

51.6.4.1. Spouštěcí soubor

Po úspěšném sprovoznění balíčku/knihovny IOWA můžeme přistoupit k vytvoření naší první stránky. A jak jinak začneme známým programem Hello World. Vytvoříme si tedy adresář pro náš pokus, například hello a přepneme se do něj

$ mkdir hello
$ cd hello

Nyní vytvoříme soubor Main.html s následujícím obsahem

Příklad 51.25. IOWA hello/Main.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- $Id: Main.html,v 1.1 2002/11/03 06:55:44 radek Exp $
     $Source: /home/radek/cvs/ruby-book/example/net/iowa/hello/Main.html,v $ -->
<html>
  <body>
    <h1>Hello World!</h1>
  </body>
</html>

Náš první „program“ spustíme následujícím příkazem zadaným v adresáři hello

$ ruby -riowa -e "Iowa.run('hello')"

IOWA načte soubor v adresáři a prezentuje jej na webowském rozhraní počítače. Vytvořená stránka je přístupná na url (http://localhost/iowa/hello) http://localhost/iowa/hello. V případě mého počítače je to http://kvark:8080/iowa/hello

FIXME: Podívat se jak vypadají předcházející url na různých vástupech.

$ lynx localhost:8080/iowa/hello

Výsledný html kód která získáme ze serveru vypadá takto

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- $Id$
     $Source$ -->
<html>
  <body>
    <h1>Hello World!</h1>
  </body>
</html>

Získali jsme tedy velmi „drahý“ www server ;)

Na prvním příkladě jsme se naučili, jak spustit IOWA a kde najdeme jeho výstup. Jednoduchostí příkladu jseme jej však degradovali na obyčejný web server publikující statické stránky. Ukažme si tedy něco z dynamičnosti IOWA. Na začátek souboru přidáme část <% ... %> a rovněž upravíme tělo dokumentu. Výsledek vypadá takto

Příklad 51.26. IOWA hello2/Main.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- $Id: Main.html,v 1.1 2002/11/03 06:55:45 radek Exp $
     $Source: /home/radek/cvs/ruby-book/example/net/iowa/hello2/Main.html,v $ -->
<%
    class Main < Iowa::Component
        def time
            Time.now
        end
    end
%>
<html>
  <body>
    <h1>Hello World!</h1>
    <p>Aktu�ln� �as je <b>@time</b>.</p>
  </body>
</html>

Po uložení souboru dáme v prohlížeči reload a hned vidíme změnu. Naše stránka po každém načtení ukazuje aktuální čas v době načtení. Výsledný html vypadá takto:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- $Id$
     $Source$ -->

<html>
  <body>
    <h1>Hello World!</h1>
    <p>Aktu�ln� �as je <b>Fri Nov 01 21:47:38 CET 2002</b>.</p>
  </body>
</html>

Nic světoborného, následující příklad, nazvěme si jej timelog je již dynamičtější. Opět si vytvoříme adresář timelog pro náš „program“ a v něm jeden soubor, Main.html

Příklad 51.27. IOWA timelog/Main.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- $Id: Main.html,v 1.1 2002/11/03 06:55:45 radek Exp $
     $Source: /home/radek/cvs/ruby-book/example/net/iowa/timelog/Main.html,v $ -->
<%
    class Main < Iowa::Component
        attr_reader :loggedTimes
        def awake; @loggedTimes = []; end
        def log; @loggedTimes << Time.now; end
        def time; Time.now; end
    end
%>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  </head>
  <body>
    <h1>�asov� zna�ky</h1>
    <p>Aktu�ln� �as je <b>@time</b>.</p>
    <a oid="log">P�idej</a> zna�ku.
    <p>Na tuto str�nku jsi se pod�val ty a nebo n�kdo jin�
       v �asech: @loggedTimes.</p>
  </body>
</html>

Jak jste si zajisté všimli, po každém kliknutí na Přidej se seznam časových značek prodlouží o aktuální čas kliknutí. Seznam se nezobrazuje příliš pěkně, tak uděláme pár úprav. Předně napíšeme část vazeb (bindings) <? ... ?> a do html kódu přidáme zobrazení seznamu. Rovněž přidáme řádek do části programu. Výsledný soubor vypadá takto:

Příklad 51.28. IOWA timelog2/Main.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- $Id: Main.html,v 1.1 2002/11/03 06:55:45 radek Exp $
     $Source: /home/radek/cvs/ruby-book/example/net/iowa/timelog2/Main.html,v $ -->
<%
    class Main < Iowa::Component
        attr_reader :loggedTimes
        attr_accessor :logItem
        def awake; @loggedTimes = []; end
        def log; @loggedTimes << Time.now; end
        def time; Time.now; end
    end
%>

<?
    logList {
        list = loggedTimes
        item = logItem
    }
?>

<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2">
  </head>
  <body>
    <h1>�asov� zna�ky</h1>
    <p>Aktu�ln� �as je <b>@time</b>.</p>
    <a oid="log">P�idej</a> zna�ku.
    <p>Na tuto str�nku jsi se pod�val ty a nebo n�kdo jin�
       v �asech:
      <ul oid="logList">
        <li>@logItem</li>
      </ul>
    </p>
  </body>
</html>

Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .