Страница 1 из 1

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

Добавлено: Чт сен 22, 2005 15:19
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>";

?>

вот и все.... изменяем запрос, линк и инклудим данный файл в нужном месте....

Добавлено: Чт сен 22, 2005 15:26
dBaser
Вообще-то это далеко не верх совершенства...
На самом деле я хотел что бы каталоги соединялись полосочками между собой.



может что подскажете?

Добавлено: Чт сен 22, 2005 18:11
TOSHIK
Спасибо. Интересно. Учту твой опыт при написании своего...

Добавлено: Чт сен 28, 2006 15:46
Созидатель
Мдя, поправьте в "рабочем примере", а то :
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
:?

Добавлено: Пт сен 29, 2006 13:40
BaDoMaN
Спс, прикольная вещь =)