Получение модели вложенного набора в
    , но скрытие «закрытых» поддеревьев

На основе Получение модифицированной модели обхода дерева предварительного заказа (вложенный набор) в

    Один из ответов дал правильный код для отображения полного дерева. Мне нужно всегда показывать первый уровень (глубина = 0) и братьев и сестер + дочерние элементы для активного элемента списка. Цель состоит в том, чтобы расширить видимую часть дерева, когда пользователь выбирает элемент списка, который является родительским для большего количества элементов списка.

    Итак, если я получил этот список:

    1. item
    2. item
      2.1. item
      2.2. item
        2.2.1. item
        2.2.2. item
        2.2.3. item
      2.3. item
      2.4. item
        2.4.1. item
        2.4.2. item
    3. item
    4. item
      4.1. item
      4.2. item
        4.2.1. item
        4.2.2. item
    5. item
    

    и если текущий элемент списка - «2», список должен выглядеть так:

    1. item
    2. item // this needs class .selected
      2.1. item
      2.2. item
      2.3. item
      2.4. item
    3. item
    4. item
    5. item
    

    и если текущий элемент списка - «2.2.», Список должен выглядеть так :

    1. item
    2. item // this needs class .selected
      2.1. item
      2.2. item // this needs class .selected
        2.2.1. item
        2.2.2. item
        2.2.3. item
      2.3. item
      2.4. item
    3. item
    4. item
    5. item
    

    Ниже приведен пример кода, который хорошо подходит для отображения полного дерева. Я также добавил lft / rgt / current, который понадобится для решения моей проблемы.

    '','depth'=>'', 'lft'=>'','rgt'=>'')) , $current=false){
    
       $current_depth = 0;
       $counter = 0;
    
       $result = '
      '; foreach($tree as $node){ $node_depth = $node['depth']; $node_name = $node['name']; $node_id = $node['category_id']; if($node_depth == $current_depth){ if($counter > 0) $result .= ''; } elseif($node_depth > $current_depth){ $result .= '
        '; $current_depth = $current_depth + ($node_depth - $current_depth); } elseif($node_depth < $current_depth){ $result .= str_repeat('
      ',$current_depth - $node_depth).''; $current_depth = $current_depth - ($current_depth - $node_depth); } $result .= '
    • '; ++$counter; } $result .= str_repeat('
    ',$node_depth).''; $result .= ''; return $result; } // "$current" may contain category_id, lft, rgt for active list item print MyRenderTree($categories,$current); ?>

    9
    задан Community 23 May 2017 в 01:44
    поделиться