Pyrithän aina siihen, että tekemäsi nettisivut noudattavat ainakin näitä standardeja:
Muistathan, että yllä olevien linkkien tarkoitus on: a) antaa itsellesi mahdollisuus vaivattomasti
tarkistaa sivusi, b) antaa sivullasi vierailijoille mahdollisuus tarkistaa sivusi "laatu".
Nettisivuja tekiessäni olen usein päätynyt seuraavaan johtopäätökseen:
yksin tekiessä on tärkeää osata käyttää yksinkertaisimpia ja helpoimmin
toteutettavia ratkaisuja. Tätä periaatetta noudattaen aloitan php-tutoriaalien
sarjanikin tutustumalla viiteen mahdollisimman yksinkertaiseen, mutta hyödylliseen
php-toimintoon.
Vaikka php on myös olio-ohjelmointikieli, niin pitäydyn tässä ensimmäisessä oppaassani
puhtaasti funktiopohjaisissa toteutuksissa. Tämä toimintatapa kuvastaa yleisemminkin suhtautumistani
ohjelmointiprojekteihini: pyrin valitsemaan kulloiseenkin tehtävään parhaiten sopivat työkalut.
Jos en koe tarvitsevani ohjelmintitehtävässäni esim. luokkarakenteita, en niitä keinotekoisesti yritä
toteutukseeni lisätäkään.
Olio-ohjelmoinnin sijaan erittäin sopiva ohjelmointitekninen menetelmä yksinkertaisiin php-projekteihin
on kirjoittaa php-koodi omaan ulkoiseen php-tiedostoon. Tällöin php-koodia ei tarvitse lisätä
itse xhtml-sivulle kuin muutama rivi, eikä xhtml-lähdekoodin luettavuus kärsi. Tätä pikku projektiani
varten tallensin php-funktioni tiedostoon basic-php-functions.php, jonka lähdekoodin annan kirjoitukseni lopussa,
mutta nyt itse esimerkkeihini:
1) Kellonajan tulostaminen nettisivuille
Aloitetaan php-kielen esittely mahdollisimman yksinkertaisella kellonajan nettisivuille
tulostavalla esimerkillä. Tulostuksen suorittaa funktio printTime:
function printTime()
{
echo(date("h:i:s"));
}
Kun oheisen funktion tallentaa omaan ulkoiseen basic-php-functions.php -tiedostoon ja kutsuu sitä nettisivuillaan seuraavasti
Kello on nyt
<?php
require('basic-php-functions.php');
printTime();
?>
niin nettisivuille tulostuu kellonaika seuraavasti:
Kello on nyt
03:59:26
Yllä olevassa kellossa on kuitenkin vielä olennainen puute: se ei päivity itsestään.
Päivämäärän tapauksessahan tämä ei ole mikään ongelma, koska harvempi sivustoilla
vierailija on kiinnostunut sekunnin välein päivittyvästä päivämäärästä, mutta
sekuntikellon on eri asia.
Tämän sekuntikello-ongelman ratkaiseminen tarjoaakin erinomaisen mahdollisuuden demonstroida
käytännön nettiohjelmointia, jossa xhtml, css, php ja javascript nivoutuvat hienolla tavalla
yhdeksi kokonaisuudeksi. Sekuntikello onkin toteutettavissa kätevimmin JavaScript-koodilla
kuin php-koodilla.
Aloitettaan kellon kasaaminen lisäämällä nettisivujen xhtml-koodiin haluttuun kohtaan tyhjä div-elementti:
<div id="timeDiv">
</div>
Seuraavaksi lisätään div-elementin tyylimuotoilut sivua vastaavaan css-tiedostoon:
#timeDiv
{
position: static;
width: 150px;
height: 30px;
font: normal normal bold 18px arial;
border: double 5px #0000FF;
text-align: center;
margin: 0px 0px 0px 0px;
padding: 5px 0px 5px 0px;
}
Nyt on aika muotoilla elementin päivittävä javaScript-funktio, jonka voi lisätä joko ulkoiseen
javaScript (.js, usein suositeltavin tapa) tiedostoon tai sivun head-osioon, kunten olen tällä sivulla tehnyt
alla olevalle koodille:
<script language="JavaScript" type="text/javascript">
<!--
function updateclock()
{
var thetime=new Date();
var nhours=thetime.getHours();
var nmins=thetime.getMinutes();
var nsecn=thetime.getSeconds();
// add a zero in front of numbers<10
nmins = checkTime(nmins);
nsecn = checkTime(nsecn);
var timeDivObj = document.getElementById('timeDiv');
timeDivObj.innerHTML = nhours+": "+nmins+": "+nsecn;
}
function startclock()
{
setInterval('updateclock()',1000);
}
function checkTime(i)
{
if (i<10) {
i = "0" + i;
}
return i;
}
startclock();
-->
<script/>
On tärkeää huomata php- ja JavaScript-kellojen perimmäinen ero: php-toteutus ottaa aikansa palvelimelta ja
JavaScript-toteutus käyttää käyttäjän koneen osoittamaa aikaa. Tämä heijastaa myös php- ja JavaScript-kielien
käyttötarkoitusten eroa: php-kieli on palvelinohjelmointia varten, JavaScript on selainohjelmointia varten.
Yllä olevalla tavalla toteutettu kellomme näyttää nyt tältä:
2) Sivut päivitetty teksti.
Tämänkin pystyy toteuttamaan sivulleen vaikkapa ainoastaan yhdellä php-koodirivillä,
mutta muunnan tässä esimerkissäni tekstin suomenkieliseksi, jotta voin samalla
esitellä myös if-lauseen käytön php-kielessä. Toteutukseni on alla funktiossa pageModified:
function pageModified()
{
$year = date("Y",getlastmod());
$mon = date("n",getlastmod());
$day = date("j",getlastmod());
if( $mon == "1")
{
$mon = "tammikuuta";
}
else if( $mon == "2")
{
$mon = "helmikuuta";
}
else if( $mon == "3")
{
$mon = "maaliskuuta";
}
else if( $mon == "4")
{
$mon = "huhtikuuta";
}
else if( $mon == "5")
{
$mon = "toukokuuta";
}
else if( $mon == "6")
{
$mon = "kesäkuuta";
}
else if( $mon == "7")
{
$mon = "heinäkuuta";
}
else if( $mon == "8")
{
$mon = "elokuuta";
}
else if( $mon == "9")
{
$mon = "syyskuuta";
}
else if( $mon == "10")
{
$mon = "lokakuuta";
}
else if( $mon == "11")
{
$mon = "marraskuuta";
}
else if( $mon == "12")
{
$mon = "joulukuuta";
}
echo("Tämä sivu on päivitetty " . $day . ". " . $mon . " " . $year . ".
");
}
Yllä oleva funktio tulostaa nettisivuille tekstin:
Tämä sivu on päivitetty 15. syyskuuta 2009.
3) Tiedon lukeminen xml-tiedostosta ja tulostamien osaksi xhtml-sivua tulevaksi
taulukoksi.
Flash-opppaissani
käyn näytän kuinka helppoa xml-tiedostoihin tallennetun tiedon lukeminen on ActionScript 3:lla.
Ei liene myöskään suuri yllätys, että myös php-kielessä xml-tiedostojen lukeminen on tehty erittäin helpoksi.
Ennen kuin esittelen itse php-toteutukseni haluan korostaa kuinka hyödyllistä xml-tiedostojen
käyttäminen on:
a) Nettisivuja tehtäessä on usein järkevää erotella sivun toteuttava koodi
(xhtml-tiedosto), sivun tyylimuotoilu (css-koodi) ja sivun tietosisältö (xml-tiedosto tai tietokannat)
erillisiin tiedostoihin ja toteutustapoihin. Tämä mahdollistaa sen, että eri tahot voivat tuottaa
toisistaan riippumatta nämä lopulliseksi nettisivuksi kasattavat komponentit. Tällöin riittää,
että ohjelmoijat tuntevat eri komponenttien väliset rajapinnat ja osaavat toteuttaa oman komponenttinsa.
Vastaava komponenttiajattelu on hyödyllistä myös yksin työskennellessä, sillä on paljon helpompaa
työskennellä kerrallaan yhden komponentin parissa kuin kaikkien kolmen yhtäaikaa.
b) Yhdistelmällä xml- ja php-kieliä saadaan aikaiseksi dynaamiset nettisivut, jolloin nettisivuille
tulostuvaa tietoa voidaan muuttaa ilman, että itse xhtml-koodia tarvitsee muuttaa. Esim. hiihtokilpailujen
tulokset olisi helppo lisätä osaksi nettisivuja tallentamalla ne hyvin muotoiltuun xml-tiedostoon.
Sama periaate toimii päivitettäessä nettisivuja tietokantoihin tallennetulla informaatiolla.
Tallensin tätä esimerkkiä varten kolmen digikuvaamani perhosen nimitiedot tiedostoon
ten-data.xml:
<?xml version="1.0" encoding="utf-8"?>
<root>
<butterfly>
<finnish>
Amiraali
</finnish>
<scientific>
Vanessa atalanta
</scientific>
<english>
Red Admiral
</english>
<swedish>
Amiral
</swedish>
</butterfly>
<butterfly>
<finnish>
Angervohopeatäplä
</finnish>
<scientific>
Brenthis ino
</scientific>
<english>
Lesser marbled fritillary
</english>
<swedish>
Älggräspärlemorfjäril
</swedish>
</butterfly>
<butterfly>
<finnish>
Haapaperhonen
</finnish>
<scientific>
Limenitis populi
</scientific>
<english>
Poplar Admiral
</english>
<swedish>
Aspfjäril
</swedish>
</butterfly>
</root>
Yllä olevan xml-tiedoston tagien nimet ovat tätä esimerkkiäni varten keksimiäni.
HUOMATKAA: xml-tiedostoissa ei sinällään ole mitään ihmeellistä tai vaikeaa.
Käytännössä xml-tiedosto on vain (useinmiten) tiedonsäilömiseen tarkoitettu,
järkevästi muotoiltu, tiettyjä sääntöjä noudattava, tekstitiedosto. xml-tiedostojen
hienous onkin nimenomaan niiden yksinkertaisuudessa ja helppokäyttöisyydessä.
Pienenä piikkinä nykyajan työhakemusten ja CV:den täyttäville kirjainlyhenteille
kehottaisinkin kaikkia yllä olevan lukeneita (jotka eivät vielä ole laittaneet)
laittamaan CV:hinsä maininnan xml-osaamisesta.
Nyt kun taulukkoon tulostettavat tiedot ovat olemassa xml-tiedostossa on aika tehdä
tiedot xml-tiedostosta nettisivulle tulostava php-funktio printXMLTable:
function printXMLTable($fname)
{
$xml = simplexml_load_file($fname);
echo($fname);
echo("<table class=\'xml_table\'>");
echo("<tr class=\'xml_table_tr\'>");
echo("<td class=\'xml_table_td\'>");
echo("Suomenkielinen nimi:");
echo("</td>");
echo("<td class=\'xml_table_td\'>");
echo("Tieteellinen nimi:");
echo("</td>");
echo("<td class=\'xml_table_td\'>");
echo("Englanninkielinen nimi:");
echo("</td>">;
echo("<td class=\'xml_table_td\'>");
echo("Ruotsinkielinen nimi:");
echo("</td>");
echo("</tr>");
foreach ($xml->butterfly as $bf) {
echo("<tr class=\'xml_table_tr\'>");
foreach ($bf->children() as $child) {
echo("<td class=\'xml_table_td\'>");
echo($child);
echo("</td>");
}
echo("</tr>");
}
echo("</table>");
}
Yllä oleva erittäin yksinkertainen funktio printXMLTable riittää xml-tiedostoon
tallennettujen tietojen tulostamiseksi nettisivuilla näkyväksi table-elementiksi.
Kuten yllä olevasta koodista näkee olen käyttänyt taulukon muotoilemiseksi
table, tr ja td -elementeille class-attribuuttia ja piilottanut näin itse tyylimuotoilut
järkevään tapaan css-tiedostoon tallennettaviksi riveiksi:
table.xml_table
{
position: static;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
width: 650px;
font: normal normal normal 12px arial;
border: solid 2px #000000;
}
tr.xml_table_tr
{
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
}
td.xml_table_td
{
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
background-color: #99CCFF;
}
Lopputuloksena on alla näkyvä xml-tiedostosta luettava taulukko:
| Suomenkielinen nimi: | Tieteellinen nimi: | Englanninkielinen nimi: | Ruotsinkielinen nimi: |
|
Amiraali
|
Vanessa atalanta
|
Red Admiral
|
Amiral
|
|
Angervohopeatäplä
|
Brenthis ino
|
Lesser marbled fritillary
|
Älggräspärlemorfjäril
|
|
Haapaperhonen
|
Limenitis populi
|
Poplar Admiral
|
Aspfjäril
|
4) Yksi käytetyimmistä php-skripteistä on tulostaa php-koodin avulla
kalenteri omille nettisivuilleen. Minäkin olen lisännyt kalenterin omille nettisivuilleni,
joten esittelen tässä esimerkissäni nyt sen lähdekoodin:
function printCalender()
{
$today = getdate();
$firstDay = getdate(mktime(0,0,0,$today['mon'],1,$today['year']));
$lastDay = getdate(mktime(0,0,0,$today['mon']+1,0,$today['year']));
$firstwday = $firstDay['wday'];
$lastwday = $lastDay['wday'];
$currentdate = $today[mday];
if($firstwday == 0)
{
$firstwday = 7;
}
if($lastwday == 0)
{
$lastwday = 7;
}
$mon = $today['mon'];
if( $mon == "1")
{
$mon = "Tammikuu";
}
else if( $mon == "2")
{
$mon = "Helmikuu";
}
else if( $mon == "3")
{
$mon = "Maaliskuu";
}
else if( $mon == "4")
{
$mon = "Huhtikuu";
}
else if( $mon == "5")
{
$mon = "Toukokuu";
}
else if( $mon == "6")
{
$mon = "Kesäkuu";
}
else if( $mon == "7")
{
$mon = "Heinäkuu";
}
else if( $mon == "8")
{
$mon = "Elokuu";
}
else if( $mon == "9")
{
$mon = "Syyskuu";
}
else if( $mon == "10")
{
$mon = "Lokakuu";
}
else if( $mon == "11")
{
$mon = "Marraskuu";
}
else if( $mon == "12")
{
$mon = "Joulukuu";
}
echo '<table class="pvmTable">';
echo ' <tr class="dateField"><td colspan="7">'.$mon." - ".$today['year']."</td></tr>";
echo '<tr class="daysField">';
echo ' <td>Ma</td><td>Ti</td><td>Ke</td><td>To</td>';
echo ' <td>Pe</td><td>La</td><td>Su</td></tr>';
// Display the first calendar row with correct positioning
echo '<tr class="numbers_row">';
$actday = 1;
for($i=1;$i<$firstwday;$i++)
{
echo '<td> </td>';
$actday++;
}
$dayindex=1;
for($i=$actday;$i<=7;$i++)
{
if ($dayindex == $today['mday'])
{
$class = ' class="actday"';
}
else
{
$class = ' class="numbers_td"';
}
echo "<td$class>$dayindex</td>";
$dayindex++;
}
echo '</tr>';
//Get how many complete weeks are in the actual month
$fullWeeks = floor(($lastDay['mday']-$dayindex)/7);
for ($i=0;$i<$fullWeeks;$i++)
{
echo '<tr>';
for ($j=0;$j<7;$j++)
{
if ($dayindex == $today['mday'])
{
$class = ' class="actday"';
}
else
{
$class = ' class="numbers_td"';
}
echo "<td$class>$dayindex</td>";
$dayindex++;
}
echo '</tr>';
}
//Now display the rest of the month
if ($dayindex <= $lastDay['mday'])
{
echo '<tr>';
for ($i=0; $i<7;$i++)
{
if ($dayindex == $today['mday'])
{
$class = ' class="actday"';
}
else
{
$class = ' class="numbers_td"';
}
if ($dayindex <= $lastDay['mday'])
{
echo "<td$class>$dayindex</td>";
}
else
{
echo '<td> </td>';
}
$dayindex++;
}
echo '</tr>';
}
echo '</table>';
}
Yllä oleva koodi on melko pitkähkö, joka johtuu siitä, että itse kalenteri-tablen
generoiminen ei ole ihan suoraviivainen ongelma (kuukausissa on eri määrä päiviä,
kuukaudet alkavat eri viikonpäivinä, kuukausissa on eri määrä viikkoja, jne...)
Kuitenkin itse php-koodissa on vain muutama oleellinen kohta: a) päivämäärä haetaan
getdate-funktiolla, b) echo-funktion kutsuilla tulostetaan taulukon (table)
muodostavat xhtml-elementit nettisivulle, 3) tulostan funktiossa table, tr ja
td -elementeille class-attribuutin, jonka avulla voin asettaa taulukon tyylimuotoilut
omassa stylesheet (.css) -tiedostossa.
Hyvän koodaus tavan mukaan yllä olevan table-taulukon muotoilut on hyvä laittaa
omaan css-tiedostoonsa:
table.pvmTable
{
background: #6699FF url('pics/tableBg20.jpg');
width: 200px;
height: 150px;
margin: 0px;
padding: 0px;
}
tr.dateField
{
text-align:center;
font: normal normal bold 12px arial;
}
tr.daysField
{
font: normal normal normal 10px arial;
}
tr.numbers_row
{
font: normal normal normal 10px arial;
}
td.numbers_td
{
font: normal normal normal 10px arial;
}
td.marked_td
{
font: normal normal normal 10px arial;
background-color: #FFFF00;
}
td.marked_actday_td
{
font: normal normal normal 10px arial;
background-color: #FFFF00;
}
td.actday
{
font: normal normal normal 10px arial;
background-color:#FFFFCC;
}
Yllä olevin css-asetuksin kalenteri näyttää tältä
(ulkoasu on css-koodin avulla helppo sopeuttaa omille nettisivuille):
| Helmikuu - 2012 |
| Ma | Ti | Ke | To | Pe | La | Su |
| | | 1 | 2 | 3 | 4 | 5 |
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | | | | |
5) Koska php-kielen ensisijainen käyttötarkoitus on nimenomaan tarjota palvelinpuolen toiminnallisuutta
nettisivuille, lienee sopivaa ottaa viimeiseksi esimerkiksi vieraskirjan toteuttaminen nettisivuille.
"Isot pojat" totettavat vieraskirjansa erilaisten tietokantaratkaisujen avulla, mutta
pitäydyn tässä yksinkertaisuuden ja jo edellä esittelemäni xml-tiedostojen vuoksi xml-pohjaisessa
toteutuksessa. Etuna tässä ratkaisussa on lisäksi se, ettei tällaisen vieraskirjan omaavalla palvelimella
tarvitse olla tietokantatukea, php-tuki riittää. Lisäksi normaalin vieraskirjan tapauksessa xml-tiedosto
on aivan tarpeeksi hyvä tapa säilöä tietoa, sillä onhan siinäkin tiedot säilötty rakenteellisesti hyvin.
Luodaan vieraskirjaa varten ensin xhtml-lomake (form), jonka avulla käyttäjä voi antaa
haluamansa palautteen. Huomautan tässä yhteydessä, että lomakkeen voi laatia myös flashilla /
ActionScript 3:lla, koska vastaavanlainen php-toteutus toimii niidenkin kanssa.
xhtml-sivuille lisättävän xhtml-lomakkeen koodi on
<div id="guestDiv">
<form action='saveForm.php' onsubmit='send_form();' method='post' id="guestForm">
Nimi: <input type='text' name='name' size='20'><br />
Viesti:<br />
<textarea name='comment' rows='5' cols='40'></textarea><br />
<input type='submit' name='submit' value='Lähetä'>
</form>
<br /><br />
<a name="notes"></a>
<?php
loadForm();
?>
</div>
Hyvän koodaustavan mukaisesti laitetaan taas lomakkeen ja lomakkeen sivältävän div-elementin muotoilut
css-tiedostoon:
#guestDiv
{
position: static;
width: 500px;
font: normal normal bold 14px arial;
font-family: "Comic Sans MS", arial;
text-align: left;
margin: 0px 0px 0px 150px;
padding: 0px 0px 0px 0px;
}
#guestForm
{
position: static;
margin: 0px 0px 0px 0px;
padding: 0px 0px 0px 0px;
}
Toteutetaan seuraavaksi php-koodin avulla käyttäjän antaman palautteen tallentaminen
xml-tiedostoon. Olen kirjoittanut formin action-atribuuttiin tiedoston nimen, joka ajetaan
kun lomake lähetetään. Ajettava php-koodi on siis tässä tiedostossa saveForm.php:
<?php
$Name = $_POST["name"];
$Comment = $_POST["comment"];
$Comment = ereg_replace("[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*", "<a href=\"\\0\">\\0</a>", $Comment);
$Name = stripslashes($Name);
$Comment = stripslashes($Comment);
if( $Name != '' && $Comment != '')
{
$xmlName = "GuestBook.xml";
$xml = simplexml_load_file($xmlName);
$noteText = "<name>" . $Name . "</name><comment>" . $Comment . "</comment>";
$xmlNoteNode = $xml->addChild("note");
$xmlNameNode = $xmlNoteNode->addChild("name",$Name);
$xmlCommentNode = $xmlNoteNode->addChild("comment",$Comment);
$xml->asXML("GuestBook.xml");
}
header("Location: php-perusfunktiot.php#notes");
?>
Jälleen ei voi kuin ihmetellä kuinka php-kielen avulla voi muutamalla koodirivillä saada
tiedot tallennettua xml-tiedostoon.
Tämän jälkeen jäljelle jää vain vieraskirjan sisällön tulostaminen nettisivuille. Tämä onnistuu vaikkapa
tiedostoon basic-php-functions.php tallentamani funktion
function loadForm()
{
$xmlName = "GuestBook.xml";
$xml = simplexml_load_file($xmlName);
foreach ($xml->note as $notes) {
foreach ($notes->children() as $child) {
if($child->getName() == "comment")
{
echo("Viesti: ");
echo($child);
echo("<br /><br /><br />");
}
else
{
echo("Nimi: ");
echo($child);
echo("<br />");
}
}
}
}
Vieraskirja on nyt valmis, mutta siinä on vielä kiusallinen ominaisuus: se ei muistuta
käyttäjää kenttien jäädessä tyhjäksi. Tämä käyttäjän antaman syötteen tarkistus
on kätevintä tehdä jo käyttäjän nettiselaimessa, joten kätevin työkalukin tämän suorittamiseen
on JavaScript-funktio, jonka voi laitaa laukeamaan lomakkeen onsubmit-attribuutista.
Itse send_form-funktio on lyhyt ja se huomauttaa käyttäjää ainoastaan tyhjästä syötteestä.
Samalta pohjalta olisi kuitenkin helppo tehdä paljon edistyneempiä syöteentarkastajia.
function send_form()
{
var valid = true;
if ( document.getElementById("nameID").value == "" )
{
alert ( "Nimikenttä ei saa olla tyhjä!" );
valid = false;
}
if ( document.getElementById("commentID").value == "" )
{
alert ( "Viestikenttä ei saa olla tyhjä" );
valid = false;
}
if( valid == false)
return;
return true;
}
Lupasin antaa tässä oppaassa käyttämäni php-funktiot oppaani lopussa, joten tässä
ne ovat tiedostossa
basic-php-functions.txt
(Muuta tiedoston nimi .php-loppuiseksi ja lisää koodin ensimmäiseksi riviksi
<?php ja viimeiseksi riviksi ?>).
1 päivitys oppaaseeni: Kiitos Hp:lle hyvästä ja asiantuntevasta alla olevasta palautteesta
(lisäsin Hp:n tekstiin virheellisen toteutukseni karsimat äö-kirjaimet).
Juuri tuollaisen palautteen vuoksi näitä "oppaita" jaksaa tehdä
(koska näissä oppii kaikki osapuolet, myös itse).
Sitten virheeseeni php-koodissa. hyödylliseen ereg_replace-funktioon kannattaa
tutustua vaikka osoitteessa
http://fi.php.net/ereg_replace
(Sen sijaan, että itse alkaisin selittää funktiota jota en täysin ymmärrä,
jätän asia minua viisaammille). Joka tapauksessa tuon linkin perusteella kokeilin
laittaa viestikirjaani ominaisuuden korvata kaikki http:// alkuiset tekstit
linkeillä. Ja tuo näyttää toimivan! Ja se yksi koodirivi joka tuon korvauksen
tekee on
$Comment = ereg_replace("[a-zA-Z]+://([.]?[a-zA-Z0-9_/-])*", "<a href=\"\\0\">\\0</a>", $Comment);
No, php-koodi ei ole aina mukavan helppotajuisen näköistä, mutta tehokkaasti tuo asiansa
hoitaa.
Muutenkin Hp:n kommentit xhtml:stä ja css:stä ovat lukemisen arvoiset.
Omista kokemuksistani, näiden standardien seuraamisessa voisin ottaa pari esimerkkiä.
Ehkä hauskin (tai surullisin) esimerkkini on valid css-logon lisäämisestä.
Esim. Tämän sivun css-validointia vastaavalla
sivulla
annetaan linkkiosoite:
Kyseisellä sivulla pyydetään lisäämään linkkiteksti:
http://jigsaw.w3.org/css-validator/validator?uri=http%3A%2F%2Fwww.talaakso.fi
%2Fsuomi%2Fohjelmointi%2Fphp%2Fphp-perusfunktiot.css&profile=css21&usermedium=all&warning=1
, mutta ei varoiteta että & merkit linkissä pitää korvata & kirjoituksella, jotta xhtml-validaattori ei valita
tuosta. Eli siis lisäämällä sokeasti valid css-tunnuksen sivuilleen voi samalla poistaa valid xhtml-tunnuksen sivuiltaan.
No, ei tuolle hirveän montaa kertaa jaksa nauraa. Näitä vastaavia leikkaa/liimaa -ongelmia on etenkin linkkiosoitteiden
ja img-tagin alt-attribuutin puuttumisten kanssa.
css-tiedostojen kanssa minua on eniten harmittanut se, että paljon käyttämässäni osittainen
läpinäkyvyys muotoilussa ei tueta standardia, vaan joudun joka kerta kirjoittamaan (leikkaamaan/liimaamaan)
kolme eri varsiota nettiselaintuen varmistamiseksi:
/* for IE */
filter:alpha(opacity=80);
/* CSS3 standard */
opacity:0.8;
/* for Mozilla */
-moz-opacity:0.8;
Käytännössä kaikki kolme versiota ovat identtisiä, mutta ne kuitenkin kirjoitetaan eri tavalla,
ei kovin kätevää! Ja tietenkään tuo ei ole enää validia css:ää.
Eli johtopäätöksenä äskeisestä. Standardien noudattamisessa täytyy yrittää käyttää tervettä
maalaisjärkeä. Sillä ei ole mitään mieltä tehdä standardin mukaiset sivut, jotka näkyvät
vain harvoille sellaisina kuin ne pitääkin näkyä.
Mutta yleisellä tasolla standardien noudattaminen on järkevää: a) se vähentää omaa turhaa työtä
(joka syntyy erilaisten vaihtoehtoisten toteutustapojen koodaamisesta), b) se palkitsee
myös muita järkevästi standardeja noudattavia.
Takaisin PHP-ohjelmoinnin etusivulle