Affichage :
Le laboratoire de Darathor Index du Forum

Le laboratoire de Darathor

Ressources diverses, principalement sur les fourms phpBB
[Sous-MOD] Export fichier (1.1 TEST - C)

Ce forum est verrouillé, vous ne pouvez pas poster, ni répondre, ni éditer les sujets. Ce sujet est verrouillé, vous ne pouvez pas éditer les messages ou faire de réponses.

Rechercher dans ce sujet :
Messages
Darathor Sexe : Masculin
Site Admin
Membre

Inscrit le : 02 Nov 2003
Messages : 1101
Localisation : Strasbourg
MessagePosté le : 07 Oct 2006 14:21
Masquer ce messageAfficher ce message
Répondre en citantAjouter à liste des messages à citerRetirer de la liste des messages à citer
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 - C (07/10/2006)
Compatibilité phpBB : 2.0.21

Changements :
1.1 (07/10/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.
 */
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

Revenir en haut Aller en bas
Hors ligne | Profil | MP | E-mail | Site web
  Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum