Faire son site perso

Le minimum - Principes - HTML - JavaScript - MySQL - PHP


Le minimum sommaire Sommaire

Le minimum pour faire créer son site perso Web, c'est :

Si on a rien compris à ce qui a été dit ici, on peut aller vérifier quelques termes techniques sur un Dico du Web ou me demander des précisions

Puis, il faut se lancer...

Principes sommaire Sommaire

Quelques principes, fruit de quelques erreurs et galères.

  1. Conception
    Il faut mieux bien concevoir sur la papier l'architecture du site, en s'inspirant de ce que l'on a vu sur le Web. Il sera toujours temps après de voir si on peut le faire. Par architecture, j'entends des réponses aux questions suivantes :
  2. Contenu
    Que mettre dans le site ? Il faut mieux s'assurer que cela ne choque, voire ne soit pas illégal...
  3. Se renseigner pour la réalisation. Pour cela, il y a beaucoup de sites qui proposent des exemples, des conseils plus ou moins avisés. Je reviendrais sur ces conseils dans les rubriques suivantes.
  4. Référencer son site
    Cela correspond à le faire connaître, il y a principalement deux types de référencement gratuit. Je ne parle pas des moteurs de recherche qui fonctionnent 'automatiquement'.
HTML sommaire Sommaire

Le HTML est le langage de base pour créer des documents sur Internet. si on peut très bien commencer à créer des pages et un site sans rien y connaître, il faut cependant assez vite s'y mettre.

Bien sûr, on n'est pas obligé de 'tout savoir'. Cependant, j'ai un bon document de référence qui se trouve sur Internet. De même, on peut s'intéresser au DHTML (Dynamic HTML) en utilisant le document suivant.

En simplifié et accéléré, tout fonctionne avec des "tags" qui disent ce qu'il faut faire avec le texte qui suit. Il y a le "tag" ouvrant et son pendant celui qui ferme. Ainsi un paragraphe commence par <p> et finit par </p>. de même, il existe des titres (<h1> ... <h6>), des liens (<a href="">), etc... Avec FontPage, on peut se rendre compte assez facilement de ce que l'on fait et de ce que cela cache.

Il est facile de créer de multiples pages HTML mais la gestion devient rapidement fastidieuse. On peut essayer d'uniformiser un peu la gestion de ces pages en uniformisant par des feuilles de style

Feuilles de Style

Les feuilles de style (extension .css) permettent de définir des constantes de bases dans toutes les pages du site. Il suffit de rajouter dans l'entête (entre <head> et </head>), la commande suivante :

<link rel="StyleSheet" type="text/css" href="perso.css"> 

Dans le fichier perso.css, on définit alors par exemple que les tags p, h1, h2, h3 utiliseront la fonte par défaut "Comic Sans MS".

p, h1, h2, h3
{font-family: Comic Sans MS, Arial}

Bien sûr, on peu multiplier ce genre de définition...

Meta Tags

Ils sont principalement utilisés par les moteurs de recherche, mais servent aussi pour certains annuaires. Ils permettent de définir des caractéristiques de la page. Par exemple, on définit le titre de la page, par le meta tag suivant:

<meta name="title" content="Faire son site perso">

Finalement, le HTML est assez robuste mais requiert rapidement une énorme énergie pour gérer les multiples pages qui servent aux diverses informations d'un site. C'est pourquoi, il est nécessaire de passer à l'étape suivante simplifier et uniformiser, en un mot gagner du temps dans la gestion de son site.

JavaScript sommaire Sommaire

L'avantage du JavaScript, c'est que cela permet de 'programmer' et donc de générer des pages 'à la volée'. Ce qui est aussi agréable, c'est que le JavaScript ne demande aucune installation de logiciel particulière pour l'interpréter, l'exécuter. Donc on peut développer et essayer sur son PC directement. Une dernière validation sera peut-être nécessaire une fois la mise à jour effectuée sur le serveur, encore que cela marche souvent directement...

Il existe un bon document de référence sur Internet, je l'utilise régulièrement. Alternativement, j'ai copié l'ensemble de ces documents pour reproduire cette référence sur mon PC (cela évite la connexion obligatoire). Par ailleurs, il existe de nombreux sites qui proposent des exemples de Javascript, un de mes préférés est l'Editeur JavaScript.

Cela dit, je vais présenter des exemples de ce que l'on peut faire avec un peu de JavaScript.

Une page de cadre suffit !

Comme, vous pouvez vous rendre compte, ce site utilise souvent un sommaire à droite (Tour du monde / Photo / Dernières Nouvelles).

En Html, il faut à chaque fois gérer une page pour les cadres qui donne à chaque fois le sommaire à droite et ce que le chapitre au centre... Ce qui multiplie le nombre de page assez inutilement.

En JavaScript, il suffit de :

Afficher les pages de photos

De la même manière, on peut très bien gérer l'affichage de toutes les photos à l'aide de deux pages en JavaScript.

