II. Première approche▲
II-A. Les fonctions de Bufferisation de sortie▲
Le buffer c'est ce flux d'informations que votre serveur envoie vers le navigateur du client.
Lorsque vous vous écrivez :
echo '
Hello
World
!
'
;
vous ajoutez au buffer la chaine de caractère "Hello World!".
Il est possible, dans une certaine mesure, de contrôler ce buffer. Cela peut être très pratique, notamment lors de l'utilisation de la fonction header() au milieu de notre code.
En effet, en vidant le buffer de la page avant d'effectuer le header(), vous pourrez utiliser cette fonction n'importe où dans votre code.
//
//
exemple
de
redirection
sans
la
gestion
du
buffer
//
//
écrire
dans
notre
page
echo '
ceci
est
du
texte
'
;
//
//
redirigier
le
visiteur
header("
Location
:
http
:
/
/
www
.
developpez
.
com
"
);
//
=>
ERREUR
la redirection ne marche pas : il y a une alerte parce que des entêtes ont déjà été envoyés au navigateur.
Maintenant, utilisons les fonctions de gestion de la Bufferisation de sortie :
//
//
exemple
de
redirection
AVEC
la
gestion
du
buffer
//
//
démarrer
la
temporisation
ob_start();
//
//
écrire
dans
notre
page
echo '
ceci
est
du
texte
'
;
//
//
vider
le
contenu
du
buffer
ob_clean();
//
//
redirigier
le
visiteur
header("
Location
:
http
:
/
/
www
.
developpez
.
com
"
);
//
=>
tout
est
OK
Cette fois, aucune erreur : nous avons vidé le buffer avant d'effectuer notre redirection.
La gestion de la Bufferisation s'effectue avec la fonction ob_start(). Cette fonction temporise l'envoi du flux (du buffer), de telle sorte qu'on puisse envoyer le buffer d'un seul coup, soit à la fin de notre code (ce qui se fait automatiquement), soit à un moment de notre choix.
Voici la liste des principales fonctions de gestion de la Bufferisation de sortie :
Fonction | Description |
---|---|
ob_start() | Démarre la temporisation du flux. A placer en début de code |
ob_get_contents() | Retourne le buffer (temporisé) |
ob_clean() | Vider le buffer. Utile, par exemple, pour utiliser la fonction header() |
ob_get_clean() | Retourne le buffer et le vide. Equivalent de ob_get_contents() + ob_clean() |
ob_flush() | Envoie le buffer (temporisé) |
Examinons maintenant ce qu'il est possible de faire grâce à ces fonctions, en développant une petite Classe de génération de scripts JavaScript.
II-B. Exemple : remplacer du texte▲
Imaginons que nous voulions, pour une raison ou une autre, remplacer toutes les occurences de "toto" sur la page par "titi" :
//
//
démarrer
la
temporisation
ob_start();
.
.
.
//
//
Notre
page
contient
le
mot
"toto"
echo '
Hello
toto
!
'
;
//
//
récupérer
le
tampon
de
sortie
et
le
vider
$content
=
ob_get_clean();
//
//
réécrire
le
contenu
de
la
page
$content
=
str_replace('
toto
'
,
'
titi
'
,
$content
);
echo $content
;
La page affichera :
Hello titi !
Nous avons capturé le buffer et l'avons modifié selon nos souhaits. Cela peut être très pratique, par exemple pour ajouter des balises alt et title à toutes les images de la page qui n'en n'ont pas...
II-C. Comment procéder ?▲
Pour pouvoir réutiliser facilement notre code, nous allons développer une classe. Notre premier souci doit être la facilité d'utilisation de cette classe; le second sa compatibilité avec à peu près n'importe quel script ou framework JavaScript.
La solution que je vous propose de tester est une solution parmi d'autres, et il est possible d'en imaginer de plus efficaces ou plus rapides. Toutefois, notre solution nous permettra de comprendre comment fonctionnent les fonctions de Gestion de buffer de PHP.
Nous allons donc créer une classe générique qui va donner les méthodes principales de toutes les classes filles qui vont hériter d'elle. Cette Classe, jamais instanciée, sera donc abstraite.
Par ailleurs, il est possible d'imaginer qu'on utilise plusieurs fois le même script sur la page (dans le cas, par exemple, de miniatures pour un album photo). Les propriétés et attributs de cette Classe (identifiants des objets HTML, répertoires...) devront donc être partagés par l'ensemble des instances de cette Classe; c'est pourquoi nos méthodes et attributs seront Static.
II-D. Quoi faire et comment ?▲
Quelles sont les méthodes principales que nous aimerions avoir pour nous simplifier la gestion des scripts JavaScript dans nos fichiers PHP ?
Nous pouvons déterminer quatre points, commun à tous (ou presque) les scripts JavaScript, qui sont indispensables pour la génération de code JavaScript depuis le PHP :
- Savoir si le script est déjà initialisé dans la page
- Gérer les variables des scripts (identifiants des objets HTML, configuration, etc.)
- Ajouter dans la balise head de notre code un appel de fichier (.css ou .js) à n'importe quel moment
- Ajouter dans la balise head un script JavaScript
Nous allons donc voir comment proposer une solution pour chacun d'entre eux.