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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Постоение дерева, Очередная проблема 
:(
    Опции темы
Gold Dragon
Дата 20.12.2012, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Решение не так уж и много, но есть достойные.  Но я так и не нашёл что хочу.. То есть, все скрипты стоят примерно такое

Цитата

<ul>
    <li>Файловый архив
        <ul>
            <li>Анектоды</li>
            <li>Фотозаставки</li>
        </ul>
    </li>
    <li>Основной
        <ul>
            <li>Новости
                <ul>
                    <li>Отдельная новость</li>
                </ul>
            </li>
            <li>Статьи</li>
        </ul>
    </li>
</ul>

или такое со ссылками
Цитата

<ul>
    <li><a href="......">Файловый архив
        <ul>
            <li><a href="......">Анектоды</a></li>
            <li><a href="......">Фотозаставки</a></li>
        </ul>
    </a></li>
    <li><a href="......">Основной
        <ul>
            <li><a href="......">Новости
                <ul>
                    <li><a href="......">Отдельная новость</a></li>
                </ul>
            </a></li>
            <li><a href="......">Статьи</a></li>
        </a></ul>
    </li>
</ul>


Но я никак не могу добиться такого, чтобы ссылки были на "конечных" пунктах, а на все остальные чтобы при нажатии открывались/закрывались вложенные..

То ли уже мозги кипят, то ли что-то не могу уловить..

Кто подскажет решение или ссылку на решение?



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
baldina
Дата 20.12.2012, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



не уверен что я все уловил правильно, но может быть решением является разделить обработку внутренних узлов и листьев?
т.е. что-то типа
Код

function walk_tree ($root) {
  enter_item(); // echo <li>
  if (has_children($root)) {
     enter_children(); // echo <ul class="open_by_click">
     foreach (get_children(root) as $item)
       walk_tree ($item);
     leave_children (); // // echo </ul>
  }
  else {
     // leaf
     echo get_href($root);
  }
  leave_item(); // // echo </li>
}

PM MAIL   Вверх
Fortop
Дата 20.12.2012, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2200
Регистрация: 13.11.2007
Где: Донецк

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



Цитата(Gold Dragon @  20.12.2012,  12:54 Найти цитируемый пост)
То ли уже мозги кипят, то ли что-то не могу уловить..

Что улавливать?

Что нужно проверять наличие детей у ветки? И если их нет, то формировать один тег, а если есть то другой?


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
ksnk
Дата 20.12.2012, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Цитата(Gold Dragon @  20.12.2012,  12:54 Найти цитируемый пост)
а на все остальные чтобы при нажатии открывались/закрывались вложенные..

Открываться будет javascipt'ом? 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Gold Dragon
Дата 21.12.2012, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



baldina, что-то я не понял... можно рабочий вариант или код функций привести?

вот такая структура данных
Цитата

Array(
    [0] => Array(
        [id] => 39
        [name] => Файловый архив
        [parent] => 0
    )
    [1] => Array(
        [id] => 40
        [name] => Анектоды
        [parent] => 39
    )
    [2] => Array(
        [id] => 41
        [name] => Фотозаставки
        [parent] => 39
    )
    [3] => Array(
        [id] => 42
        [name] => Основной
        [parent] => 0
    )
    [4] => Array(
        [id] => 43
        [name] => Новости
        [parent] => 42
    )
    [5] => Array(
        [id] => 44
        [name] => Статьи
        [parent] => 42
    )
    [6] => Array(
        [id] => 45
        [name] => Отдельная новость
        [parent] => 43
    )
)



Цитата(Fortop @  20.12.2012,  17:57 Найти цитируемый пост)
Что нужно проверять наличие детей у ветки? И если их нет, то формировать один тег, а если есть то другой? 
Ну типа да .. т.е. если детей нет, то один тип ссылки, если есть, то другой

Цитата(ksnk @  20.12.2012,  18:30 Найти цитируемый пост)
Открываться будет javascipt'ом?  
без разницы.. Главное чтобы сами ссылки различались. Но скорее всего без js не обойтись smile

Конечно я могу это сделать через jQuery, но чувствую что есть проще решение smile



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
baldina
Дата 21.12.2012, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



Цитата(Gold Dragon @  21.12.2012,  08:36 Найти цитируемый пост)
что-то я не понял...

что именно не понял?
вот есть код, можешь адаптировать (ка раз ArrayTree думаю подойдет)
http://codepad.org/xFEzLILU

Добавлено через 3 минуты и 35 секунд
Цитата(Gold Dragon @  21.12.2012,  08:36 Найти цитируемый пост)
рабочий вариант или код функций

а он вполне рабочий: enter|leave заменяется на echo <li>|echo </li>, остается определить has_children и get_children, которые зависят от того как исходные данные представлены. в коде на codepad именно такой подход
PM MAIL   Вверх
Gold Dragon
Дата 21.12.2012, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



Цитата(baldina @  21.12.2012,  11:24 Найти цитируемый пост)
остается определить has_children и get_children, которые зависят от того как исходные данные представлены

да вот в них и упёрся.. что-то не могу сообразить как использовать


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
baldina
Дата 21.12.2012, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



PM MAIL   Вверх
Gold Dragon
Дата 21.12.2012, 13:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

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



baldina, да я вижу эти классы smile вот только запустить не могу.. Если просто тупо скачать что там есть и запустить с их примером то

Цитата

Notice: Undefined index: __data in .....

Notice: Undefined index: __children in .....



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
baldina
Дата 21.12.2012, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



можно добавить проверки или конструктор изменить. например так
Код

  public function ArrayTree ($array, $id_name, $parent_name) {
    // build $tree_array
    $this->tree_array = array ();
    foreach ($array as $row) {
      $parent_item = & $this->tree_array[$row[$parent_name]];
      $this_item = & $this->tree_array[$row[$id_name]];
      
      $parent_item['__children'][] = $row[$id_name];
      $this_item['__data'] = $row;

      if (!isset($parent_item['__data']))
        $parent_item['__data'] = array();
      if (!isset($this_item['__children']))
        $this_item['__children'] = array();
    }
  }

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.0834 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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