Les 12

In deze les leert u hoe u zelf functies kunt schrijven, en hoe je een mooie gvrafische teller op je site kunt plaatsen.

Een grafische teller

Wat zou je denken van een mooie grafische teller op je site ? Met PHP is dat heel makkelijk. We hebben in de cursus gezien dat we met include of require, code in onze pagina kunnen invoegen die elders staat. We gaan daar nu gebruik van maken om een funktie te schrijven, die voor ons onze teller toont.

Wat gaan we aanmaken ?

* Een teller file die we pagteller.txt gaan noemen
* Grafische tellertjes
* Een funktie voor onze teller

Onze pagteller.txt file

We maken met onze tekseditor deze file met als inhoud 25791. (permissies !)
Nu hebben we nog gif bestandjes nodig voor onze getallen. Die gaan we 0.gif tot en met 9.gif noemen. Ik toon hier dewelke ik gebruik :




Nu, ik ben geen grafische expert. Ik heb die buttons gewoon aangemaakt met The Gimp. Dit gaat heel eenvoudig in zijn werk. Iedere unix gebruiker zal The Gimp wel op zijn schijf staan hebben, als je nu Windows gebruikt als besturingssysteem, geen probleem, The Gimp bestaat immers ook voor Windows en is helemaal gratis de downloaden en te gebruiken.
Downloaden doe je vanaf  http://www.gimp.org/windows . Of je gebruikt natuurlijk het grafisch programma waar jij het liefst mee werkt.

Hoe begin je eraan ? Wel om te beginnen start The Gimp op. Dan kies je het menu Xtns=>Script-Fu=>Web Pages Themes=>Alien Glow=>Button...
Speel nu maar wat met The Gimp totdat je een teller hebt die je aanstaat. Intussen gaan we wat verder coden :-)

De functies

Programmeurs hebben er een grote hekel aan om steeds dezelfde code terug te schrijven. We hebben nu een teller, en we willen deze tonen op elke webpagina. Je kunt natuurlijk de code op elke pagina herhalen, maar zoals gezegd, we moeten daarvoor een andere oplossing vinden. Om daaraan tegemoet te komen hebben we functies ter onzer beschikking.

PHP komt al standaard met heel wat functies die we kunnen gebruiken, en waarvan we in deze cursus al ruim gebruik hebben gemaakt. Functies zoals fopen(), fread(), count(), date() enz .... zoals je ziet wordt een functie dus aangeroepen met zijn naam en de argumenten tussen de haakjes. Wel, wij gaan nu gewoon hetzelfde doen, we gaan ook een functie schrijven met wat wij willen dat hij doet, de enige vereiste die daarvoor nodig is, je moet PHP vertellen waar die functie staat en daarvoor hebben we dan include of require voor.
We hebben nu onze pagteller.txt met inhoud 25791. We willen nu dat dit getal getoond wordt op elke pagina. We zullen dus een funktie schrijven daarvoor dat we lesfunktie.php gaan noemen en waarin we de code opnemen. De funktie zelf, gaan we gewoon teller noemen, we kunnen deze dan aanroepen op elke pagina die we wensen met de instructie teller().

Code  lesfunktie.php

<?php
function teller($file) {
$pointer=fopen("$file","r+");
$teller=fgets($pointer,11);
//we verwijderen de eventuele white spaces
$teller=trim($teller);
fclose($pointer);
echo "<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\"><tr>";
// We bepalen hoe lang ons getal is
$lengte=strlen($teller);

// We halen nu één voor één een cijfer uit onze tellerfile
// Naargelang de waarde van het getal tonen we de imagefile
// dat verbonden is aan dat getal

for($i=0;$i<$lengte;$i++) {
$pos=substr($teller,$i,1);
echo '<td><img src="images/' . $pos . '.gif"></td>';
}
echo "<br></tr></table></div>";
}
?>

Dit is allemaal bekende code voor ons. Het enige wat hier opvalt is het begin van de file. Daar plaatsen we :

function teller($file) { }

