рекурсия

Темы, не касающиеся фреймворка, но относящиеся к программированию в целом.
Ответить
yintar
Сообщения: 106
Зарегистрирован: 2014.02.09, 11:27

рекурсия

Сообщение yintar »

Всем привет!!!
На странице рекурсивно вывожу категории и подкатегории с помощью функции

Код: Выделить всё

 view_cat($result); 
:В переменной $result содержится выбранные и отсортированные по ключу parent_id категории.т.е. здесь все стандартно.
код функции view_cat($result):

Код: Выделить всё

function view_cat($arr, $parent_id = 0) {

    if (empty($arr[$parent_id])) {
        return;
    }
    echo '<ul>';
    foreach ($arr[$parent_id] as $value) {
        echo '<li><a id='.$value['id'].' href="?category_id=' . $value['id'] .'&parent_id=' . $parent_id .'">' . $value['title'] . "</a>"."</li>";
        echo '<div style=display:none class="category'.$value['id'].'" parent_id="'.$parent_id.'">';  
        view_cat($arr, $value['id']);
          echo '</div>';
    } 
     echo '</ul>';
}
 
В функции

Код: Выделить всё

 view_cat($result) 
формируется html код и пользователю видны только те категории у которых parent_id=0,а все дочерние скрыты т.к. формируется div

Код: Выделить всё

style=display:none
.
Мне надо чтобы когда пользователь кликнул на категорию под ней показывались скрытые подкатегории.Для этого написал небольшой скрипт:

Код: Выделить всё

<script type="text/javascript">
            $('a').click(function() {
                var category_id = ($(this).attr('id'));
                $('.category' + category_id).removeAttr('style');
        });
         </script>
т.е. при клике на категорию у нее удаляется атрибут style=display:none и ее подкатегории становятся видимыми.
Но есть проблема,видимыми подкатегории становятся недолго т.к. сразу же вызывается функция

Код: Выделить всё

view_cat($result) 
и опять всем подкатегориям возвращается свойство style=display:none.Т.е. проблема в том,что html код формируется на сервере в функции

Код: Выделить всё

view_cat($result) 
и по-любому возвращается при вызове функции.А если формировать html код на клиенте а категории выводить с помощью циклов то не получается вывод всех уровней вложенности потому,что необходима рекурсивная функция.
Подскажите пожалуйста как решить или обойти данную проблему[/b]
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: рекурсия

Сообщение Ekstazi »

nested sets вам в помощь.
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: рекурсия

Сообщение Loveorigami »

сделать вывод без рекурсии )
yintar
Сообщения: 106
Зарегистрирован: 2014.02.09, 11:27

Re: рекурсия

Сообщение yintar »

Loveorigami, я же писал почему нельзя без рекурсии.т.к. без рекурсии невозможно вывести все уровни вложенности
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: рекурсия

Сообщение Loveorigami »

yintar писал(а):Loveorigami, я же писал почему нельзя без рекурсии.т.к. без рекурсии невозможно вывести все уровни вложенности
Можно.
1. Первое попавшееся http://www.inphp.org/arts/doc/8
2. Открываете под-меню через запрос Ajax
3. Nested
4. Materialized Path
Ответить