Pour cela, j'ai une page HTML qui me sert de sommaires de toutes les pages de photos que je vais appeler. J'appelle la page voulue par :

<a href="photo_book.htm?23">Page 23</a> ou <a href="frame.htm?photo_book.htm&photo_ref.htm&23">Page 23</a>

Enfin, tout est fait par photo_book.htm (plus exactement en combinaison avec frame.htm pour avoir la page de cadre):

  1. On définit dans un fichier de données (photo.js) toutes les pages de photos dans l'entête.
  2. On charge les données de la pages voulues (fonction loaddata).
  3. On affiche les vignettes des photos avec le titres et le lien pour afficher la photo en plus grand dans un tableau.

La page est donc :

<head>
<script
language="JavaScript">
<!--
var ar0 = "00";
var ar1 = "titre" ;
var dir = "photos" ;
var str = location.search;
if (str.length > 1)
   ar0 = str.substring(1,str.length);
// -->
</script>


<script src="include/photo.js"></script>
</head>
<body>

<script
language="javascript">
<!--
loaddata(ar0);

// Generate table
document.write('<h5>',ar1,'</h5>');
document.write('<table border="0">');

for (var i = 0; i < max; i++) {
    if ( i % 5 == 0 ) {
        document.write('</tr>');>
        document.write('<tr>');
    }

    if ( pht[i] == "" )
        document.write (
        ' <td valign="middle" align="center" ' ,
        ' style="border-style: outset; border-width: 2">',
        ' <font face="Comic Sans MS" size="2">',cmt[i],'</td>'
        )
    else
        document.write (
        ' <td valign="middle" align="center" ' ,
        ' style="border-style: outset; border-width: 2">' ,
        ' <a href="photo_view.htm?'dir,'&',pht[i],'&',cmt[i],'">' ,
        ' <img src="',dir,'/',pht[i],'_s.jpg" border="0" alt="',cmt[i],'"></a>' ,
        ' <br><font face="Comic Sans MS" size="1">',cmt[i],'</font></td>'
        ) ;
}
document.write('</table>');
// -->
</script>
</body>

Dans le fichier "include" photos.js, on a la définition :

  1. des variables.
  2. de la fonction loaddata.
  3. des différentes pages.

var max = 25
pht = new Array(max) // Define pictures lists
cmt = new Array(max) // Define comments on pictures

// Initialize values ...
for (var i = 0; i < max; i++) {
pht[i]="" ;
cmt[i]="" ;
}