Daarmee geven we te kennen dat onze funktie teller heet en dat hij één argument meekrijgt, ($file). De code van de funktie wordt dan tussen de accolades geschreven.

Nu die $file ? Waar halen we die vandaan ? Wel heel eenvoudig, we sturen de waarde van $file mee vanuit onze pagina waar we de funktie aanroepen. In ons geval gaat $file de waarde pagteller.txt aannemen, zijnde onze teller file. In onze webpagina gaan we dus gewoon de teller aanroepen als volgt : teller($naam_van_onze_tellerfile);. Je ziet hier meteen de kracht van dergelijke funktie. Je kunt die teller funktie gebruiken voor om het even welke teller file, het enige wat je moet doen, is vertellen aan de funktie teller welke file je wilt zien.
We gaan dit nu allemaal eens in een webpagina gieten .

Code pag1.php

<?php
require("lesfunktie.php");
?>
<div align="center"><h2>Dit is onze pag1.php pagina</h2></div>

<!-- We gaan nu onze teller funktie oproepen om onze teller te tonen. -->
<?php
$tellerfile="pagteller.txt";
teller($tellerfile);
?>

<p>Nadat onze teller is getoond, gaan we gewoon verder met onze pagina.</p>

<p>Je kunt dus om het even waar in je pagina die funktie oproepen.</p>

<p>Ik wil die namelijk hier ook nog eens zien. Ik roep gewoon de funktie opnieuw op, en de teller wordt opnieuw getoond.</p>

<?php
$tellerfile="pagteller.txt";
teller($tellerfile);
?>

En aktie !

Nu, onze teller gaat hier gewoon de inhoud van de tekst file pagteller.txt tonen. We willen natuurlijk ook dat de teller met één verhoogd wordt en dat de nieuwe waarde wordt getoond. Wel, gewoon de functie lesfunktie.php wat aanpassen, zodat dat voor elkaar komt.

Pas nu op ! Ik ga hier een nieuwe functie aanmaken, namelijk lesfunktie2.php. Ik doe dit hier enkel en alleen om jullie de verschillen te tonen. Jullie blijven gewoon jullie lesfunktie.php gebruiken om tot hetzelfde resultaat te komen. Ik zal echter nu in mijn webpaginas require("lesfunktie2.php"); moeten opnemen voor ons volgend voorbeeld. Ik zal dit telkens doen als de functie veranderd. Jullie moeten echter alles in één file houden. Ik zal ook nog een pagteller2.txt aanmaken. Zo ga je de kracht zien van de functies.

Code lesfunktie2.php

<?php
function teller ($file) {
$pointer=fopen("$file","r+");
$teller=fgets($pointer,11);

//we verwijderen de eventuele white spaces
$teller=trim($teller);

#############################################
## Dit hier toevoegen aan je lesfunktie.php #
#############################################

// Nu gaan we onze teller met één verhogen
$teller++;

// We gaan nu onze nieuwe waarde wegschrijven in onze teller file
rewind($pointer);
fputs($pointer,$teller);

############################################
## alles hieronder blijft verder hetzelfde #
############################################

// en we sluiten onze file netjes af
fclose($pointer);

echo "<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\"><tr>";
// We bepalen hoe lang ons getal is
$lengte=strlen($teller);

// We halen nu één voor één een cijfer uit onze tellerfile
// Naargelang de waarde van het getal tonen we de imagefile
// dat verbonden is aan dat getal

for($i=0;$i<$lengte;$i++) {

$pos=substr($teller,$i,1);
echo '<td><img src="images/' . $pos . '.gif"></td>';
}
echo "<br></tr></table></div>";
}
?>

Nu maak ik een pag2.php aan waarin ik de gevens van pag1.php overneem, en dan het verschil laat zien.

Code pag2.php

<?php
require("lesfunktie.php");
require("lesfunktie2.php");
?>
<div align="center"><h2>Dit is onze pag2.php pagina</h2></div>

