Все вопросы связанные с программированием. Языки программирования. Средства разработки.
Ответить
Аватара пользователя
dBaser
Не в сети
СуперМодератор
СуперМодератор
Сообщения: 1202
Зарегистрирован: Вт дек 09, 2003 11:50
Контактная информация:

PHP&MySQL ::: ДЕРЕВО КАТАЛОГОВ

Сообщение dBaser »

Этот модуль может понадобиться для сайтов с тематическими каталогами линков и файлов.

назовем файлик tree.php

Код: Выделить всё

<?
// старт счетчика времени генерации дерева
  $timeparts = explode(" ",microtime());
// 



// Собственно главная функция создающая массив с названиями каталогов
function maketree($rootcatid,$sql,$maxlevel){
global $db;
// 1) ID категории, 2) ID родительской кат, 3) название категории...

//  Тут я использую класс (пхпББ) для выполнения запросов к БД, вы можете выполнить их по своему... 
         $result=$db->sql_query($sql);
                 while(list($catid,$vcatid,$title)=$db->sql_fetchrow($result)){
                 $table[$vcatid][$catid]=$title;
                 $partable[$catid][$vcatid]=$title;
                 };
         $result=makebranch($rootcatid,$table,0,$maxlevel);
         RETURN $result;
}



function makebranch($vcatid,$table,$level,$maxlevel){
         $list=$table[$vcatid];
         asort($list); // сортировка

                while(list($key,$val)=each($list)){
                      if ($level=="0"){
                      $output="";
                      }else{
                      $width=($level+1)*24;
                      $output.="<img src=e.gif width=$width height=12>";
                      };



                // выходной ХТМЛ (ссылку ессвенно вставляете свою подставляя только $key (id категории)
                // $level - по желанию
				$result.= "$output $level ::: <a href='index.php?act=saw_cat&catid=$key' title='Просмотр данной категории'> <font size=2>  <b>$val</b> </font></a><br>";
                      if ((isset($table[$key])) AND (($maxlevel>$level+1) OR ($maxlevel=="0"))){
                      $result.= makebranch($key,$table,$level+1,$maxlevel);
                      };

				};
         RETURN $result;
}


// установка категории по умолчанию
if (!isset($catid)){
$catid=0;
};
// $maxlevel - максимальный уровень для показа
// если = 0 то показывать все уровни
$maxlevel=0;

//запрос в функцию тоже вставляете свой 
print maketree($catid,"SELECT catid,vcatid, title FROM webze_downloads_cat order by vcatid",$maxlevel);

// время генерации дерева
  $starttime = $timeparts[1].substr($timeparts[0],1);
  $timeparts = explode(" ",microtime());
  $endtime = $timeparts[1].substr($timeparts[0],1);
  $totaltime=bcsub($endtime,$starttime,6);
print "<br><font size=\"1\">Дерево каталогов сгенерировано за $totaltime сек.</font>";

?>

вот и все.... изменяем запрос, линк и инклудим данный файл в нужном месте....
Последний раз редактировалось dBaser Пт сен 29, 2006 14:59, всего редактировалось 1 раз.
Критиковать - это показывать автору, как бы делал я, если бы умел.
-------
Продаются мужские часики. Один часик - 50 долларов.

Аватара пользователя
dBaser
Не в сети
СуперМодератор
СуперМодератор
Сообщения: 1202
Зарегистрирован: Вт дек 09, 2003 11:50
Контактная информация:

Сообщение dBaser »

Вообще-то это далеко не верх совершенства...
На самом деле я хотел что бы каталоги соединялись полосочками между собой.



может что подскажете?
Критиковать - это показывать автору, как бы делал я, если бы умел.
-------
Продаются мужские часики. Один часик - 50 долларов.

Аватара пользователя
TOSHIK
Не в сети
Администратор
Администратор
Сообщения: 6596
Зарегистрирован: Пт авг 08, 2003 13:49
Откуда: Ростов-на-Дону
Контактная информация:

Сообщение TOSHIK »

Спасибо. Интересно. Учту твой опыт при написании своего...
Активисты все еще ищутся здесь!

Аватара пользователя
Созидатель
Не в сети
Новичок
Новичок
Сообщения: 94
Зарегистрирован: Вт июн 27, 2006 23:25
Откуда: Альтернативная вселенная
Контактная информация:

Сообщение Созидатель »

Мдя, поправьте в "рабочем примере", а то :
Warning: asort() expects parameter 1 to be array, null given in z:\home\urgi.org\www\modules\downloads\func.php on line 24

Warning: Variable passed to each() is not an array or object in z:\home\urgi.org\www\modules\downloads\func.php on line 28
:?
Изображение

BaDoMaN
Не в сети
Случайно забежавший
Случайно забежавший
Сообщения: 9
Зарегистрирован: Пт сен 29, 2006 13:23

Сообщение BaDoMaN »

Спс, прикольная вещь =)

Ответить