function loaddata(page) {
dir="photos"
switch (page) {
case "23" : data23(); break;
case "22" : data22(); break;
...
}

function data23() {
ar1="Titre de la Page 23"
// Define values ...
var i=0
pht[i]="photo01"
cmt[i]="Commentaire photo01"
i++
pht[i]="photo02"
cmt[i]="Commentaire photo02"
i++
...
}

De la même manière, on affiche la photo en grand en utilisant un fichier JavaScript (photo_view.htm) en passant comme paramètres le répertoire, le nom du fichier et la description de la photo.

MySQL sommaire Sommaire

Pour encore automatiser le travail précédent, on peut penser à utiliser une base de données ou l'on a défini la table des photos et la table des pages de photos. Ce éviterait de gérer manuellement le fichier photo.js. Enfin, il faut une base de données. Le plus simple est d'utiliser MySQL (qui fonctionne de pair avec PHP). Une bonne documentation existe sur Nexen.

Free, fournit un bon outil de gestion de cette base de données. Enfin, pour aller plus loin il faut se lancer dans le PHP.

PHP sommaire Sommaire

On peut tout faire en PHP. Mais, pour moi, il y a une limitation; cela ne fonctionne que si :

Cependant, on peut multiplier les possibilités en utilisant les bases de données et s'affranchir ainsi de fichier fichier "include" en javascript. Cela revient donc à automatiser plus encore les pages qui sont pilotées par la base de données. A l'extrême limite, il pourrait n'y avoir qu'une seule page en PHP qui gère tout le site en fonction des paramètres passés à cette page. Pratiquement, il est plus logique de développer des pages différentes. Pour s'affranchir dans une certaine mesure des erreurs PHP (base indisponible, server en erreur), on peut toujours ajouter une réference à une page HTML.

<p align="center"><font size="1">Si l'affichage n'est pas correct, <a href="frame.htm?photo_book.htm&photo_ref.htm&31">cliquez-ici</a></font></p>

Un documentation de PHP existe aussi en ligne sur Nexen. PHP-Scripts propose de nombreux exemples de scripts PHP, mais ce n'est pas le seul site de ce genre.

Ainsi, dans ma page d'accueil , l'affichage d'une photo aléatoire et l'affichage des trois prochains anniversaires est fait en PHP.

Afficher une photo au hasard

Il suffit de:

Tout est dans le code suivant...

<script language="php">
# Define the seed for proper rounding
srand((double)microtime()*1000000);

# Define default values
$photo="photo01" ;
$comment="Commentaire Photo 01" ;
$groupe="Page01";
$page=1;

$free_login = 'login';
$free_passwd = 'Mot_de_passe';

# Connect to DB
$db = mysql_connect('sql.free.fr',$free_login,$free_passwd) or die ("probleme connexion");
@mysql_select_db($free_login,$db) or die ("probleme dans selection base");

# Check Connexion
if ($db <> 0) {

    # Get max value
    $sql = "SELECT MAX(pic_nbr) FROM photo" ;
    $res = mysql_query($sql,$db);
    $max = mysql_result($res,0,0);

    $id = rand(1, $max) ;

    # Get the photo !
    $sql = "SELECT a.pic_nam, a.pic_desc_txt, b.pic_grp_nam, b.pic_grp_pg ";
    $sql .= "FROM photo a, photo_grp b ";
    $sql .= "WHERE a.pic_nbr = $id AND a.pic_grp_id = b.pic_grp_id ";
    $res = mysql_query($sql,$db);
    $photo = mysql_result($res,0,0);
    $comment = mysql_result($res,0,1);
    $groupe = mysql_result($res,0,2);
    $page = mysql_result($res,0,3);

}

echo '<p align="center">' ;
echo '<a href="photo_view.htm?',$photo,'&',$comment,'">',$comment,'</a><br>' ; echo "\n" ;
echo '<a href="photo_view.htm?',$photo,'&',$comment,'">' ;
echo '<img src="photos/',$photo,'.jpg" border=0 width=180 alt="',$comment,'"></a><br>' ; echo "\n" ;

if ($page <> 0) {
    $page = sprintf("%02d", $page-1);
    $groupe = sprintf("<a href=\"frame.htm?photo_book.php&photo_ref.php&page=%s\">%s</a>", $page, $groupe) ;
}

echo '<font size=1>( catégorie : ',$groupe,')</font></p>' ; echo "\n" ;
@mysql_close($db) ;
</script>

Afficher les trois prochains anniversaires

Il suffit de:

Tout est dans le code suivant...

<script language="php">
# Define default values
$today=date("m")*100+date("d") ;
$year=date("Y");
$max=3;
$day=array("Dimanche","Lundi","Mardi","Mercredi","Jeudi","Vendredi","Samedi");
$mth=array("Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");

function display_birth ($name, $yr, $birth) {
    global $day, $mth, $year, $today ;
    $iyear = $year;

    if ( $birth + 0 < $today ) $iyear = $iyear + 1;
    if ( strlen($birth) < 4 ) $birth = "0" . $birth ;

    $imth=substr($birth,0,2);
    $iday=substr($birth,2,2)+0;
    echo '',$day[date ("w", mktime(0,0,0,$imth,$iday,$iyear) )],' ',$iday,' ',$mth[$imth-1],'</i> :' ;
    echo ' ',$name,' (',substr($yr,2,2),')' ;
    echo "\n";
}

$free_login = 'login';
$free_passwd = 'Mot_de_passe';

# Affiche la première ligne
echo '<p><b>Anniversaires</b>';

# Connect to DB
$db = mysql_connect('sql.free.fr',$free_login,$free_passwd) or die ("probleme connexion");
@mysql_select_db($free_login,$db) or die ("probleme dans selection base");

# Check Connexion
if ($db <> 0) {
    # Get the birthday !
    $sql = "SELECT a.prsn_frst_nam, a.brth_day_dat, a.brth_yr ";
    $sql .= "FROM person a ";
    $sql .= "WHERE a.brth_day_dat >= $today " ;
    $sql .= "ORDER BY a.brth_day_dat, a.prsn_frst_nam " ;
    $res = mysql_query($sql,$db);
    $row = mysql_numrows($res);

    for ($i = 0; $i < min($row,$max); $i++) {
        $frst_nam = mysql_result($res,$i,0);
        $brth_day = mysql_result($res,$i,1);
        $brth_yr = mysql_result($res,$i,2);

        echo '<br><i>';
        display_birth($frst_nam,$brth_yr,$brth_day);
    }

    if ( $row < $max ) {
        $sql = "SELECT a.prsn_frst_nam, a.brth_day_dat, a.brth_yr ";
        $sql .= "FROM person a ";
        $sql .= "WHERE a.brth_day_dat < $today " ;
        $sql .= "ORDER BY a.brth_day_dat, a.prsn_frst_nam " ;
        $res = mysql_query($sql,$db);
        $newrow = mysql_numrows($res);

        for ($i = 0; $i < min($newrow,$max-$row); $i++) {
            $frst_nam = mysql_result($res,$i,0);
            $brth_day = mysql_result($res,$i,1);
            $brth_yr = mysql_result($res,$i,2);

            echo '<br><i>';
            display_birth($frst_nam,$brth_yr,$brth_day);
        }
    }

}

echo '</p>';
echo "\n";
mysql_free_result($res);
@mysql_close($db) ;
</script>