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:18
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 des fonctions de gestions d'ordre sur des éléments.

Auteur : Darathor (darathor@free.fr)
Version : 1.1 (07/10/2006)
Compatibilité phpBB : 2.0.21

Changements :
1.1 (07/10/2006) :
- ajout d'une fonction renvoyant la position du prochain élément à insérer.


Dans "includes/fonctions.php" :
Code :
#
# Trouver
#
?>

#
# Ajouter avant
#
// DEBUT MOD Reorder functions
/**
 * Bouche les trous dans l'ordonancement.
 * Inspiré de la fonction renumber_order du fichier admin_forums.php.
 *
 * @param $table  table concernée.
 * @param $id_field champ clé de la table.
 * @param $order_field champ sur lequel est fait l'ordonancement.
 * @param $firstpos position du premier élément.
 * @param $where contenu de la clause where de la quetête selectionnant les éléments à ordonner, si besoin. Sert dans le cas où on a plusieurs ensembles d'éléments ayant chacun leur ordre propre dans la même table.
 */
function ReFu_reorder_elements($table, $id_field, $order_field, $firstpos = 1, $where = '')
{
   global $db;

   $sql = "SELECT * FROM $table";
   if($where != '')
   {
      $sql .= " WHERE $where";
   }
   $sql .= " ORDER BY $order_field ASC";

   if( !$result = $db->sql_query($sql) )
   {
      message_die(GENERAL_ERROR, "Couldn't get list of elements", "", __LINE__, __FILE__, $sql);
   }

   $i = $firstpos;
   while($row = $db->sql_fetchrow($result))
   {
      $sql = "UPDATE $table
         SET $order_field = $i
         WHERE $id_field = " . $row[$id_field];
      if( !$db->sql_query($sql) )
      {
         message_die(GENERAL_ERROR, "Couldn't update order elements", "", __LINE__, __FILE__, $sql);
      }
      $i++;
   }
}

/**
 * Change la position d'un élément.
 *
 * @param $mode mode de changement : 'up', 'down', 'maxup' ou 'maxdown'.
 * @param $id identifiant de l'élément.
 * @param $position nouvelle position de l'élément (dans le cas maxup et maxdown, la nouvelle position est supposée inoccupée, dans le cas contraire, la position est échangée avec l'élément suivant ou précédent').
 * @param $table table contenant l'élément.
 * @param $id_field nom du champ contenant l'id.
 * @param $order_field nom du champ contenant l'ordre.
 * @param $firstpos position du premier élément.
 * @param $where contenu de la clause where de la quetête selectionnant les éléments à ordonner, si besoin. Sert dans le cas où on a plusieurs ensembles d'éléments ayant chacun leur ordre propre dans la même table.
 */
function ReFu_change_element_order($mode, $id, $position, $table, $id_field, $order_field, $firstpos = 1, $where = '')
{
   global $db, $lang;

   if(!$id)
   {
      message_die(GENERAL_MESSAGE, $lang['ReFu_Must_select_element']);
   }
   elseif(!isset($position))
   {
      message_die(GENERAL_MESSAGE, $lang['ReFu_Must_give_position']);
   }
   else
   {
      if($mode == "up" || $mode == "down")
      {
         if($mode == "up")   { $position_other = $position + 1; }
         elseif($mode == "down")   { $position_other = $position - 1; }

         // Déplace celui dont on veut prendre la place.
         $sql = "UPDATE $table
            SET $order_field = $position_other
            WHERE $order_field = $position";
         $sql .= ($where != '') ? ' AND ' . $where : '';
         if(!$result = $db->sql_query($sql))
         {
            message_die(GENERAL_ERROR, "Couldn't update position", "", __LINE__, __FILE__, $sql);
         }

         // Déplace celui qu'on voulait déplacer.
         $sql = "UPDATE $table
            SET $order_field = $position
            WHERE $id_field = $id";
         if(!$result = $db->sql_query($sql))
         {
            message_die(GENERAL_ERROR, "Couldn't update position", "", __LINE__, __FILE__, $sql);
         }
      }
      elseif($mode == "maxup" || $mode == "maxdown")
      {
         // Déplace celui qu'on voulait déplacer.
         $sql = "UPDATE $table
            SET $order_field = $position
            WHERE $id_field = $id";
         if(!$result = $db->sql_query($sql))
         {
            message_die(GENERAL_ERROR, "Couldn't update position", "", __LINE__, __FILE__, $sql);
         }
      }

      // Réordonnacement.
      ReFu_reorder_elements($table, $id_field, $order_field, $firstpos, $where);
   }
}

/**
 * Renvoie la position à donner au prochain élément à insérer.
 *
 * @param $table  table concernée.
 * @param $order_field champ sur lequel est fait l'ordonancement.
 * @param $first_position position du premier élément.
 * @param $where contenu de la clause where de la quetête selectionnant les éléments à ordonner, si besoin. Sert dans le cas où on a plusieurs ensembles d'éléments ayant chacun leur ordre propre dans la même table.
 */
function ReFu_get_next_position($table, $order_field, $first_position = 1, $where = '')
{
   global $db;

   $sql = "SELECT MAX($order_field) AS max FROM $table";
   if($where != '') { $sql .= " WHERE $where"; }

   if( !$result = $db->sql_query($sql) )
   {
      message_die(GENERAL_ERROR, "Couldn't get next position", "", __LINE__, __FILE__, $sql);
   }

   if($row = $db->sql_fetchrow($result))
   {
      return ($row['max'] + 1);
   }
   else { return $first_position; }
}
// FIN MOD Reorder functions


Dans "language/lang_french/lang_main.php" :
Code :
#
# Trouver
#
?>

#
# Ajouter avant
#
// DEBUT MOD Reorder functions
$lang['ReFu_Must_select_element'] = 'Vous devez spécifier l\'identifiant de l\'élément dont vous voulez changer la position.';
$lang['ReFu_Must_give_position'] = 'Vous devez spécifier la nouvelle position à donner à l\'élément';
// FIN MOD Reorder functions

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