Как правильно сделать вывод «хлебных крошек» (древовидная структура)?

Есть скрипт для работы с "хлебными крошками". Все вроде бы хорошо, но мне нужно сделать удаление пункта меню, со всеми вложенными в него элементами. Т.е нужно получить массив id+имя меню.
Не подскажете, как бы это сделать?
Смысл то понятен. Нужно по id удаляемой папки установить всю цепочку вложенных папок, но вот как именно это реализовать?

Сам скрипт

function getCat($userID){
	$sql = DbMysql::getInstance();
    $func = new Options();

	//Создаем масив где ключ массива является ID меню
	$cat = array();
	$resIm = $sql->run("select * from ".MY_PREFIX."_folderUsers where userID = ? order by id ASC", array($userID));
	 if($resIm->rowCount() > 0){
	   while($row = $resIm->fetch()){
		$cat[$row['id']] = $row;
	   }

	 }
	return $cat;
  }

  //Функция построения дерева из массива от Tommy Lacroix
function getTree($dataset) {
	$tree = array();

	foreach ($dataset as $id => &$node) {
		//Если нет вложений
		if (!$node['inFolder']){
			$tree[$id] = &$node;
		}else{
			//Если есть потомки то перебираем массив
            $dataset[$node['inFolder']]['childs'][$id] = &$node;
		}
	}
	return $tree;
}

//Шаблон для вывода меню в виде дерева
function tplMenu($category){
	$menu = '<li>
		<a href="/userfiles/folder/'. $category['id'] .'/" title="'. $category['name'] .'" class="paginate_str">'.
		$category['name'].'</a>';

		if(isset($category['childs'])){
			$menu .= '<ul>'. 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;
}

function breadcrumb($cat, $id){
	//Проверяем что ID это число
	if(!intval($id)) return false;

	//Создаем пустой массив
	$brc = array();

	//Перебираем полученный массив с меню
	for($i = 0; $i < count($cat); $i++){
		//Проверяем что мы не нашли родителя и не массив пуст
		if($id != 0 and !empty($cat[$id])){
			//Ищим родителя
			$brc[$cat[$id]['id']] = $cat[$id]['name'];
			$id = $cat[$id]['inFolder'];
		}
		//Останавливаем цикл
		else break;
	}
	//Возвращаем перевернутый массив с сохранением ключей
	return array_reverse($brc, true);
}

function getBrc($data){
	//Проверяем что массив не пуст
	if(empty($data)){
		return false;
	}else {
		$brc = $data;
		$brc_menu = '';
		//Перебираем массив для построения хлебных крошек
		foreach ($brc as $id => $title) {
			$brc_menu .= '<a href="/userfiles/folder/' . $id . '/" class="paginate_str"  >' . $title . '</a> / ';
		}

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

		//удаляем ссылку на последний элемент в крошках
		return preg_replace('#(.+)?<a.+>(.+)</a>$#', '$1<div class="paginate display_inline"><span class="current">$2</span></div>', $brc_menu);
	}
}


//Получаем подготовленный массив с данными
$cat  = getCat($userID);

//Создаем древовидное меню
$tree = getTree($cat);


//Получаем массив с крошками
$arr_brc = breadcrumb($cat, $folderIDurl);

//Получаем строку с крошками
$brc = getBrc($arr_brc);

//Выводим хлебные крошки
echo $brc;


//Получаем HTML разметку
$cat_menu = showCat($tree);
echo $cat_menu;


Структура БД:
--
-- Структура таблицы `urod_folderUsers`
--

CREATE TABLE IF NOT EXISTS `urod_folderUsers` (
`id` int(11) NOT NULL,
  `name` text NOT NULL,
  `userID` int(11) NOT NULL,
  `inFolder` int(11) NOT NULL DEFAULT '0',
  `folderSeries` varchar(1000) NOT NULL
) ENGINE=MyISAM AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;

--
-- Дамп данных таблицы `urod_folderUsers`
--

INSERT INTO `folderUsers` (`id`, `name`, `userID`, `inFolder`) VALUES
(1, 'Видео', 6482, 0),
(2, 'Аудио', 6482, 0),
(3, 'Изображения', 6482, 0),
(4, 'Гифки', 6482, 0),
(5, 'VK изображения', 6482, 0),
(6, 'фильмы', 6482, 1),
(7, 'Триллер', 6482, 6),
(8, 'Ужасы', 6482, 6),
(9, 'Мелодрамы', 6482, 6),
(10, '80-е', 6482, 8),
(11, '90-е', 6482, 8);
  • Вопрос задан
  • 203 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы