[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вложенные списки
Мушка
Вижу у вас куча похожих тем, но ни одна из них мне помочь не может. Уж слишком мало опыта у меня в этой сфере. Можно сказать совсем никакого(
Передо мной стоит задача сделать вложенный список по типу http://wareznika-net.ru/pluginmarkedlist.php. Только данные у меня берутся из таблицы. Запрос сделала. Список выводит с разными отсупамии в зависимости от уровня. А в остальном - проблема. Прошу - подскажите.


$result = mysql_query("SELECT accounts.billing_address_country as level1, accounts.billing_address_city as level2, accounts.name as level3, k1_system.name as level4, bugs.name as level5
FROM accounts
INNER JOIN k1_system ON accounts.id=k1_system.account_id_c
INNER JOIN cases_cstm ON cases_cstm.k1_system_id_c=k1_system.id
INNER JOIN bugs ON cases_cstm.bug_id_c=bugs.id
ORDER BY level1, level2, level3, level4, level5"
);
while($row = mysql_fetch_assoc($result))
{
echo '<li>'.$row['level1'];
echo '<ul>';
echo '<li>'.$row['level2'];

echo '<ul>';
echo '<li>'.$row['level3'];

echo '<ul>';
echo '<li>'.$row['level4'];

echo '<ul>';
echo '<li>'.$row['level5'];

echo '</li>';
echo '</ul>';

echo '</li>';
echo '</ul>';

echo '</li>';
echo '</ul>';

echo '</li>';
echo '</ul>';
echo '</ul>';

}




Спустя 34 минуты, 51 секунда (29.06.2011 - 14:02) SoMeOnE написал(а):
Записывать структуру из базы надо в массив по ключам (соблюдая уровни вложенности)
После разбирать этот массив c помощью foreach.

и не нужно писать на каждой строчке echo.

Спустя 1 час, 11 минут, 57 секунд (29.06.2011 - 15:14) Мушка написал(а):
А без ключей можно? У меня этот список уже является вложенным. элементы каждого уровня по запросу видят принадлежность к своему родителю. Только вопрос в том, чтобы организовать что-то типа проводника Windows - нажимаешь на плюс - выпадают дочерние списки. Подключала стили css, но все без толку. мой уровень знаний не позволяет мне продвинуться дальше. может вы что подскажете?

Спустя 40 минут, 36 секунд (29.06.2011 - 15:55) SoMeOnE написал(а):
Мушка
Там уже javascript нужно подключать, не только из базы структуру выводить

Смутно ясно на каком именно этапе сейчас Вы. Лучше задавайте более конкретные вопросы. Что именно в каком шаге не получается. Желательно с мнимальным кол-ом кода.

Спустя 42 минуты, 13 секунд (29.06.2011 - 16:37) Мушка написал(а):
SoMeOnE, спасибо, что не оставляете мою проблему без внимания.
На данный момент не удается прицепить стиль к дереву. Сейчас отображается в виде вложенных списков. А всякие +/- и ветки дерева не отображаются. Подключила нужные скрипты - не работает совсем, для пущей верности вписала коды прямо в основной скрипт, вроде близко к истине, но без этих несчастных стилей +/-. Делала по подобию http://www.recens.ru/jquery/plugin_marked_list.html.
Приведу лучше сразу весь код - не ругайтесь. Но просто я не знаю в каком месте проблема.

<html>
<
head>

<
meta http-equiv="content-type" content="text/html; charset=windows-1251">

<
title>Список</title>


<
script type="text/javascript" src="showtree.jquery.js"></script>
<
script type="text/javascript" src="jquery.js"></script>
<
script type="text/javascript" src="js/jquery.cookie.js"></script>
<
script type="text/javascript">
$(document).ready(function(){
$('#tree_one').showTree();
$('#tree_two').showTree({closeFolders: true});
$('#tree_three').showTree({classTree:'classic'});
$('#tree_four').showTree({closeFolders: true,classTree:'classic'});
})
</
script>
<
link rel="stylesheet" type="text/css" href="style.css" media="screen" />
<
style>
.
jquery-tree .last {background-position:0px -1px;}
.jquery-tree .first {height:9px;}
body {
font-family:'Trebuchet MS',Tahoma, serif;
font-size:13px;
}
a {
color:#000;
}
h1 {
font-weight:normal;
margin-bottom:0;
}
h2 {
font-weight:normal;
font-size:24px;
}
h3 {
font-weight:normal;
margin:0;
font-size:18px;
}
pre {
background-color:#f7f7f7;
font-size:12px;
padding:5px;
border:#dfdfdf 1px solid;
}
.info {
padding-left:20px;
}
.column {
float:left;
margin-left:50px;
width:500px;
}

/* Основная тема */
.jquery-tree ul {
padding:0;
margin:0;
}
.jquery-tree li {
list-style:none;
padding-left:8px;
margin-left:8px;
border-left:1px dotted #838383;
background:url("img/line.gif") no-repeat 0px 9px; /* добавляем горизонтальную линию около каждого элемента */
}
.jquery-tree a {
text-decoration:none;
padding-left:18px;
background:url("img/file.png") no-repeat 1px 2px; /* картинка для обычного элемента */
}
.jquery-tree a.folder {
background:url("img/folder.png") no-repeat 1px 2px; /* картинка для закрытой папки */
}
.jquery-tree .last {
border:none;
padding-left:9px;
background:url("img/line_last.gif") 0px top no-repeat; /* закрывающий элемент */
}
.jquery-tree .first { /* прикрываем верхнюю часть линии первого элемента */
margin-left:-9px;
width:2px;
height:8px;
float:left;
background-color:#FFF;
}
.jquery-tree .show {
margin-left:-16px;
width:16px;
height:16px;
background:url("img/plus.png") left 2px no-repeat; /* картинка для кнопки показа */
float:left;
display:block;
border:0;
padding:0;
}
.jquery-tree .show.minus {
background-image:url("img/minus.png"); /* картинка для кнопки скрытия */
}
.jquery-tree a.open {
background-image:url("img/folder_open.png"); /* картинка для открытой папки */
}

/* Пользовательская тема */
.classic a {
padding-left:20px;
background-image:url("img/classic/file.gif");
}
.classic a.folder {
background-image:url("img/classic/folder.gif");
}
.classic .show {
background-image:url("img/classic/plus.gif");
}
.classic .show.minus {
background-image:url("img/classic/minus.gif");
}
.classic a.open {
background-image:url("img/classic/folder_open.gif");
}



</style>

</
head>
<
body>

<?php
mysql_connect("localhost", "root", " ") or
die("Could not connect: " . mysql_error());
mysql_select_db("sugarcrm");
$result = mysql_query("SELECT accounts.billing_address_country as level1, accounts.billing_address_city as level2, accounts.name as level3, k1_system.name as level4, bugs.name as level5
FROM accounts
INNER JOIN k1_system ON accounts.id=k1_system.account_id_c
INNER JOIN cases_cstm ON cases_cstm.k1_system_id_c=k1_system.id
INNER JOIN bugs ON cases_cstm.bug_id_c=bugs.id
ORDER BY level1, level2, level3, level4, level5"
);

echo '<div class="column">';
while($row = mysql_fetch_assoc($result))
{
echo '<li>'.$row['level1'];
echo '<ul>';
echo '<li>'.$row['level2'];

echo '<ul>';
echo '<li>'.$row['level3'];

echo '<ul>';
echo '<li>'.$row['level4'];

echo '<ul>';
echo '<li>'.$row['level5'];

echo '</li>';
echo '</ul>';

echo '</li>';
echo '</ul>';

echo '</li>';
echo '</ul>';

echo '</li>';
echo '</ul>';
echo '</ul>';

}

echo '</div>';
?>
</body>
</
html>


Спустя 1 минута, 52 секунды (29.06.2011 - 16:39) Мушка написал(а):
Возможно такое, что браузер блокирует стили?

Спустя 19 часов, 59 минут, 34 секунды (30.06.2011 - 12:38) Мушка написал(а):
Немного подумала, получилось следующее: стили видны, но если даже названия уровней одинаковые, он выводит их отдельно.
Например, у меня так:

-Россия
--Астрахань
---ОАО"ТИМ"
----и т.д
-----и т.п
-Россия
--Астрахань
---ЗАО"ЛЕКС"
----еще что-то
-----и т.д

А должно быть так:

-Россия
--Астрахань
---ОАО"ТИМ"
----и т.д
-----и т.п
---ЗАО"ЛЕКС"
----еще что-то
-----и т.д

КОД:


mysql_connect("localhost", "root", " ") or
die("Could not connect: " . mysql_error());
mysql_select_db("sugarcrm");
mysql_query("SET NAMES='cp1251'");
mysql_query( "set character_set_client='cp1251'" );
mysql_query( "set character_set_results='cp1251'" );//
mysql_query( "set collation_connection='utf-8_general_ci'" );
$result = mysql_query("SELECT accounts.billing_address_country as level1, accounts.billing_address_city as level2, accounts.name as level3, k1_system.name as level4, bugs.name as level5
FROM accounts
INNER JOIN k1_system ON accounts.id=k1_system.account_id_c
INNER JOIN cases_cstm ON cases_cstm.k1_system_id_c=k1_system.id
INNER JOIN bugs ON cases_cstm.bug_id_c=bugs.id
ORDER BY level1, level2, level3, level4, level5"
);

echo '<ul id="tree_two">';
while($row = mysql_fetch_assoc($result))
{
echo '<li><a>'.$row['level1'].'</a>';


echo '<ul>';
echo '<li><a>' .$row['level2'].'</a>';

echo '<ul>';
echo '<li><a>' .$row['level3'].'</a>';

echo '<ul>';
echo '<li><a>' .$row['level4'].'</a>';

echo '<ul>';
echo '<li><a>' .$row['level5'].'</a>';

echo '</li>';
echo '</ul>';

echo '</li>';
echo '</ul>';

echo '</li>';
echo '</ul>';

echo '</li>';
echo '</ul>';

echo '</li>';

}
echo '</ul>';


Наверное надо при обходе дерева сравнивать названия уровней.... Как это сделать?

Спустя 10 минут, 9 секунд (30.06.2011 - 12:49) SoMeOnE написал(а):
не очень понимаю, что именно нужно.

Конструкция сравнения
if ($a==$b) {
условие
} else {
условие
}


И как я говрил желательно из базы все записать в массив. Потом обходить его forech-ом.
не нужно записывать на каждой строке echo. Достаточно один раз в Вашем случае.

Спустя 17 минут (30.06.2011 - 13:06) Мушка написал(а):
Поскольку мои знания слабы, не могу представить как это написать.. Можете помочь?

Спустя 5 дней, 20 часов, 43 минуты, 35 секунд (6.07.2011 - 09:49) Мушка написал(а):
Додумалась сама, получилось не красиво, но работает) Может, кому пригодится.

<html>
<
head>

<
meta http-equiv="content-type" content="text/html; charset=windows-1251">
<
link rel="stylesheet" href="treeview.css" type="text/css" media="screen" />
<
script type="text/javascript" src="jquery.js"></script>
<
script type="text/javascript" src="jquery.treeview.js"></script>
<
style type="text/css">
#browser {
font-family: Verdana, helvetica, arial, sans-serif;
font-size: 68.75%;
}
</style>
<
script>
$(document).ready(function(){
$("#browser").treeview();

});
</
script>

