|
|
|
|
|
для: cheops
(06.10.2006 в 23:11)
| | эх, злые вы, уйду я от вас... =)
раз никто не помог пришлось самому думать! и всетаки додумался! тока с использованием DIV!
вот выкладываю функцию... пользуйтесь!
function derevo($id, $c)
{ $tot = mysql_query("SELECT count(*) FROM `razdel` where sub_id=$id"); if ($tot) $total = mysql_result($tot,0);
if($total!=0)
{ $pix=10*$c;
$dat=mysql_fetch_array(mysql_query("SELECT * FROM `razdel` WHERE id=$id"));
echo "<div style='margin-left: $pix;'>$dat[name]</div>\n";
$sql="SELECT * FROM `razdel` WHERE sub_id=$id";
$result = mysql_query($sql);
while($dat=mysql_fetch_array($result))
{
$tot = mysql_query("SELECT count(*) FROM `razdel` where sub_id=$dat[id]"); if ($tot) $total = mysql_result($tot,0);
if($total!=0) { $c++; derevo($dat[id], $c); }
else {$c++; $pix=10*$c; echo "<div style='margin-left: $pix;'>$dat[name]</div>\n";}
}
}
else
{ $pix=10*$c;
$dat=mysql_fetch_array(mysql_query("SELECT * FROM `razdel` WHERE id=$id"));
echo "<div style='margin-left: $pix;'>$dat[name]</div>\n";
}
}
|
| |
|
|
|
|
|
|
|
для: С @ |-| E|{
(05.10.2006 в 16:03)
| | Для этого обычно прибегают к рекурсивному спуску. Подробности в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=3&id_theme=21904. | |
|
|
|
|
|
|
|
для: С @ |-| E|{
(04.10.2006 в 17:15)
| | народ!!! помогите сделать!!! | |
|
|
|
|
|
|
|
для: babilonian
(04.10.2006 в 16:08)
| | неработает!!!!!
выдает :
• Главная
• Подраздел в главной
• Подраздел в программах• Музыка
• Подраздел в музыке
• Подподраздел в музыке
• Программы
• Главная
• Подраздел в главной
• Подраздел в программах• Музыка
• Подраздел в музыке
• Подподраздел в музыке
• Программы
• Главная
• Подраздел в главной
• Подраздел в программах
• Музыка
• Подраздел в музыке
• Подподраздел в музыке
• Программы
|
| |
|
|
|
|
|
|
|
для: С @ |-| E|{
(04.10.2006 в 14:37)
| | Зачем на ul’ах заморачиваетесь? Есть замечательный значок • С его помощью код легко преобразовать в:
// Визуализация разноуровневости
function get_level_cat ($cat_id)
{
$get_level_sql = "SELECT sub_id, id FROM razdel
WHERE id='".$cat_id."'";
$get_level_qry = mysql_query($get_level_sql) or die ();
if (mysql_num_rows($get_level_qry) == 1)
{
$get_level_lne = mysql_fetch_array($get_level_qry) or die ();
if ($get_level_lne['sub_id'] != "0")
{
$level .= " ";
// Пошла рекурсия
$level .= get_level_cat ($get_level_lne['sub_id']);
}
}
return $level;
}
// Функция рекурсивного отображения категорий
function get_category ($parent)
{
// Запрос на вывод категорий для этой матери
$sql = "SELECT * FROM razdel
WHERE sub_id='".$parent."'
ORDER BY name";
$query = mysql_query($sql) or die (mysql_error());
while($line = mysql_fetch_array($query))
{
echo get_level_cat ($line['id']);
echo "• ".$line['name'];
// Принимаем ид ката как ид матери и запускаем рекурсию
get_category ($line['id']);
}
}
|
| |
|
|
|
|
|
|
|
для: С @ |-| E|{
(04.10.2006 в 13:16)
| | блин, никак! мысль такая :
function _main_razdel()
{
$sql="SELECT * FROM `razdel` WHERE sub_id=0 ORDER by id";
$result = mysql_query($sql);
while($rez=mysql_fetch_array($result))
{
$temp.=$this->get_level_cat($rez[id]);
}
$echo.=$temp;
}
return $echo;
}
|
как видно из преведенной функции обрабатываем только главные категории т.е. у которых sub_id = 0 . и потом обрабатываем каждую функцией $this->get_level_cat($rez[id]); для получение всех подразделов (если они есть) а если нету то просто вывести и перейти к след пункту... т.е. щас надо написать функцию $this->get_level_cat($rez[id]);
помогите!!!!!!!!! или предложите свой вариант решения!!!! | |
|
|
|
|
|
|
|
для: С @ |-| E|{
(04.10.2006 в 12:53)
| | о! МЫСЛЯ ПРИШЛА!!!!!!!!!!!!!! Не КИДАЙТЕ КОД ПОКА!!!! Я ЩАС САМ ПОПРОБУЮ СДЕЛАТь ЕСЛИ СДЕЛАЮ ВЫЛОЖУ!!!!!!!!! | |
|
|
|
|
|
|
|
для: С @ |-| E|{
(04.10.2006 в 12:36)
| | что то опять не пойму... вот выкладываю функцию свою + вашу... функции лежат в классе... как сделать вывод не просто колво пробелов или знаков а именно построить дерево ? используя теги <ul> и <li> ???
function get_level_cat($id_category)
{
$get_level_sql = "SELECT sub_id, id FROM razdel
WHERE id='".$id_category."'";
$get_level_qry = mysql_query($get_level_sql) or die ();
if (mysql_num_rows($get_level_qry) == 1)
{
$get_level_lne = mysql_fetch_array($get_level_qry) or die ();
if ($get_level_lne['sub_id'] != "0")
{
$level .= "-";
// Пошла рекурсия
$level .= $this->get_level_cat($get_level_lne['sub_id']);
}
}
return $level;
}
function _main_razdel()
{
$sql="SELECT * FROM `razdel` ORDER by id";
$result = mysql_query($sql);
while($rez=mysql_fetch_array($result))
{
$temp.=$this->get_level_cat($rez[id]).$rez[name];
}
$echo.=$temp;
}
return $echo;
}
|
а так щас выводится следующее :
Главная
Программы
-Подраздел в главной
-Подраздел в программах
Музыка
-Подраздел в музыке
--Подподраздел в музыке
|
| |
|
|
|
|
|
|
|
для: babilonian
(04.10.2006 в 11:33)
| | За структуру спасибо! Это кажется наилучший вариант! Щас попробую так как вы написали!!!!!!!!! | |
|
|
|
|
|
|
|
для: С @ |-| E|{
(03.10.2006 в 22:03)
| | Вам структуру надо немного поменять для удобства. Можно перепроектировать таблицу следующим образом:
Принимаем в качестве sub_id идентификатор материнской категории, и тогда, дамп будет выглядеть так:
INSERT INTO `razdel` VALUES (1, '0', 'Главная');
INSERT INTO `razdel` VALUES (2, '0', 'Программы');
INSERT INTO `razdel` VALUES (3, '1', 'Подраздел в главной');
INSERT INTO `razdel` VALUES (4, '2', 'Подраздел в программах');
INSERT INTO `razdel` VALUES (5, '0', 'Музыка');
INSERT INTO `razdel` VALUES (6, '5', 'Подраздел в музыке');
INSERT INTO `razdel` VALUES (7, '6', 'Подподраздел в музыке');
|
// Визуализация разноуровневости
function get_level_cat ($cat_id)
{
$get_level_sql = "SELECT sub_id, id FROM razdel
WHERE id='".$cat_id."'";
$get_level_qry = mysql_query($get_level_sql) or die ();
if (mysql_num_rows($get_level_qry) == 1)
{
$get_level_lne = mysql_fetch_array($get_level_qry) or die ();
if ($get_level_lne['sub_id'] != "0")
{
$level .= " ";
// Пошла рекурсия
$level .= get_level_cat ($get_level_lne['sub_id']);
}
}
return $level;
}
|
Запрос этой функции такой:
$nbsps = get_level_cat ($id_category);
|
В итоге, переменная $nbsps возвращает количество пробелов перед названием категории, и получается визуалка разноуровневости. | |
|
|
|
|