Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Дерево с ветками, как совместить два скрипта? 
:(
    Опции темы
DerGast
Дата 29.10.2006, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 29.10.2006

Репутация: нет
Всего: нет



Здравствуйте. Я еще новичок в PHP, а начальство дало задание. Учусь охотно и быстро, но это надо срочно. Тужился, тужился и не смог сделать.

Итак, есть скрипт на java-script и CSS и код на PHP.
Вот код № 1:
Код

<style type="text/css">
    .treeview { padding: 0; clear: both; font-family: Arial, sans-serif; width: 100%; }
    .treeview * { font-size: 100.1%; }
    .treeview ul
    {
        overflow: hidden; width: 100%; margin: 0; padding: 0 0 1.5em 0;
        list-style-type: none;
    }
    .treeview ul ul { overflow: visible; width: auto; margin: 0 0 0 0; padding: 0 0 0 0.75em; }
    /* класс для ul после которых нет li в родительских ветках */
    .treeview ul.l { border-left: 1px solid; margin-left: -1px; }
    .treeview li.cl ul { display: none; }
    .treeview li { margin: 0; padding: 0; }
    .treeview li li { margin: 0 0 0 0.5em; border-left: 1px dotted; padding: 0; }
    .treeview li div { position: relative; height: 1.5em; min-height: 16px; //height: 1.3em; }
    .treeview li li div { border-bottom: 1px dotted; }
    .treeview li p
    {
        position: absolute; z-index: 1; top: 0.8em; //top: 0.65em; left: 1.75em;
        width: 100%; margin: 0; border-bottom: 1px dashed; padding: 0;
    }
    .treeview a { padding: 0.1em 0.2em; white-space: nowrap; }
    .treeview img.i
    {
        border-right: 2px solid; border-bottom: 0.5em solid;
        margin-bottom: -0.5em; vertical-align: middle;
    }
    .treeview a.sc
    {
        position: absolute; top: 0.06em;
        margin-left: -1em; padding: 0; text-decoration: none;
    }

    /* colors */
    .treeview li p,
    .treeview img.i,
    .treeview .sc
    { background: #f5f5ea; }
    .treeview ul.l,
    .treeview li p,
    .treeview img.i
    { border-color: #f5f5ea; }
    .treeview ul li li,
    .treeview ul li li div
    { border-color: #999999; }
    .treeview a,
    .treeview a.sc,
    .treeview a.sc:hover
    { color: #000000; }
    .treeview a:hover
    { color: #cc0000; }
</style>
<script type="text/javascript">
    function UnHide( eThis ){
        if( eThis.innerHTML.charCodeAt(0) == 9658 ){
            eThis.innerHTML = '▼'
            eThis.parentNode.parentNode.parentNode.className = '';
        }else{
            eThis.innerHTML = '►'
            eThis.parentNode.parentNode.parentNode.className = 'cl';
        }
        return false;
    }
</script>
<div class="treeview">
    <ul>
        <li>
            <div><p><a href="#" class="sc" onclick="return UnHide(this)">▼</a>
                <a href="#">Programs</a></p></div>
            <ul>
                <li class="cl">
                    <div>
                        <p>
                            <a href="#" class="sc" onclick="return UnHide(this)">►</a>
                            <a href="#">Adobe CS2</a>
                        </p>
                    </div>
                    <ul>
                        <li>
                            <div>
                                <p>
                                    <a href="#"><img src="i-photoshop.gif" class="i" />Photoshop</a>
                                </p>
                            </div>
                        </li>
                        <li>
                            <div>
                                <p>
                                    <a href="#"><img src="i-illustrator.gif" class="i" />Illustrator</a>
                                </p>
                            </div>
                        </li>
                        <li>
                            <div>
                                <p>
                                    <a href="#"><img src="i-indesign.gif" class="i" />InDesign</a>
                                </p>
                            </div>
                        </li>
                    </ul>
                </li>
                <li class="cl">
                    <div>
                        <p>
                            <a href="#" class="sc" onclick="return UnHide(this)">►</a>
                            <a href="#">Microsoft Office</a>
                        </p>
                    </div>
                    <ul>
                        <li>
                            <div>
                                <p>
                                    <a href="#"><img src="i-word.gif" class="i" />Word</a>
                                </p>
                            </div>
                        </li>
                        <li>
                            <div>
                                <p>
                                    <a href="#"><img src="i-excel.gif" class="i" />Excel</a>
                                </p>
                            </div>
                        </li>
                    </ul>
                </li>
                <li>
                    <div>
                        <p>
                            <a href="#"><img src="i-explorer.gif" class="i" />Internet Explorer</a>
                        </p>
                    </div>
                </li>
                <li>
                    <div>
                        <p>
                            <a href="#"><img src="i-firefox.gif" class="i" />Mozilla Firefox</a>
                        </p>
                    </div>
                </li>
                <li>
                    <div>
                        <p>
                            <a href="#"><img src="i-opera.gif" class="i" />Opera</a>
                        </p>
                    </div>
                </li>
            </ul>
        </li>
    </ul>
</div>


Это пример кода с лебедевского сайта.

А вот код PHP. Кекурсивная функция:
Код

<?
function ShowTree($ParentID, $lvl) { 

global $link; 
global $lvl; 
$lvl++; 

$sSQL="SELECT id,name,parent,published,level,link FROM "._PREFIX_."_mainmenu WHERE parent=".$ParentID." ORDER BY id";
$result=mysql_query($sSQL);

if (mysql_num_rows($result) > 0) {
    
    while ( $row = mysql_fetch_array($result) ) {
        $ID1 = $row["id"];
    
        ShowTree($ID1, $lvl); 
        $lvl--;
        echo '</li></ul>';
    }
}

}

ShowTree(0, 0);
?> 


Как сделать чтобы эта менюшка строилась по данным, полученным их PHP?
В PHP берется id меню с родовым меню = 0, а потом смотрит где у этого меню есть еще под меню. Вот надо чтобы дерево строилось. А как... Я уже замучился. Поможите чем можите, люди добрые.
PM MAIL   Вверх
bondarenko_a
Дата 29.10.2006, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 94
Регистрация: 20.9.2006
Где: Kiev

Репутация: 1
Всего: 1



Слишком много букф. Поделюсь рецептом, как меня научили строить дерево. 
Должна быть таблица с родительскими отношениями. 
Три столбца (как минимум): id, name, parent.
id-уникальный номер, name-имя, parent родитель.
Такого типа:
1 дуб 0
2 сосна 0
3 желудь 1 //(его родитель - дуб №1)
4 шишка 2 //(его родитель - сосна №2)
5 зернышко 4 //(его родитель - шишка №4)
и т.д.
Рекурсивная функция создается таким образом:
Код

$level=0;
function tree($parent)//parent-какой уровень собираемся обработать
{global $level;
$level++;
$sql="select * from mytablica where parent=$parent";
$result=mysql_query($sql);
echo mysql_error();
while($row=mysql_fetch_assoc($result))
{
---
код
---
tree($row[id]);//Вызываем нашу функцию для всех элементов, к-е явл. дочерними от ныне обрабатываемого
}
$level--;//этот level используешь, чтоб определить степень родительства
}
tree(0);


 Может поможет. smile

Это сообщение отредактировал(а) bondarenko_a - 29.10.2006, 22:20
PM MAIL   Вверх
SelenIT
Дата 30.10.2006, 02:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


баг форума
****


Профиль
Группа: Завсегдатай
Сообщений: 3996
Регистрация: 17.10.2006
Где: Pale Blue Dot

Репутация: 32
Всего: 401



bondarenko_a, 
Цитата(bondarenko_a @  29.10.2006,  22:19 Найти цитируемый пост)
Слишком много букф

Может, на "ниасиленный" вопрос не стоит отвечать вообще? дело в том, что у автора темы именно такая структура таблицы и та же самая, не считая мелочей типа имен переменных и т.п., рекурсивная функция. Получилось анекдотично...



DerGast, рекурсивная функция с отдельным запросом на каждую ветвь - плохой способ выборки всего дерева, особенно если оно большое. Так удобно строить двухуровневое меню (основной раздел + раскрытый активный подраздел). А для всего дерева лучше выбрать все ветви одним запросом в массив и разбирать его рекурсивно в самом PHP. Например, так:
Код

... стили и javascript Лебедева из примера выше ...
</script>
<div class="treeview">
<?
// коннект к базе тут либо еще раньше

$tree = array();

// выборка всего сразу
$sSQL="SELECT id,name,parent,published,level,link FROM "._PREFIX_."_mainmenu ORDER BY id";
$result=mysql_query($sSQL);

while ($f = mysql_fetch_assoc($result)) {
    // если еще нет подмассива для "детей" данного раздела - создадим его
    if (!isset($tree[$f['parent']])) $tree[$f['parent']] = array();
    // для каждого предка заполняем массив потомков
    $tree[$f['parent']][$f['id']] = $f;
}

mkTree(0,1);

function mkTree($pid, $level){
   global $tree;
   $indent = str_repeat(' ', $level*6); // отступ "лесенки" в HTML - чисто для красоты)
   echo $indent.'<ul>'."\n";
   foreach($tree[$pid] as $id => $row) {
      echo $indent.'   <li';
      if (isset($tree[$id])) { // если у данного пункта есть подменю
         echo ' class="cl">
'.$indent.'      <div>
'.$indent.'         <p>
'.$indent.'            <a href="#" class="sc" onclick="return UnHide(this)">►</a>
'.$indent.'            <a href="'.$row['link'].'">'.$row['name'].'</a>
'.$indent.'         </p>
'.$indent.'      </div>
'."\n";
        mkTree($id, $level + 1); // рекурсивный вызов для подменю
      }
      else {
         echo '>
'.$indent.'      <div>
'.$indent.'         <p>
'.$indent.'            <a href="'.$row['link'].'">'.$row['name'].'</a>
'.$indent.'         </p>
'.$indent.'      </div>'."\n";
      }
      echo $indent.'   </li>'."\n";
   }
   echo $indent.'</ul>'."\n";
}

?>
</div>


Это сообщение отредактировал(а) SelenIT - 30.10.2006, 02:47


--------------------
Осторожно! Данный юзер и его посты содержат ДГМО! Противопоказано лицам с предрасположенностью к зонеризму!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0768 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.