Задать вопрос

Как исправить код, чтобы верно отображалась ветка?

Ребят, привет.
Задавался вопросом, как написать скрипт, чтобы автоматически выводилось реферальное дерево. (В матричном проекте)
Вот получился такой скрипт. Он перебирает пользователей, строит дерево, но есть проблема, это отображается криво. Все обтекает слева, и таблица съежает. Пробовал добавлять пустые поля - безрезультатно. Думаю самый оптимальный вариант сделать "матрешкой", только не разберусь пока что как. Подскажите пожалуйста, как настроить здесь отображение веток?
Под "Матрешкой" я имею ввиду вот что:
<div class="1">
    <div class="1.1">
        <div class="1.1.1"></div>
        <div class="1.1.2"></div>
    </div>
    <div class="1.2">
        <div class="1.2.1"></div>
        <div class="1.2.2"></div>
    </div>
</div>

<?php

include 'header.php';
function select_refs($parent)
{
	global $parents;
	global $lowlevel_users;
	
	$refs = array();
	if ($parent == '')
		$res = mysql_query("SELECT user FROM mlm_users WHERE parent=user");
	else
		$res = mysql_query("SELECT user FROM mlm_users WHERE parent='$parent' AND parent!=user");
	$count = 0;
	while ($row = mysql_fetch_assoc($res))
	{
		$refs[] = $row['user'];
		$parents[$row['user']] = array('user'=>$parent, 'width'=>0);
		$count++;
	}
	if (!$count)
		$lowlevel_users[] = $parent;
	return $refs;
}


function next_level($level)
{
	$nextlevel = array();
	foreach ($level as $u)
	{
		if ($refs = select_refs($u))
			$nextlevel = array_merge($nextlevel, $refs);
	}
	return $nextlevel;
}

mysql_connect('localhost', '', '');
mysql_select_db('');
mysql_query("SET NAMES 'utf8'");

$parents = array();
$levels = array();
$lowlevel_users = array();
$levels[0] = select_refs('');//Верхушка ветки. Для авторизованных вставить $user.
$level = 0;
while ($nextlevel = next_level($levels[$level]))
{
	$level++;
	$levels[$level] = $nextlevel;
}

foreach ($lowlevel_users as $u)
{
	$nextparent = $parents[$u]['user'];
	while ($nextparent != '')
	{
		$parents[$nextparent]['width']++;
		$nextparent = $parents[$nextparent]['user'];
	}
}

echo "<table>";
foreach ($levels as $level)
{
	echo "<tr>";
	foreach ($level as $u)
	{
		$width = $parents[$u]['width'];
		echo "<td" . ($width ? " colspan='$width'" : "") . ">$u</td>";
	}
	echo "</tr>";
}
echo "</table>";

?>
  • Вопрос задан
  • 178 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Aleserche
developer
В свое время воспользовался слайдами.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы