Имеется таблица, в ней значения:
term_ID | term_parent | term_title |
---|
1 | 0 | Без рубрики |
2 | 1 | Новости |
3 | 2 | Спорт |
4 | 3 | Тенис |
5 | 0 | Статьи |
Делаю запрос в БД:
//Выбираем данные из БД
$result=mysql_query("SELECT * FROM terms");
//Если в базе данных есть записи, формируем массив
if (mysql_num_rows($result) > 0){
$cats = array();
//В цикле формируем массив разделов, ключом будет id родительской категории, а также массив разделов, ключом будет id категории
while($cat = mysql_fetch_assoc($result)){
$cats_ID[$cat['term_ID']][] = $cat;
$cats[$cat['term_parent']][$cat['term_ID']] = $cat;
}
}
Результирующий массив:
Array
(
[0] => Array
(
[0] => Array
(
[term_ID] => 1
[term_parent] => 0
[term_title] => Без рубрики
)
[1] => Array
(
[term_ID] => 5
[term_parent] => 0
[term_title] => Статьи
)
)
[1] => Array
(
[0] => Array
(
[term_ID] => 2
[term_parent] => 1
[term_title] => Новости
)
)
[2] => Array
(
[0] => Array
(
[term_ID] => 3
[term_parent] => 2
[term_title] => Спорт
)
)
[3] => Array
(
[0] => Array
(
[term_ID] => 4
[term_parent] => 3
[term_title] => Тенис
)
)
)
С помощью функции осуществляю элементарный вывод:
echo build_tree($cats,0);
function build_tree($cats,$parent_id,$only_parent = false){
if(is_array($cats) and isset($cats[$term_parent])){
$tree = '<ul>';
if($only_parent==false){
foreach($cats[$parent_id] as $cat){
$tree .= '<li>'.$cat['term_title'].' #'.$cat['term_ID'];
$tree .= build_tree($cats,$cat['term_ID']);
$tree .= '</li>';
}
}elseif(is_numeric($only_parent)){
$cat = $cats[$parent_id][$only_parent];
$tree .= '<li>'.$cat['term_title'].' #'.$cat['term_ID'];
$tree .= build_tree($cats,$cat['term_ID']);
$tree .= '</li>';
}
$tree .= '</ul>';
}
else return null;
return $tree;
}
Получаем что то вида:
Без рубрики
-Новости
--Спорт
---Тенис
Статьи
И вот появилась необходимость в постраничной навигации так как информации стало порядка сотни и нужно разбить по страницам, но! Есть Важное но, если при выборке ограничится limit 0,2 - 2,4 и т.д То результат будет такой:
Стр 1:
Без рубрики
-Новости
Стр 2:
--Спорт
---Тенис
Необходимо выводить так же предков если выводится чей то потомок, т.е нужно вот так:
Стр 2:
Без рубрики
-Новости
--Спорт
---Тенис
Стр 3:
Статьи
Подобное реализовано в wordpress в панели администратора при выводе категорий, там есть постраничная навигация.
Подскажите как реализовать задуманное?