Как организовать сортировку категорий товаров с разными уровнями вложенности?
Здравствуйте.
Пишу каталог товаров на PHP, сами категории и подкатегории хранятся в одной таблице MySQL, образно структура следующая:
id | name | parrent_id
parrent_id указывает на вложенность и содержит в себе ID основной категории, тут все просто и понятно.
Изначально при выводе категории можно сортировать в алфавитном порядке, но возможно потребуется разместить категорию "Книги" над категорией "Журналы", в каком виде и как правильно хранить порядок такой сортировки?
Есть нелепая мысль добавить столбец sort и указывать в нем порядковый номер, нелепость в том, что невозможно будет отслеживать сортировочный номер других категорий.
В таком случае при создании новой категории её display_after_id = 0, в полном списке категорий хочу реализовать возможность простого перетаскивания категории в нужную позицию при этом display_after_id других категорий должен меняться по отношению к редактируемой? Непонятна логика
"В таком случае при создании новой категории её display_after_id = 0" - это странно. должен быть id предыдущей созданой дирректории или NULL, если она единственная на этом уровне.
После перетаскивания меняются 2 записи (параметр: display_after_id): текущая и следующая.
ну вы же знаете ID предыдущей (под которую ставите текущую).... и по этому ID в столбце display_after_id ищите запись.
было: B(после A)->D(после B), вы делаете: B(после A)->C(после B)->D(после C)
55 | Книги | 1
56 | Журналы | 2
57 | Открытки | 3
58 | Газеты | 4
Я хочу переместить "Газеты" в самое начало списка, сместив при этом "Книги", после этого в самом конце окажутся "Открытки", в таком случае Ваша логика не подходит (
а-а.... ну это тогда все объясняет)
1. смотрим на след. элемент за перенесенным элемент: 1-й в списке? (3-й параметр "NULL"?)
Да - ставим текущий(3-й параметр) в NULL,
Нет - ставим текущий(3-й параметр) в ID предыдущего
2. следующий за текущим(3-й) меняем на наш (id-текущего, который перенесли).