Dimush
Guest
Ручное позиционирование изображений в галерее.
Есть необходимость сделать возможность ручного позиционирования изображений в галерее.
Позиция элемента хранится в базе.
Хочу это сделать следующим образом:
Насколько грамотен подобный алгоритм? Смущает необходимость выполнения большого количества запросов к базе данных. На самом деле эта функция будет очень редко использоваться, но все таки?
Есть необходимость сделать возможность ручного позиционирования изображений в галерее.
Позиция элемента хранится в базе.
Хочу это сделать следующим образом:
PHP:
1. Около каждой картинки select
2. По субмиту в цикле проверка, если key != value,то key = old_position, value = new_position
2.1. Если new_position > old_position
те картинки, чья позиция > new_position ++
присваиваем изменяемой картинке old_positon = new_position + 1
те картинки, чья позиция > old_position --
2.2. Если new_position < old_position
те картинки, чья позиция >= new_position position ++
присваиваем картинке с position = old_position + 1 = new_position
те картинки, чья позиция > old_position + 1 position --
PHP:
function re_position($old_position, $new_position)
{
if ($old_position < $new_position)
{
mysql_query("update catalog set position = position + 1 where position > '$new_position'");
mysql_query("update catalog set position = $new_position + 1 where position = '$old_position'");
mysql_query("update catalog set position = position - 1 where position > '$old_position'");
};
if ($old_position > $new_position)
{
mysql_query("update catalog set position = position + 1 where position >= $new_position");
mysql_query("update catalog set position = $new_position where position = $old_position + 1");
mysql_query("update catalog set position = position - 1 where position > $old_position + 1");
}
}
if (isset($_POST["Submit22"]))
{
$mas_keys = array_keys($_POST["pos"]);
$mas_values = array_values($_POST["pos"]);
for ($i=0; $i<count($_POST["pos"]); $i++)
{
if ($mas_keys["$i"] != $mas_values["$i"]) re_position($mas_keys["$i"], $mas_values["$i"]);
};
header("location: ?mod=$_GET[mod]&type=$_GET[type]&catalog=$_GET[catalog]&page=$_GET[page]");
exit;
};