После этого идем в админку и пробуем двигать форумы.
Если setforums.php был кривой не пытайтесь на этом этапе двигать самый первый пункт вниз или самый нижний вверх. Лучше выбрать любой форум из середины и сдвинуть в любую сторону. Если сдвинуть получилось, значить корректная индексация позиций в этой категории восстановлена и дальше можно уже двигать что попало и куда попало.
Покинул форум
Сообщений всего: 773
Дата рег-ции: Апр. 2009 Откуда: Днепропетровск
Репутация: 69
NordWest пишет:
Цитата:
откуда появляются некорректные номера позиций форума в категории?
Всё просто.
Когда на свеже-установленном движке создаем новые форумы, то они получают позицию в виде "xyy", где
"x" - id категории
"yy" - количество уже существующих форумов + 1
Теперь смотрите что происходит.
Допустим мы создали 3 форума в первой категории:
- форум1 позиция 101
- форум2 позиция 102
- форум3 позиция 103
Теперь удалим любой форум, для наглядности например второй.
В итоге имеем:
- форум1 позиция 101
- форум3 позиция 103
А теперь создадим новый форум. Id у него будет 4 а вот позиция 103, т.к. количество форумов уже два. В итоге получаем:
- форум1 позиция 101
- форум3 позиция 103
- форум4 позиция 103
Два форума с одной позицией - вот и пошло поехало дальше ...
Я считаю, что позиция нового форума должна вычисляться всегда строго по одному алгоритму - берём самую нижнюю позицию форума в данной категории и добавляем единицу. В результате любой новый форум на момент создания всегда будет ниже предидущего. Привязки к количесву форумов вообще быть не должно.
Цитата:
Правильнее оставить прежней, а не заменять ее строкой
Не правильно. В предложенном мной варианте только так и не иначе. Я просто ищу последнюю позицию существующего форума и новый ставлю за ним. Что там ещё вычислять?
Нахожу Ваши аргументы и алгоритм полностью корректными, спасибо за исправленный досадный баг!
NordWest пишет:
Кстати код для коррекции кривых файлов allforums.php всё же придется писать - если форум достаточно большой руками там править запаришься.
В Админке / Управление форумами В каждой категории добавить ссылку "Очистить порядок" при нажатии на которую принудительно всем форумам в категории задать порядок 01, 02, ... А после этого "вручную" уже расставить порядок ссылками " Сдвинуть вверх / Сдвинуть вниз".
Еще, как вариант, можно вместо колонки "Сдвинуть вверх / Сдвинуть вниз" Сделать колонку "Порядок сортировки", где вручную вносить номер форума по порядку сортировки.
gudman
Отправлено: 1 ноября 2013 — 14:56
ExBB Team Supermoderator
Покинул форум
Сообщений всего: 351
Дата рег-ции: Дек. 2009
Репутация: 19
а ссылки форумов при этом не исправятся на другие?
1Bot
Отправлено: 1 ноября 2013 — 15:26
Super Member
Покинул форум
Сообщений всего: 773
Дата рег-ции: Апр. 2009 Откуда: Днепропетровск
Репутация: 69
gudman пишет:
а ссылки форумов при этом не исправятся на другие?
Ссылки форумов остаются прежними при любом порядке сортировки.
(Отредактировано автором: 1 ноября 2013 — 15:26)
NordWest
Отправлено: 1 ноября 2013 — 15:53
Super Member
Покинул форум
Сообщений всего: 994
Дата рег-ции: Дек. 2011 Откуда: Северо-Запад
Репутация: 76
Цитата:
В Админке / Управление форумами В каждой категории добавить ссылку "Очистить порядок"
Да, наверное как-то так и буду делать.
NordWest
Отправлено: 1 ноября 2013 — 21:48
Super Member
Покинул форум
Сообщений всего: 994
Дата рег-ции: Дек. 2011 Откуда: Северо-Запад
Репутация: 76
Анализируя код нашел функцию сортировки по позиции, которая вызывается перед записью данных в файл.
CODE:
function sort_by_position($a, $b)
{
if ($a['position'] == $b['position']) {return 0;}
return ($a['position'] < $b['position']) ? -1 : 1;
}
Работает так. Если два соседних элемента равны - возвращаем 0, и элементы не переставляются. Если больше или меньше - то возвращается -1 или 1 и элементы переставляются.
Бросилось в глаза, что условие, когда элементы совпадают в нормальных условиях выполняться не должно. Можно использовать, как аварийное событие и вызывать функцию устранения ошибки. Тут вариантов можно накрутить масса вплоть до банального вызова диалогового окна с просьбой задать новую позицию элемента, т.к. текущая неверна. Будетс минимальным изменением в коде и пользователь сможет контролировать процесс.
NordWest
Отправлено: 2 ноября 2013 — 11:52
Super Member
Покинул форум
Сообщений всего: 994
Дата рег-ции: Дек. 2011 Откуда: Северо-Запад
Репутация: 76
Дополнительные изменения:
Снова открываем файл setforums.php в котором ищем строку
После этого идем в админку и пробуем двигать форумы.
Если setforums.php был кривой не пытайтесь на этом этапе двигать самый первый пункт вниз или самый нижний вверх. Лучше выбрать любой форум из середины и сдвинуть в любую сторону. Если сдвинуть получилось, значить корректная индексация позиций в этой категории восстановлена и дальше можно уже двигать что попало и куда попало.
Пару слов о том, что делает приведённый выше код. Сразу после чтения структуры форумов в выбранной категории код делает принудительную переиндексацию позиций. Можно возразить, что это излишество и данный код нужен лишь на этапе исправления ошибок, однако я посчитал, что код не ресурсоёмкий и лишний раз правильно выстроить индексы позиций будет не лишним. (Добавление) Да, забыл предупредить!!!
Я вроде всё учел, но человеческий фактор исключать нельзя - сделайте на всякий случай резервную копию allforums.php.
cynical2207
Отправлено: 2 ноября 2013 — 15:06
Newbie
Покинул форум
Сообщений всего: 16
Дата рег-ции: Авг. 2013
Репутация: 0
NordWest пишет:
Дополнительные изменения:
Спасибо! Похоже помогло!
gudman
Отправлено: 2 ноября 2013 — 17:55
ExBB Team Supermoderator
Покинул форум
Сообщений всего: 351
Дата рег-ции: Дек. 2009
Репутация: 19
NordWest, подтверждаю....работает! Спасибо за решение проблемы!
Вот теперь в первый пост нужно выложить полную инструкции по исправлению проблемы...
gudman
Отправлено: 4 ноября 2013 — 19:46
ExBB Team Supermoderator
Покинул форум
Сообщений всего: 351
Дата рег-ции: Дек. 2009
Репутация: 19
NordWest, скомпануй пожалуйста решение проблемы в один пост, я его закреплю, сделаю первым постом темы!
NordWest
Отправлено: 4 ноября 2013 — 20:41
Super Member
Покинул форум
Сообщений всего: 994
Дата рег-ции: Дек. 2011 Откуда: Северо-Запад
Репутация: 76
Все гости форума могут просматривать этот раздел. Только администраторы и модераторы могут создавать новые темы в этом разделе. Только администраторы и модераторы могут отвечать на сообщения в этом разделе.
Powered by ExBB
ExBB FM 1.0 RC1 by TvoyWeb.ru
InvisionExBB Style converted by Markus®