Au service

des PME et des indépendants

 

Post : Layout du site

Retour

Il est important de comprendre comment s'articule le site pour pouvoir mettre correctement les pages en action.

Le layout peut-être schématisé par le graphique ci-dessous.


Illustration 1: Layout


Somme tout, c'est un layout plus que classique mais il y a quelques petite précisions à donner. Les parties Header, body page et footer seront toujours affichées, quelques soit la page demandée. Pas trop besoin de s'étendre sur les parties header et footer, par contre la partie body page recevra le contenu de la page demandée. Lorsque l'on défini une page, dans la partie d'administration du site, on doit aussi spécifier le layout de la page, à savoir si on veut une page full width, left col, right col ou left & right col. Cela permet d'avoir une variante sur les présentation du contenu de la page qui s'adapte parfois mieux avec une telle ou telle autre présentation. Quant aux parties top et bottom, elles seront présentent si et uniquement si on a explicitement décidé d'y afficher une boîte. La définition des boîtes et de leurs contenus se fait aussi dans la partie d'administration du site.

Voyons comment cela est mis en musique et que fais la page index.php qui est la seule page appelée dans notre site.

En premier lieu, on va initialiser le framework au travers de la classe Site_­core

/* Initialize the site, establish DB connexion, define CONST,... */
$site = new Site_core();

On a va ensuite charger le template du site, en fonction de la page que l'on veut visualiser. On appel donc la fonction loadTemplate de la classe Site_core avec en paramètre le nom de la page. Ceci ce traduit par la ligne de code suivante :

/* Load the html template according to the page to be displayed */
$site->loadTemplate($page);


Après cela, on peut afficher le contenu de la page, c'est donc la partie Body page, mais aussi les différentes parties du layout à savoir, les « boîtes » top, bottom, left et right.

/* Display the selected page */
$site->displayPage($page);
/* Display the menu */
$site->displayMenu();
/* Display the boxes on the top part of the page */
$site->display_boxes('T', 'Bloc_TopBoxes');
/* Display the boxes on the left side of the page */
$site->display_boxes('L', 'Bloc_LeftBoxes');
/* Display the boxes on the top right side the page */
$site->display_boxes('R', 'Bloc_RightBoxes');
/* Display the boxes on the bottom part of the page */
$site->display_boxes('B', 'Bloc_BottomBoxes');


Il reste à générer la page

// Generate the page
$html = $site->myTemplate->getHTML();

et l'afficher

// Display the page
ob_start(); // to speed up the display
echo $html;
ob_end_flush(); // to speed up the display

Ceci est le « moteur » de notre site. Toutefois quelques petits ajouts seront fait pour gérer des valeurs par défaut et l'affichage de certaines parties en fonction des droits des visiteurs. Le code complet est le suivant :

<?php
/**
 * Main page. This is the only page to be call, it will load all the other necessary pages.
 * @Author Pierre Delporte - pierre.delporte@alf-solution.be
 * @copyright 2008-2015 ALF-Solution
 * @version 0.9.1
 * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
 * @note This program is distributed in the hope that it will be useful - WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.
 */
// server should keep session data for AT LEAST 3 hours
ini_set('session.gc_maxlifetime', 10800);
// each client should remember their session id for EXACTLY 3 hours
session_set_cookie_params(10800);
session_start();
/* Set parameters for displaying errors */
error_reporting(E_ALL);
ini_set("display_errors", 1);
/* Define the default relative base path */
$basepath = './';
/* Load the path where to search for the classes by using the PHP function __autoload */
require_once $basepath . '/includes/autoload.php';

//require_once($basepath . '/includes/lib.php5');

$start_time  = Utils::get_microtime();

/* Initialize the site, establish DB connexion, define CONST,... */
$site = new Site_core();

/* Check if we specified a page to be displayed, if not display default HOME_PAGE or HOME_LOGGED_PAGE if user is connected */
if (!isset($_GET["page"])) { // Vérfie si la variable $page est définie
   if ($site->logged) {
      $page = HOME_LOGGED_PAGE;
   } else {
      $page = HOME_PAGE;
   }
   $_REQUEST["page"] = $_GET["page"] = $page;
} else {
   $page = $_GET["page"];
}
/* Load the html template according to the page to be displayed */
$site->loadTemplate($page);

/* If user logged in, then display his information */
if ($site->logged) {
   $site->myTemplate->replace('identification', "_#Welcome#_ ".$site->logged_user->Firstname.' '.$site->logged_user->Lastname);
} else {
   $site->myTemplate->replace('identification', "");
}

/* Display the selected page */
$site->displayPage($page);
/* Display the menu */
$site->displayMenu();
/* Display the boxes on the top part of the page */
$site->display_boxes('T', 'Bloc_TopBoxes');
/* Display the boxes on the left side of the page */
$site->display_boxes('L', 'Bloc_LeftBoxes');
/* Display the boxes on the top right side the page */
$site->display_boxes('R', 'Bloc_RightBoxes');
/* Display the boxes on the bottom part of the page */
$site->display_boxes('B', 'Bloc_BottomBoxes');

/* Delete bloc_admin if the current user is not admin */
if (!$site->logged || !Security::isMemberOf($site->logged_user->Id, 'admin')) {
   $site->myTemplate->deleteBloc('block_admin');
}
$site->myTemplate->replace('sitename', SITENAME);
$site->myTemplate->replace('environment', ENVIRONMENT);
$site->myTemplate->replace('generation_time', number_format(Utils::get_microtime() - $start_time, 3));
$site->myTemplate->replace('logged_user_id', $_SESSION['logged_user_id']);

// Generate the page
$html = $site->myTemplate->getHTML();
if ($site->logged) {
   $html = $site->myTemplate->replaceBlockBy('if_not_logged', '', $html);
} else {
   $html = $site->myTemplate->replaceBlockBy('if_logged', '', $html);
}
// Display the page
ob_start(); // to speed up the display
echo $html;
ob_end_flush(); // to speed up the display
//Debug::logTrace($site, $page);