[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вывести "хлебные крошки" на любой странице сайта
Hunter0k
Есть такой код многомерного меню, взятый отсюда:
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> &raquo ';
}

//Обрезаем последний слэш
$brc_menu = rtrim($brc_menu, ' &raquo ');

//удаляем ссылку на последний элемент в крошках
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;) выводятся как положенно, но как сделать, чтоб они выводились и на любых других страницах ( на странице материала, на странице добавления мат. )
На форумы стараюсь не писать, пытаюсь всегда делать сам, методом тыка, но тут чето не получилось. заранее спс за помощь.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.