Bidouillages Introduction Comment ne pas afficher un lien qui pointe vers la page sur laquelle il est situé en shtml La même chose, mais en PHP Insérer le nom d’une page dans le sujet d’un mail

Le SHTML
(Serveur Side Include, SSI)

Introduction

Le shtml n’est, à mon humbe avis, plus d’une très grande utilté avec le développement des CMS qui automatisent et facilitent la mise en ligne d'articles, photos etc. Néanmoins, il sera d’une aide précieuse pour ceux qui aiment encore à faire des sites artisanaux, édifiés patiemment à la main…

Cette page tente de fournir des « astuces » pour le langage shtml. Pour une explication complète, on se rendra sur ce site. On évitera, par contre, cette page sur ce même site, puisque c’est justement à cause de l’incompréhension de l’exemple cité que j’ai fait ce texte (voir plus bas : « Comment ne pas afficher un lien qui pointe vers la page sur laquelle il est situé »).

Pour expliquer rapidement ce qu’est le langage shtml :

- Il se rapproche du C++ (d’après ce que m’a dit un mien ami). C’est donc un langage de programmation. Mais il ne faut pas avoir peur de cela, car il n’y a qu’un faible nombre d’« instructions » et de « variables d’environnement ». Et celles vraiment utiles se limitent à une dizaine. Qui plus est, vous pouvez effectuer des copier/coller pas trop fastidieux.

- Il est interprété côté serveur. Le fichier qui arrive jusqu’au navigateur est donc du pur html. Et la page se trouve allégée de tout autre élément, à la différence de Javascript.

- Sa principale utilité est de permettre d’inclure par la fonction include une page html dans une autre. Ainsi, la barre gauche de navigation de cette page [n'existe plus] est-elle en fait située dans un autre fichier, que l’on appelle de cette manière :

<!--#include virtual="../navigation.shtml" -->

Le principal intérêt est de n’avoir à modifier qu’un seul fichier lorsque l’on veut changer l’aspect d’un site ou ajouter un nouvelle page à une sous section.

Dans ce second cas, on rajoutera un lien dans le seul fichier de la barre de navigation, qui est appelé, et donc visible dans l’ensemble des fichiers de la sous section.

Ici, une page type et les fichiers inclus de ce site.

Comment ne pas afficher un lien qui pointe vers la page sur laquelle il est situé (shtml)

Donc, si je me suis bien expliqué, vous aurez compris que les barres de navigation étant incluses, un lien pourra se retrouver sur la page vers laquelle il pointe. Aussi faut-il demander au serveur de ne pas l’afficher en tant que lien, mais en tant que texte simple dans ce cas. Après avoir usé deux informaticiens programmeurs (merci Adonf et Tom-Tom), sur l’exemple qui était donné sur l’une des pages du Scarabée (voir l’intro) on a réussit à trouver comment faire. On y parviendra en écrivant, dans la page incluse, de cette manière :

<!--#if expr="$DOCUMENT_NAME != pagex.shtml" --><a href="pagex.shtml">texte du lien</a><!--#else -->texte tout court<!--#endif -->

Que l’on peut traduire par :

Si l’expression "DOCUMENT_NAME" (qui est « quelque-chose.shtml ») est différent (!=) du nom de la page vers laquelle le lien pointe, alors afficher le lien, sinon, afficher le texte sans le lien. Et c’est tout, ceci étant tout de même à faire pour l’ensemble des liens.

On peut insérer autant de balises que l’on veut dans cette expression. Par exemple, rajouter des balises <b></b> pour que l’un des deux choix apparaisse en gras.

Par contre dans le cas où les fichiers concernés auraient le même nom, car non situés dans le même dossier (type index.shtml), il n’est pas possible, a priori, de remplacer l’expression "DOCUMENT_NAME" par "DOCUMENT_URI", qui indique l’ensemble du chemin d’accès. Je ne sais pas pourquoi.

Si je me suis mal exprimé, voir toujours la page type de ce site.

Comment ne pas afficher un lien qui pointe vers la page sur laquelle il est situé (PHP)

Deux différentes façons de faire, à ma connaissance, sous PHP. À noter qu’aucune de ces deux écritures ne fonctionnent sous free.fr, mais que les deux fonctionnent sous amen.fr ou avec Easyphp 1-7 (PHP 4.3.3.3).

<?php if ( $REQUEST_URI == "/lien.php3" ) {
?>
Nom sans lien
<?php
} else {
?>
<a href="lien.php3" title="Titre du lien">Nom du lien</a>
<?php
}
?>

Ou

<?php
if ( $REQUEST_URI == '/lien.php3' ) {
echo ( 'Nom sans lien' );
} else {
echo ( '<a href="lien.php3" title="Titre du lien">Nom du lien</a>' );
} ?>

Vu que je ne m’y connais absolument pas en PHP, ces écritures ne sont certainement pas très « académiques ». Il y a peut-être mieux que $REQUEST_URI qui peut poser des problèmes parfois (lorsqu’il est modifier, avec le recalcul d’une page sous Spip par exemple).

Insérer le nom d’une page dans le sujet d’un mail

Ici, l’adresse mail est faussée pour éviter les spams.

Il est pratique d’indiquer le nom de la page dans le sujet d’un mail lorsque l’on a de nombreuses pages et pour mieux comprendre certains messages du type :

« Subject : Ton site »
« Il est cool ton texte, mais la fin laisse à désirer. »

Dans ce cas il n’y a plus qu’à renvoyer un mail pour complément d’information.

Le principe de base est donc d’écrire :

<a href='mailto:test@test.org?subject=Présentation du shtml'>Mail</a>

Ce qui donne :

Mail

Or, il vaut mieux, grâce au shtml, mettre son mail dans un fichier inclus, ne serait-ce que pour faciliter les changements d’adresse. Là, il n’est donc plus possible d’indiquer un sujet fixe, puisqu’il va se retrouver sur l’ensemble des pages du site. Il faut donc utiliser cette formule :

<a href='mailto:test@test.org?subject=<!--#echo var="DOCUMENT_NAME" -->'>Pour m’écrire, cliquer ici</a>

Ce qui donne :

Pour m’écrire, cliquer ici

La présence de guillemets différents (' ' et " ") est indispensable si vous utilisez un éditeur html graphique pour que celui-ci puisse faire la différence entre l’expression html (le lien) et ssi.

Remarquer que, pour ce site, je remplace l’expression "DOCUMENT_NAME" par "DOCUMENT_URI" qui indique tout le chemin d’accès au fichier (voir contact dans la barre de navigation de gauche [n'existe plus]), car, ayant de nombreux dossiers (une vingtaine), il y a autant de fichiers qui se dénomment index.shtml.

À noter que je ne l'utilise plus dorénavant : pour lutter contre le spam, il est préférable d'utiliser un encodage ou passer par javascript. dans ce second cas, on utilise la variable javascript "title=escape(document.title)" qui ramène directement le titre de la page.



Meilleurs rendu avec Firefox ou Opera