Lomakkeiden käsittely ja SSI - Demo 7

Mallivideot

Videot eivät sisällä ääntä.
Ongelmia videon katselussa?

Näissä demoissa otetaan käyttöön lomakkeiden käsittelyyn tarkoitettu CGI-ohjelma, tehdään Googlea käyttävä hakulomake ja harjoitellaan SSI:n käyttöä.

Lomaketiedot sähköpostiin laheta.cgi-ohjelmalla

Laitetaan demo 6:ssa tehdyn lomakkeen tiedot menemään sähköpostiin:

  1. Käy Korppi-järjestelmässä kurssin sivuilla hakemassa tunnus ja salasana kohdasta Lomakkeenkäsittelijä. Suorat linkit Korppiin kurssisivuille: kevään 2011 lähiopetus, lukuvuoden 2010-2011 verkkokurssi.
  2. Avaa uuteen välilehteen osoite (tarvitset äsken hakemiasi tunnuksia, jotta sivu aukeaa)

    http://appro.mit.jyu.fi/www/harkka/laheta/

  3. Siirry kohtaan Osoitteen lisääminen. Kirjoita siihen oma yliopiston sähköpostiosoitteesi ja napauta painiketta Lähetä.
  4. Siirry muokkaamaan W:\www\demo6\-hakemistossa olevaa lomaketta. Muokkaa lomakkeen action-ominaisuuden arvoa ja laita siihen:
    <form action="http://appro.mit.jyu.fi/cgi-bin/www/laheta.cgi" method="post">
    ...
    </form>
  5. Sijoita johonkin väliin lomaketta fieldset-elementin sisälle piilokenttä, joka kertoo, mihin sähköpostiosoitteeseen tiedot pitää lähettää. Huomaa, että name-ominaisuuden arvon on oltava lomake_email ja value-ominaisuuden arvon sähköpostiosoite juuri siinä muodossa kuin mitä äskettäin kirjoitit lomakkeelle.
    <input type="hidden" name="lomake_email" value="omaosoite@jyu.fi" />
  6. Kokeile täyttää lomake ja lähettää se napauttamalla Lähetä viesti -painiketta. Nyt sähköpostiisi pitäisi tulla WWW-lomakkeelta tiedot.

Sähköpostiosoitteen valinnan voisi tehdä myös muillakin elementeillä, joiden name-ominaisuus on lomake_email, kuten esim. lomakkeen vastaanottaja -kohdan select-elementillä. Tätä ei nyt kuitenkaan tehty, sillä käytössä ei ole useita jyu.fi-päätteisiä osoitteita.

Haku omalle sivulle

Googlen avulla on helppoa lisätä haku omalle sivulle. Google ei kovin avoimesti mainosta, että haun voi kohdistaa vain tiettyyn osoitteeseen.

  1. Aloitetaan lisäämällä Nanonanon sivuston etusivulle (W:\www\index.html) normaali hakulomake aivan sivun alalaitaan ennen address-lohkoa:
    <div class="haku">
    <form action="http://www.google.com/search" method="get">
    <div>
    <label for="hakusanat">Hakusanat </label>
    <input type="text" size="20" id="hakusanat" name="q" value="" />
    <input type="submit" value="Hae" />
    </div>
    </form>
    </div>
    • Lomakkeen action="http://www.google.com/search" viittaa Googlen hakuohjelmaan.
    • Tekstikentän name="q" viittaa hakusanoihin, jotka välitetään hakuohjelmalle.
    • Kokeile miten haku toimii.
  2. Lisätään lomakkeen sisemmän div-elementin sisälle vielä muutama lisämääritys:
    <input type="hidden" name="ie" value="iso-8859-1" />
    <input type="hidden" name="oe" value="iso-8859-1" />
    <input type="hidden" name="hl" value="fi" />
    <input type="hidden" name="lr" value="lang_fi" />
    
    • Näillä määrityksillä tekstin koodaus saadaan sopimaan suomalaiseen merkistöön ja haun sekä Googlen käyttöliittymän kieleksi määrätään suomi.
    • Kokeile miten hakusivu muuttuu.
  3. Hakutuloksiin tulee vielä paljon muitakin sivuja kuin Nanonanon sivut. Rajoitetaan hakua lisäämällä seuraava parametri:
    <input type="hidden" name="as_q" value="site:users.jyu.fi/~omatunnuksesi/www/" />
    • as_q-niminen muuttuja lisää muiden hakusanojen lisäksi uuden hakutermin site:users.jyu.fi/~omatunnuksesi/www/.
    • site-määreellä voidaan rajoittaa hakua vain tiettyyn WWW-sivuun tai sivustoon. Sivun osoite on tultava heti kaksoispisteen jälkeen.
    • Kokeile hakulomakkeen toimintaa. Luultavasti Google ei löydä mitään, koska on erittäin epätodennäköistä, että Google olisi käynyt indeksoimassa demotehtäväsivujasi. Tämä johtuu siitä, että sivuillesi ei ole mistään linkkejä, ja vaikka olisikin, niin hakuroboteilla kestää aikansa ennenkuin ne ehtivät vierailemaan sivuillasi.
    • Voit kokeilla lomakkeen toimintaa vaihtamalla haun kohteeksi esim. site:appro.mit.jyu.fi/www/.
  4. Siirretään vielä hakupalkki oikeaan ylälaitaan. Avaa tyylisivu editoitavaksi Web Developer -työkaluriviltä. Lisää haku-luokalle position: absolute; -ominaisuus ja siirrä se top- ja right-ominaisuuksilla sopivaan paikkaan. Tallenna muutokset tiedostoon demo2.css. Tee vastaavat tyylimääritykset myös Nanonanon sivuston mobiili.css-tiedostoon.
  5. Validoi lopuksi XHTML- ja CSS-koodit ja korjaa mahdolliset virheet.

