Darathor
Citation :
But : Ce Sous-MOD ajoute une méthode à la classe template qui permet d'enregistrer la page générée dans un fichier plutôt que de l'afficher dans le navigateur.
Auteur : Darathor (darathor@free.fr)
Version : 1.1 TEST - B (24/09/2006)
Compatibilité phpBB : 2.0.19
Changements :
1.1 (24/09/2006) :
- ajout d'une fonction simplifiant la gestion d'un numéro de version pour les fichier générés (pour éviter les problème de cache lors des mises à jour).
- ajout d'une fonction de supperssion de fichier.
- ajout d'une fonction générant un nouveau template pour un thème différent de celui sélectionné (pour générer des fichiers différents pour chaque thème).
- ajout d'une fonction enregistrant une chaîne de caractères dans un fichier.
- suppression de l'affichage en texte du fichier généré dans le message d'erreur en cas d'échec de l'enregistrement.
Dans "template.php" :
Code :
#
# Trouver
#
/**
* Inserts the uncompiled code for $handle as the
* value of $varname in the root-level. This can be used
* to effectively include a template in the middle of another
* template.
* Note that all desired assignments to the variables in $handle should be done
* BEFORE calling this function.
*/
#
# Ajouter avant
#
// DEBUT MOD Export fichier
/**
* Similaire à pparse mais envoie le résultat dans le fichier $destination plutôt que sur la sortie standard.
*
* @param $handle bloc tpl à exporter dans le fichier.
* @param $destination fichier destination.
* @param $error_message message d'erreur à indiquer au cas où il serait impossible d'enregistrer le fichier (si le message contient un %s, il sera remplacé par le la variable $destination). Si aucun message n'est donnée, un message par défaut sera utilisé.
*/
function pparse_in_file($handle, $destination, $error_message = '')
{
if (!$this->loadfile($handle))
{
die("Template->pparse(): Couldn't load template file for handle $handle");
}
// actually compile the template now.
if (!isset($this->compiled_code[$handle]) || empty($this->compiled_code[$handle]))
{
// Actually compile the code now.
$this->compiled_code[$handle] = $this->compile($this->uncompiled_code[$handle]);
}
// Run the compiled code.
$file = @fopen($destination, 'w'); // Ouverture du fichier destination.
if(!$file) // Si le fichier n'est pas accessible, on envoie un message d'erreur.
{
global $lang;
message_die(GENERAL_ERROR, sprintf($error_message, $destination));
}
ob_start(); // Redirection de la sortie standard dans un buffer.
eval($this->compiled_code[$handle]); // Evaluation du code compilé.
fputs($file, ob_get_contents()); // Récupération du contenu du buffer et envoi dans le fichier.
fclose($file); // Fermeture du fichier.
ob_clean(); // Vidage du buffer.
return true;
}
// FIN MOD Export fichier
Dans "includes/functions.php" :
Code :
#
# Trouver
#
?>
#
# Ajouter avant
#
// DEBUT MOD Export fichier
/**
* Incrémente la valeur d'une entrée de la table de configuration (supposée de type entier).
*
* @param $key nom de l'entrée à incrémenter.
* @param $last_file argument optionnel indiquant le précédent fichier à effacer (s'il existe).
* @return nouvelle valeur de l'entrée incrémentée.
* @deprecated remplacé par une gestion dans le MOD Additionnal files.
*/
function ExFi_increment_config_number($key, $last_file = '')
{
global $lang, $board_config, $phpbb_root_path, $phpEx, $db;
// Effacement du ficheir précédent si demandé.
if(($last_file != '') && file_exists($last_file))
{
unlink($last_file);
}
// Incrémentation de la valeur.
$board_config[$key]++;
// Mise à jour dans la base.
$sql = "UPDATE " . CONFIG_TABLE . "
SET config_value = '" . $board_config[$key] . "'
WHERE config_name = '$key'";
if(!$result = $db->sql_query($sql))
{
message_die(GENERAL_ERROR, "Couldn't update '$key' value in config table", "", __LINE__, __FILE__, $sql);
}
// Retour de na nouvelle valeur.
return $board_config[$key];
}
/**
* Supprime le(s) fichiers indiqués.
*
* @param $base base du nom du fichier à supprimmer.
* @param $version numéro de version du fichier à supprimmer (indiquer -1 si l'on ne gère pas de numéro de version).
* @param $extension extension du fichier (ex : '.tpl').
* @param $all_themes TRUE si le fichier dispose d'une version par thème et FALSE s'il ne comprend qu'une seul version globale.
* @param $path chemin d'accès au répertoire contenant le(s) fichier(s) à partir de la racine du script (ex : 'css/').
* @return nombre de ficheirs supprimés.
*/
function ExFi_suppress_file($path, $base, $version, $extension, $all_themes)
{
global $lang, $board_config, $phpbb_root_path, $phpEx, $db;
$deleted = 0;
// Gestion du MOD Multiforum.
$file_begin = $phpbb_root_path . $path;
if(defined('SOUS_DOMAINE')) { $file_begin .= SOUS_DOMAINE . '_'; }
$file_begin .= $base;
// Fin du nom du fichier.
$file_end = $extension;
if($version != -1) { $file_end = '_' . $version . $file_end; }
// Cas où l'on a une version par thème.
if($all_themes)
{
// Récupération de la liste
$sql = "SELECT themes_id FROM " . THEMES_TABLE;
if( !$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, "Couldn't obtain themes data", "", __LINE__, __FILE__, $sql);
}
// Parcours de la liste des thèmes.
while($row = $db->sql_fetchrow($result))
{
$file_name = $file_begin . '_theme' . $row['themes_id'] . $file_end;
if(($file_name != '') && file_exists($file_name))
{
unlink($file_name);
$deleted++;
}
}
}
// Cas où on n'a qu'une seule version.
else
{
$file_name = $file_begin . $file_end;
if(($file_name != '') && file_exists($file_name))
{
unlink($file_name);
$deleted++;
}
}
return $deleted;
}
/**
* Renvoie un objet Template correspondant au thème indiqué ou au thème par défaut si aucun thème indiqué (sert pour générer des fichiers enutilisant un template différent du template courrant).
*
* @param $theme_data thème à générer (si le paramètre est omis ou vaut 0, le thème par défaut est pris).
* @return l'objet Template associé.
*/
function ExFi_get_template($theme_data = 0)
{
global $db, $board_config, $phpbb_root_path, $lang;
// Si aucun theme n'est indiqué, on recherche le thème par défaut.
if($theme_data == 0)
{
$sql = "SELECT * FROM " . THEMES_TABLE . "
WHERE themes_id = " . $board_config['default_style'];
if( !$result = $db->sql_query($sql) )
{
message_die(GENERAL_ERROR, "Couldn't obtain themes data", "", __LINE__, __FILE__, $sql);
}
$theme_data = $db->sql_fetchrow($result);
}
return (new Template($phpbb_root_path . 'templates/' . $theme_data['template_name']));
}
/**
* Enregistre la chaine dans un fichier.
*
* @param $content contenu du fichier.
* @param $file_path chemin et nom du fichier.
* @return FALSE s'il y a eu une erreur, TRUE sinon.
*/
function ExFi_save_in_file($content, $file_path)
{
// Ouverture du fichier destination et gestion des erreurs.
$file = @fopen($file_path, 'w');
if(!$file) { return FALSE; }
// Remplissage du fichier et fermeture.
fputs($file, $content);
fclose($file);
return TRUE;
}
// FIN MOD Export fichier