français

a/X développement web 2

Avec la sortie récente de la version 1.0 du Zend Framework, cette bibliothèque est devenue mon choix de prédilection pour la programmation de la partie serveur. Il permet un gain de productivité important sur la programmation d'une application, sans charger inutilement le serveur, car les modules sont indépendants les uns des autres.

Ce petit site ne le nécessite pas absolument, mais il utilise plusieurs composants de ce « mécano » : la gestion de session, la gestion du cache, les "locales" (langues), les outils de traduction (ce site est bilingue).

On peut voir sur le listing du fichier contrôleur principal l'invocation de ces ressources.

On n'utilise pas ici le module MVC de Zend, car il est surdimensionné dans ce cas.

index.php

<?php
if (isset($_SERVER["HTTP_ACCEPT"]) and stristr($_SERVER["HTTP_ACCEPT"],"application/xhtml+xml")) {
	header('Content-type: application/xhtml+xml');
} else 
header ('content-type: text/html; charset="utf-8"');

set_include_path(get_include_path() . PATH_SEPARATOR . '..');
require_once 'lib/functions.php';
require_once 'hop/hop.php';

//session
require_once 'Zend/Session/Namespace.php';
$session = new Zend_Session_Namespace();

//languages, define available translation
require_once("Zend/Translate.php");
$tr = new Zend_Translate('gettext', 'i18n/fr.mo', 'fr');
$tr->addTranslation('i18n/en.mo', 'en');

if ($request->lang and in_array($request->lang, $tr->getList())) {
	//lang in request parameter
	$tr->setLocale($request->lang);
	// in session
	$session->lang = $request->lang;
}
elseif (isset($session->lang) ) $tr->setLocale($session->lang); // lang already set in session
else {
	//get best gess language from browser
	require_once 'Zend/Locale.php';
	$locale = new Zend_locale();
	if (in_array($locale->getLanguage(), $tr->getList())) $tr->setLocale($locale->getLanguage());
	else $tr->setLocale('en');
	// in session
	$session->lang = $tr->getLocale();
}

// target page
$sujet = $request->get('sujet', 'accueil');
if ($sujet == 'hop') $sujet_lang = "views/{$sujet}_en.html";
else $sujet_lang = "views/{$sujet}_{$session->lang}.html";
include 'adm/compteurs.php';

// cache management
require_once 'Zend/Cache.php';
$ref_file = "views/$sujet.php";
//check for most recently modified file
if (file_exists($sujet_lang)) {
	if (filemtime($sujet_lang) > filemtime($ref_file)) $ref_file = $sujet_lang;
} elseif (file_exists("views/{$sujet}_fr.html") and filemtime("views/{$sujet}_fr.html") > filemtime($ref_file)) $ref_file = "views/{$sujet}_fr.html";
if (filemtime("views/theme.php") > filemtime($ref_file)) $ref_file = "views/theme.php";

$cache_page = Zend_Cache::factory('File', 'File', array('lifetime' => null, 'master_file' => $ref_file), array('cache_dir' => 'cache')); //, 'automatic_serialization' => true
$cache_page_id = "theme_{$sujet}_{$session->lang}";
if (!(isset($session->style) and $session->style != 'views/a_x.css') and $cache_page->test($cache_page_id)) {
	$page_h =  $cache_page->load($cache_page_id);
} else {
	// page generation
	$page = include 'views/theme.php';
	//save in cache
	if (!$cache_page->test($cache_page_id)) $cache_page->save($page_h = $page->render(), $cache_page_id); //render and save if needed
	//no cache
	if (isset($session->style) and $session->style != 'views/a_x.css') {
		$page->head->feuille_style->set_href($session->style);
		if ($session->style == 'views/vide.css') $page->head->hop_menu->set_href($session->style);
		$page_h = $page->render();
	}
}

// output html
echo $page_h;
?>
	

Valid XHTML 1.0 Strict