Darathor
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