<
style>
.
jquery-tree .last {background-position:0px -1px;}
.jquery-tree .first {height:9px;}
</style>
</
head>
<
body>
<?php

mysql_connect("localhost", "root", "") or
die("Could not connect: " . mysql_error());
mysql_select_db("sugarcrm");

mysql_query( "set character_set_results='utf8'" );//

$result = mysql_query("SELECT accounts.billing_address_country as level1, accounts.billing_address_city as level2, accounts.name as level3, k1_system.name as level4, bugs.name as level5
FROM accounts
INNER JOIN k1_system ON accounts.id=k1_system.account_id_c
INNER JOIN cases_cstm ON cases_cstm.k1_system_id_c=k1_system.id
INNER JOIN bugs ON cases_cstm.bug_id_c=bugs.id
ORDER BY level1, level2, level3, level4, level5"
);


$cur_country = '';
$cur_city = '';
$cur_acc = '';
$cur_sys = '';
$cur_bug = '';

$change_country = false;
$first_change_country = false;

$change_city = false;
$change_acc = false;
$change_sys = false;
$change_bug = false;

echo '<ul id="browser" class="filetree">';
while($row = mysql_fetch_assoc($result))
{

if ($row['level1'] != $cur_country)
{
if ($cur_country!='') {echo '</li></ul></li></ul></li></ul></li></ul></li> '; // закр. все уровни
}
else {$first_change_country = true;}
echo '<li class="closed"><span class="folder"><a>'.$row['level1'].'</a></span>';
$cur_country = $row['level1'];
$change_country = true;
} else {$change_country = false;}
////////////////////////////////////////////
if ($row['level2'] != $cur_city)
{
if (!$first_change_country ){
if (!$change_country) echo '</li></ul></li></ul></li></ul></li></ul>';//закрываем город, предпр, договор, ошибку
} else { $first_change_country = false;}
echo '<ul><li class="closed"><span class="folder"><a>'.$row['level2'].'</a></span>';
$cur_city = $row['level2'];
$change_city = true;
}
else {$change_city = false;}
//////////////////////////////////////////////
if ($row['level3'] != $cur_acc)
{
if (!$change_city) echo '</li></ul></li></ul></li></ul>';//закрываем предпр, договор, ошибку
echo '<ul><li class="closed"><span class="folder"><a>'.$row['level3'].'</a></span>';
$cur_acc =$row['level3'];
$change_acc = true;
}
else {$change_acc = false;}
/////////////////////////////////////////////
if ($row['level4'] != $cur_sys)
{

if (!$change_acc) echo '</li></ul></li></ul>';//закрываем договор, ошибку
echo '<ul><li class="closed"><span class="folder"><a>'.$row['level4'].'</a></span>';
$cur_sys = $row['level4'];
$change_sys = true;
}
else { $change_sys = false;}

//////////////////////////////////////////////////
if ($row['level5'] != $cur_bug)
{
if (!$change_sys) echo '</li></ul>';//закрываем ошибку
echo '<ul><li class="closed"><span class="file"><a>'.$row['level5'].'</a></span>';
$cur_bug = $row['level5'];
$change_bug = true;
}
else { $change_bug = false;}



}

echo '</li></ul></li></ul></li></ul></li></ul></li> </ul>'; //закрываем все 5 уровней

?>

</body>
</
html>
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.