<!-- We gaan nu onze teller funktie oproepen om onze teller te tonen. -->
<?php
$tellerfile="pagteller.txt";
teller($tellerfile);
?>

<p>Nadat onze teller is getoond, gaan we gewoon verder met onze pagina.</p>

<p>Je kunt dus om het even waar in je pagina die funktie oproepen.</p>

<p>Ik wil die namelijk hier ook nog eens zien. Ik roep gewoon de funktie opnieuw op, en de teller wordt opnieuw getoond.</p>

<?php
teller($tellerfile);
?>

<p>Nu roep ik mijn tweede funktie aan die ik als voorbeeld heb gegeven.</p>

<p>Door het aanroepen van de funktie, zou de paginateller nu steeds met één moeten verhogen, van zodra je een refresh van de pagina doet.</p>

<?php
$teller2file="pagteller2.txt";
teller2($teller2file);
?>

En aktie !


We gaan nu onze final_funktie.php aanmaken. Ik wil echter nog een functie toevoegen. Namelijk de functie essetee(). Die gaat dan gewoon wat info printen over mezelf. Dit om te tonen hoe alles werkt. De nieuwe functie gaat dan essetee heten en de code wordt terug opgenomen tussen de accolades.

Broncode final_funktie.php

<?php
function teller($file) {
$pointer=fopen("$file","r+");
$teller=fgets($pointer,11);

//we verwijderen de eventuele white spaces
$teller=trim($teller);

####################################
## Dit hier toevoegen aan je lesfunktie.php #
####################################

// Nu gaan we onze teller met één verhogen
$teller++;

// We gaan nu onze nieuwe waarde wegschrijven in onze teller file
rewind($pointer);
fputs($pointer,$teller);

#################################
## alles hieronder blijft verder hetzelfde #
#################################

// en we sluiten onze file netjes af
fclose($pointer);

echo "<div align=\"center\"><table cellpadding=\"0\" cellspacing=\"0\"><tr>";
// We bepalen hoe lang ons getal is
$lengte=strlen($teller);

// We halen nu één voor één een cijfer uit onze tellerfile
// Naargelang de waarde van het getal tonen we de imagefile
// dat verbonden is aan dat getal

for($i=0;$i<$lengte;$i++) {
$pos=substr($teller,$i,1);
echo '<td><img src="images/' . $pos . '.gif"></td>';
}
echo "<br></tr></table></div>";
}

#######################################
## Ik voeg hier gewoon een nieuwe funktie toe #
#######################################

function essetee() {

echo "<br><br><strong>De auteur van deze cursus is : Serge Terryn</strong><br>";
echo "<strong>URL : <a href=\"http://www.essetee.be\">http://www.essetee.be</a></strong><br>";
echo "<strong>MSN : <a href=\"mailto:essetee@hotmail.com\">essetee@hotmail.com</a></strong><br>";
echo "<strong>ICQ : 763290</strong><br>";

}

?>
En we maken nu een nieuwe webpagina aan pag3.php
<?php
require("final_funktie.php");
?>
<div align="center"><h2>Dit is onze pag3.php pagina</h2></div>

<!-- We gaan nu onze teller funktie oproepen om onze teller te tonen. -->

<p>De waarde van je teller zou hier nu moeten staan. Telkens je reload doet moet hij nu met eentje verhogen :-)</p>

<?php
$tellerfile="pagteller2.txt";
teller($tellerfile);
?>

<p>En we roepen een bijkomende funktie op, namelijk essetee() .</p>


<?php
essetee();
?>

<p>En die funktie toont dus gewoon wat info over mij.</p>

Op die wijze kan ik overal in mijn paginas die info plaatsen door gewoon de functie essetee() aan te roepen.

En aktie !


Onthoud ! Steeds het juiste pad vermelden naar de plaats waar je funktie staat, zoniet ga je errors krijgen voor het aanroepen van een onbekende funktie.



Les 1 Les 2 Les 3 Les 4 Les 5 Les 6 Les 7 Les 8 Les 9 Les 10 Les 11 Les 12 Les 13 Home