https://bezramok-tlt.ru/blog/posts/hlebnye-...enyu-php--mysql
и немного переделанный:
Свернутый текст
//Определяем переменную ID
$id = isset($_GET['id']) ? $_GET['id'] : null;
//Получаем массив нашего меню из БД в виде массива
function getCat($CONNECT){
$sql = 'SELECT * FROM `lfmenu` ORDER BY `id`';
$res = $CONNECT->query($sql);
//Создаем масив где ключ массива является ID меню
$cat = array();
while($row = $res->fetch_assoc()){
$cat[$row['id']] = $row;
}
return $cat;
}
//Функция построения дерева из массива от Tommy Lacroix
function getTree($dataset) {
$tree = array();
foreach ($dataset as $id => &$node) {
//Если нет вложений
if (!$node['parent']){
$tree[$id] = &$node;
}else{
//Если есть потомки то перебераем массив
$dataset[$node['parent']]['childs'][$id] = &$node;
}
}
return $tree;
}
//Получаем подготовленный массив с данными
$cat = getCat($CONNECT);
//Создаем древовидное меню
$tree = getTree($cat);
//Шаблон для вывода меню в виде дерева
function tplMenu($category){
if ($category['cat'] == 1) {
$pointer = '<span class="pointer" id="hide">>></span>';
$pointer_mobil = '<a href="" class="link-menu"><span class="pointer">>></span></a>';
} else {
$pointer = '<span class="stats">['.$category['count'].']</span>';
$pointer_mobil = '';
}
$menu = '<li>
<a href="'. $category['url'] .'?id='. $category['id'].'" id="link-li">'.
$category['title'].$pointer.'</a>'.$pointer_mobil;
if(isset($category['childs'])){
$menu .= '<ul class="sub-menu">'. showCat($category['childs']) .'</ul>';
}
$menu .= '</li>';
return $menu;
}
// Рекурсивно считываем наш шаблон
function showCat($data, $str = null){
$string = '';
$str = $str;
foreach($data as $item){
$string .= tplMenu($item, $str);
}
return $string;
}
/**
* @param $cat array
* @param $id int
* @return array
* Получаем массив для хлебных крошек
*/
function breadcrumb($cat, $id){
//Проверяем что ID это число
if(!intval($id)) return false;
//Создаем пустой массив
$menumod = array();
//Перебираем полученый массив с меню
for($i = 0; $i < count($cat); $i++){
//Проверяем что мы не нашли родителя и массив пуст
if($id != 0 and !empty($cat[$id])){
//Ищим родителя
$menumod[$cat[$id]['url']] = $cat[$id]['title'];
$id = $cat[$id]['parent'];
}
//Останавливаем цикл
else break;
}
//Возвращаем перевернутый массив с сохранением ключей
return array_reverse($menumod, true);
}
/**
* @param $data array
* @return string
* Выводим хлебные крошки
*/
function getBrc($data){
//Проверяем что массив не пуст
if(empty($data)){
return false;
}else {
$menumod = $data;
$brc_menu = '';
//Перебераем массив для построения хлебных крошек
foreach ($menumod as $id => $title) {
$brc_menu .= '<a href="'.$id.'">' . $title . '</a> » ';
}
//Обрезаем последний слэш
$brc_menu = rtrim($brc_menu, ' » ');
//удаляем ссылку на последний элемент в крошках
return preg_replace('#(.+)?<a.+>(.+)</a>$#', '$1$2', $brc_menu);
}
}
//Получаем HTML разметку
$cat_menu = showCat($tree);
//Получаем массив с крошками
$arr_brc = breadcrumb($cat, $id);
//Получаем строку с крошками
$menumod = getBrc($arr_brc);
//Выводим на экран
echo '<H2>Меню</H2>
<div class="sidebar-mn">
<div class="h-menu-button" onclick="$(\'.h-menu\').slideToggle()" tabindex="0">
<a id="nav-toggle" href="#"><span></span></a>
</div>
<nav class="h-menu">
<ul><li><a href="/"> ГЛАВНАЯ </a></li>'. $cat_menu .'</ul>
</nav>
</div>';
Материал вывожу таким запросом:
Свернутый текст
$Row = mysqli_fetch_assoc(mysqli_query($CONNECT, 'SELECT `name`, `cat_id`, `cat2_id`, `cat3_id`, `added`, `date`, `read`, `text`, `download`, `size`, `link_user`, `link_guest`, `rate`, `rateusers` FROM `addons` WHERE `id` = '.$Param['id']));
/* Попробывал вот так, работает, но это лютый колхоз: */
if ($Row['cat_id']) $id_cat = $Row['cat_id'];
if ($Row['cat2_id']) $id2_cat = $Row['cat2_id'];
if ($Row['cat3_id']) $id3_cat = $Row['cat3_id'];
$Row1 = mysqli_fetch_assoc(mysqli_query($CONNECT, 'SELECT * FROM `lfmenu` WHERE `id` = '.$id_cat));
$Row2 = mysqli_fetch_assoc(mysqli_query($CONNECT, 'SELECT * FROM `lfmenu` WHERE `id` = '.$id2_cat));
$Row3 = mysqli_fetch_assoc(mysqli_query($CONNECT, 'SELECT * FROM `lfmenu` WHERE `id` = '.$id3_cat));
if ($Row1['id'] == $id_cat) $cat = $Row1['title'];
if ($Row2['id'] == $id2_cat) $cat2 = $Row2['title'];
if ($Row3['id'] == $id3_cat) $cat3 = $Row3['title'];
echo '<p>:'.$cat.' '.$cat2.' '.$cat3.'</p>';
При переходе по пунктам меню хлебные крошки (echo $menumod;) выводятся как положенно, но как сделать, чтоб они выводились и на любых других страницах ( на странице материала, на странице добавления мат. )
На форумы стараюсь не писать, пытаюсь всегда делать сам, методом тыка, но тут чето не получилось. заранее спс за помощь.