Mise en place de la page d'accueil du site

Attention, depuis PHP 5.5.0, certaines extensions SQL sans doute utilisées dans ce tutoriel peuvent être obsolètes et seront supprimées dans le futur, vous devez donc adapter les codes! Exemples ici.
Dans le dossier "gabarit" que vous avez théoriquement téléchargé au tout début du tutoriel, nous allons utiliser le fichier "index.php" qui nous servira de modèle pour la plupart des pages qui vont suivrent. Je vous conseil vivement de garder une copie de ce fichier.

Pour commencer, nous allons introduire une nouvelle fonction dans le fichier "fonctions.php". La fonction ci-dessous permet de tronquer un texte, c'est à dire que si le texte passé en paramètre de cette fonction dépasse une certaine longueur, il sera remplacé par 3 petits points.
//Fonction pour tronquer une chaine
function tronquer($description)
{
    //nombre de caractères à afficher
    $max_caracteres=150;
    // Test si la longueur du texte dépasse la limite
    if (strlen($description)>$max_caracteres)
    {   
        // Séléction du maximum de caractères
        $description = substr($description, 0, $max_caracteres);
        // Récupération de la position du dernier espace (afin déviter de tronquer un mot)
        $position_espace = strrpos($description, " ");   
        $description = substr($description, 0, $position_espace);   
        // Ajout des "..."
        $description = $description."...";
    }
    return $description;
}
Vous pouvez augmenter ou diminuer le nombre de caractère grâce à la variable $max_caracteres.

Ceci fait, on ouvre donc le fichier "index.php" qui doit ressembler au code ci-dessous :
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="fr-fr">
 
<head>
  <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
  <title>***</title>
  <meta name="Description" content="***" />
  <link href="http://<?php echo $_SERVER['HTTP_HOST'];?>/style.css" rel="stylesheet" type="text/css"/>
</head>
 
<body>
 
<div id="moncadre">
 
<?php include('menu.php');?>
 
<div class="cadrecentrale">
 
<?php include('formulaire.php');?>
 
<h1>***</h1>
 
</div><!--cadrecentrale-->
 
<?php include('footer.php');?>
 
</div><!--moncadre-->
 
</body>
 
</html>
Au dessus du DOCTYPE, nous allons ajouter une redirection 301 pour éviter le duplicate de la page d'accueil :
<?php
if($_SERVER['REQUEST_URI'] == "/index.php")
{
    header("HTTP/1.1 301 Moved Permanently");
    header("Location: http://".$_SERVER['HTTP_HOST']."/");
    exit;
}
On inclue ensuite certains fichiers puis on sélectionne les données de la page d'accueil que l'on place dans des variables :
include('fonctions.php');
//On se connecte à la base de données
include('connexion_bd.php');
connexion_bd();
//On sélectionne les données de la page d'accueil
$index = mysql_query("SELECT titre,description,texte FROM ACCUEIL");
while($accueil = mysql_fetch_array($index))
{
    $titre=$accueil['titre'];
    $description=$accueil['description'];
    $contenu=$accueil['texte'];
}
?>
On affiche le titre et la description du site dans les méta-tags :
  <title><?php if(isset($titre)) echo $titre;?></title>
  <meta name="Description" content="<?php if(isset($description)) echo $description;?>" />
On remplit la balise <h1> :
<h1><?php if(isset($titre)) echo $titre;?></h1>
Sous le <h1> nous allons afficher un message d'erreur à destination du webmaster si le titre ou la description du site n'est pas remplit :
<?php
//Si le titre ou la description sont vides, on informe par un message d'alerte
if(empty($titre) || empty($description)){
    echo '<big style="color:red">Attention, le titre et/ou la description de la page d\'accueil est vide!! Veuillez les remplir SVP.</big><br/>';
}
Si on dispose d'un contenu à afficher sur la page d'accueil, on l'affiche :
//Si du texte est présent, on l'affiche
if(isset($contenu) && !empty($contenu)){
    echo '<div class="cadre">'.$contenu.'</div>';
}
On va à présent afficher les X derniers articles :
//On sélectionne les données pour afficher les 5 derniers articles
$result1 = mysql_query("SELECT id,id_categorie,titre,description,titre_rewrite,date FROM CONTENU WHERE valide = 'oui' ORDER BY id DESC LIMIT ".$nombre_article_accueil."");
//Si il y a quelque chose
if(mysql_num_rows($result1) != 0)
{
    if($nombre_article_accueil==1){
        echo '<span class="dernier-article">Le dernier article</span>';
    }
    else{
        echo '<span class="dernier-article">Les '.$nombre_article_accueil.' derniers articles</span>';
    }
Pour rappel, la variable $nombre_article_accueil est une variable du fichier des fonctions que vous pouvez modifier par le biais de l'interface admin.
On va ensuite chercher le nom de la catégorie dont dépend chaque article :
    while($affiche = mysql_fetch_array($result1))
    {
        //on va chercher le nom du dossier pour chaque article
        $dossier_article = mysql_query("SELECT nom_categorie,titre_rewrite FROM CATEGORIES WHERE id='".mysql_real_escape_string($affiche['id_categorie'])."'");
        while($nom_dossier = mysql_fetch_array($dossier_article))
        {
            $nom_du_dossier=$nom_dossier['titre_rewrite'];
            $titre_categorie=$nom_dossier['nom_categorie'];
        }
        //------fin nom de dossier---------------
Puis on affiche le tout :
        echo '<div class="cadre">     <h2 class="h2"><a title="'.$affiche['titre'].'" href="http://'.$_SERVER['HTTP_HOST'].'/'.$nom_du_dossier.'/'.sanspointphp($affiche['titre_rewrite']).'">'.$affiche['titre'].'</a></h2>     <p>'.tronquer(nl2br($affiche['description'])).'<br/><br/><span class="date">'.convertit_date($affiche['date']).' » <strong><a title="'.$titre_categorie.'" href="http://'.$_SERVER['HTTP_HOST'].'/'.$nom_du_dossier.'/">'.$titre_categorie.'</a></strong></span></p>     </div>';
    }
}
?>
Page d'accueil du site

Il est à noter que dans ce tutoriel les boucles while() sont imbriqués et qu'il serait bien mieux d'effectuer une jointure mais comme je ne suis pas très doué avec les jointures, je m’abstiens .

Pour ceux qui ne savent ce qu'est une jointure, voici un exemple théoriquement fonctionnel :
//On sélectionne les données pour afficher les 5 derniers articles
$result1 = mysql_query("SELECT table_contenu.id AS contenu_id, table_contenu.id_categorie, table_contenu.titre AS contenu_titre, table_contenu.description AS contenu_description, table_contenu.titre_rewrite AS contenu_titre_rewrite, table_contenu.date AS contenu_date, table_categorie.nom_categorie AS categorie_nom_categorie, table_categorie.titre_rewrite AS categorie_titre_rewrite FROM CONTENU table_contenu INNER JOIN CATEGORIES table_categorie ON table_contenu.id_categorie = table_categorie.id WHERE table_contenu.valide = 'oui' ORDER BY contenu_id DESC LIMIT ".$nombre_article_accueil."");
Voir/déposer un commentaire (0) | Signaler un problème