SSI (Server Side Includes)

Samanlaisena toistuvien elementtien lisääminen ja muokkaaminen on vaivalloista, sillä samaa koodia joudutaan normaalisti kopioimaan useille sivuille. Toistuvia osia ovat esimerkiksi vakionavigointipalkki ja päivitystiedot. Parempi ratkaisu on keskittää kaikille sivuille yhteiset osat samaan paikkaan ja liittää ne automaattisesti kullekin sivulle sopivaan paikkaan. Tähän voidaan käyttää esimerkiksi Apache-palvelimissa toimivaa SSI-tekniikkaa. WWW-palvelin tulkitsee dokumenttiin upotetut komennot ennen sivun lähettämistä selaimelle.

Tehtävä: Helpotetaan Nanonanon sivuston ylläpitoa siirtämällä kaikille dokumenteille yhteinen navigointi yhteen tiedostoon, josta sitä on helppoa keskitetysti ylläpitää.

  1. Aloita uusi täysin tyhjä dokumentti (ilman XHTML-deklaraatioita). Kopioi tähän dokumenttiin Nanonanon etusivulla olevan <div class="navbar">...</div>-osan lähdekoodi.
  2. Muuta kaikki navigointipalkin linkit puoliabsoluuttisiksi, jotta samat linkit toimivat miltä tahansa Nanonanon sivulta. Esim:
    <li><a href="/~omatunnus/www/artikkelit/">Artikkelit</a></li>
    
  3. Tallenna navigointipalkki navbar.include-nimellä Nanonanon kotisivuhakemistoon juureen W:\www\.
  4. Muuta W:\www\-hakemistossa olevan index.html-tiedoston nimeksi index.shtml.
    • Useissa Apache-palvelimissa oletuksena .shtml-päätteiset tiedostot prosessoidaan SSI-komentojen varalta. Hakemistosta palautetaan yleensä index.shtml-tiedosto, jos hakemistossa ei ole index.html-tiedostoa. Voimme siis käyttää hakemistoissa aivan hyvin index.shtml-nimisiä tiedostoja, koska linkkimme viittaavat hakemistoihin eivätkä index.html-tiedostoihin.
  5. Muuta index.shtml-tiedostoa siten, että korvaat navbar-lohkon seuraavalla SSI-komennolla:
    <!--#include virtual="/~omatunnuksesi/www/navbar.include"-->
  6. Kokeile selaimella miten etusivu toimii nyt selaimessa:
    http://users.jyu.fi/~omatunnus/www/

    Jos kaikki meni oikein, niin edellä lisäämäsi SSI-komennon tilalla pitäisi selaimessa näkyä ihan normaali navigointipalkki, jonka WWW-palvelin lisäsi navbar.include-tiedostosta SSI-komennon kohdalle.

  7. Varmista, että navigointipalkin linkit toimivat. Kokeile kaikkien linkkien toimintaa itse tai tarkista sivu W3C:n Link Checkerillä.
  8. Kokeillaan lisätä SSI:n avulla myös dokumentin muutosaika sivulle. Siirrä index.shtml-tiedoston lopussa oleva strong-elementti pois address-lohkosta ja sijoita se p-elementin sisälle address-lohkon perään. Korvaa aikamääre rivillä:
    <!--#config timefmt="%Y-%m-%d %T"--><!--#echo var="LAST_MODIFIED"-->
    • Ensimmäinen kommentti määrää SSI:n päivämäärämuotoilun.
    • Jälkimmäinen kommentti aiheuttaa varsinaisen muutosajankohdan lisäämisen.
    • Kokeile selaimella ilmestyikö muutosaika sivulle.
    • HUOM! Jos muutosajankohta tai muut SSI-komentosi eivät tunnu toimivan, niin varmista että hakemistossasi ei ole enää index.html- ja/tai index.htm-nimisiä tiedostoja. Jos niitä löytyy, niin silloin index.shtml-tiedostoja ei prosessoida hakemiston oletustiedostoiksi. Tällöin kyseiset index.html- ja/tai index.htm-tiedostot täytyy joko nimetä uudelleen tai poistaa, jotta index.shtml-tiedoston saa toimimaan hakemiston oletustiedostona.
  9. Tee demo2.css:ään asiayhteydestä riippuva tyyli, joka siirtää address-lohkon jälkeisen p-elementin oikeaan laitaan address-lohkon alapuolelle. Tee vastaavat lisäykset myös Nanonanon sivuston mobiili.css-tiedostoon.
  10. Siirrä address-lohko omaan tiedostoon address.include. Lisää se etusivun loppuun SSI-komennolla:
    <!--#include virtual="/~omatunnuksesi/www/address.include"-->
    • Miksi päivitysajankohtaa ei voitu siirtää suoraan address.include-tiedostoon?
  11. Avaa pääteyhteys esimerkiksi PuTTY-ohjelmalla jalava.cc.jyu.fi-palvelimeen (tai halava.cc.jyu.fi). Siirry cd-komennolla symbolisen html-linkin alla olevaan www-hakemistoon.
  12. Aja komento
    nano -w .htaccess

    Komento luo .htaccess tiedoston, jolla voidaan ohjata Apache-palvelimen toimintaa hakemistokohtaisesti.

  13. Lisää .htaccess-tiedostoon seuraavat asetukset:
    AddHandler Server-Parsed .html 
    AddType text/html .html
    
    • Ensimmäisellä direktiivillä käsketään palvelimen etsiä mahdolliset SSI-komennot kaikista .html-päätteisistä tiedostoista.
    • Toinen määre varmistaa, että prosessoinnin jälkeenkin tiedostot jaetaan oikealla mediatyypillä. Apache 2 -WWW-palvelin jakaa oletuksena .shtml-päätteiset XHTML-tiedostot text/xml-muodossa, mikä ei sovi kaikille selaimille ja validaattoreille, joten pitää määrätä mediatyypiksi text/html.
    • Tavallisia .html-päätteisiä tiedostoja ei yleensä kannata automaattisesti parsia SSI-komentojen varalta, koska se aiheuttaa palvelimelle raskasta ja turhaa työtä. Tässä tehtävässä kaikkiin .html-tiedostoihin on kuitenkin tarkoitus lisätä navigointipalkki automaattisesti, joten operaatio on perusteltu.
    • Tallenna lopuksi tiedosto valinnalla Ctrl+O ja poistu tiedoston muokkauksesta valinnalla Ctrl+X.
  14. Lisää SSI-komentojen avulla navigointipalkki, tekijätiedot ja muutosajankohta ainakin artikkelit-, opiskelu- ja linkit-hakemistoissa oleville sivuille.
  15. Varmista W3C:n Link Checker -ohjelmalla, että navigointilinkit toimivat varmasti kaikilla alasivuilla.
  16. Validoi lopuksi XHTML- ja CSS-koodit ja korjaa mahdolliset virheet.

Lisätietoa

Käyttäjien kommentit

Kommentoi tätä sivua Lisää uusi kommentti
Kurssimateriaalien käyttäminen kaupallisiin tarkoituksiin tai opetusmateriaalina ilman lupaa on ehdottomasti kielletty!
http://appro.mit.jyu.fi/www/demot/demo7/
© Antti Ekonoja (antti.j.ekonoja@jyu.fi) <http://users.jyu.fi/~anjoekon/>
Tommi Lahtonen (tommi.j.lahtonen@jyu.fi) <http://hazor.iki.fi/>
Jukka Mäntylä (jmantyla@iki.fi) <http://www.iki.fi/jmantyla/>
2011-02-28 14:21:45
Informaatioteknologia - Jyväskylän yliopiston informaatioteknologian tiedekunta