Передо мной стоит задача сделать вложенный список по типу 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.
После разбирать этот массив c помощью foreach.
и не нужно писать на каждой строчке echo.
Спустя 1 час, 11 минут, 57 секунд (29.06.2011 - 15:14) Мушка написал(а):
А без ключей можно? У меня этот список уже является вложенным. элементы каждого уровня по запросу видят принадлежность к своему родителю. Только вопрос в том, чтобы организовать что-то типа проводника Windows - нажимаешь на плюс - выпадают дочерние списки. Подключала стили css, но все без толку. мой уровень знаний не позволяет мне продвинуться дальше. может вы что подскажете?
Спустя 40 минут, 36 секунд (29.06.2011 - 15:55) SoMeOnE написал(а):
Мушка
Там уже javascript нужно подключать, не только из базы структуру выводить
Смутно ясно на каком именно этапе сейчас Вы. Лучше задавайте более конкретные вопросы. Что именно в каком шаге не получается. Желательно с мнимальным кол-ом кода.
Там уже javascript нужно подключать, не только из базы структуру выводить
Смутно ясно на каком именно этапе сейчас Вы. Лучше задавайте более конкретные вопросы. Что именно в каком шаге не получается. Желательно с мнимальным кол-ом кода.
Спустя 42 минуты, 13 секунд (29.06.2011 - 16:37) Мушка написал(а):
SoMeOnE, спасибо, что не оставляете мою проблему без внимания.
На данный момент не удается прицепить стиль к дереву. Сейчас отображается в виде вложенных списков. А всякие +/- и ветки дерева не отображаются. Подключила нужные скрипты - не работает совсем, для пущей верности вписала коды прямо в основной скрипт, вроде близко к истине, но без этих несчастных стилей +/-. Делала по подобию http://www.recens.ru/jquery/plugin_marked_list.html.
Приведу лучше сразу весь код - не ругайтесь. Но просто я не знаю в каком месте проблема.
На данный момент не удается прицепить стиль к дереву. Сейчас отображается в виде вложенных списков. А всякие +/- и ветки дерева не отображаются. Подключила нужные скрипты - не работает совсем, для пущей верности вписала коды прямо в основной скрипт, вроде близко к истине, но без этих несчастных стилей +/-. Делала по подобию 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 написал(а):
не очень понимаю, что именно нужно.
Конструкция сравнения
И как я говрил желательно из базы все записать в массив. Потом обходить его forech-ом.
не нужно записывать на каждой строке echo. Достаточно один раз в Вашем случае.
Конструкция сравнения
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>