private function treeOutput(TreeBase $tree, Menu $menu = null)
    {
        $items = [];

        foreach ($tree->getChildren() as $item) {
            $element = [];

            $input = [
                '#prefix'         => '<div class="tree-item clearfix">',
                '#type'           => 'textfield',
                '#attributes'     => ['class' => ['']],
                '#value'          => $item->getTitle(),
                '#theme_wrappers' => [],
                '#suffix'         => '<span class="fa fa-times"></span></div>',
            ];

            $element['data']            = drupal_render($input);
            $element['data-item-type']  = 'node';
            $element['data-item-id']    = $item->getNodeId();
            $element['data-mlid']       = $item->getId();

            if ($item->hasChildren()) {
                $elements = $this->treeOutput($item);
                $element['data'] .= drupal_render($elements);
            }

            $items[] = $element;
        }

        $build = [
            '#theme' => 'item_list',
            '#type'  => 'ol',
            '#items' => $items,
        ];

        if ($menu) {
            $build['#attributes'] = [
                'data-menu' => $menu->getName(),
                'class'     => ['sortable'],
            ];
            $build['#title'] = $menu->getTitle();

            // If tree has no children, add an empty element to allow drop.
            if (!$tree->hasChildren()) {
                $build['#items'] = [' '];
            }
        }

        return $build;
    }
private function treeOutput(TreeBase $tree, Menu $menu = null)
    {
        $items = [];

        foreach ($tree->getChildren() as $item) {
            $element = [];

            $input = [
                '#prefix'         => '<div class="tree-item clearfix">',
                '#type'           => 'textfield',
                '#attributes'     => ['class' => ['']],
                '#value'          => $item->getTitle(),
                '#theme_wrappers' => [],
                '#suffix'         => '<span class="fa fa-times"></span></div>',
            ];

            $element['data']            = drupal_render($input);
            $element['data-item-type']  = 'node';
            $element['data-item-id']    = $item->getNodeId();
            $element['data-mlid']       = $item->getId();

            if ($item->hasChildren()) {
                $elements = $this->treeOutput($item);
                $element['data'] .= drupal_render($elements);
            }

            $items[] = $element;
        }

        $build = [
            '#theme' => 'item_list',
            '#type'  => 'ol',
            '#items' => $items,
        ];

        if ($menu) {
            $build['#attributes'] = [
                'data-menu' => $menu->getName(),
                'class'     => ['sortable'],
            ];
            $build['#title'] = $menu->getTitle();

            // If tree has no children, add an empty element to allow drop.
            if (!$tree->hasChildren()) {
                $build['#items'] = [' '];
            }
        }

        return $build;
    }
private function treeOutput ( TreeBase $ tree , Menu $ menu = null ) { $ items = [ ] ; foreach ( $ tree -> getChildren ( ) as $ item ) { $ element = [ ] ; $ input = [ '#prefix' => '<div class="tree-item clearfix">' , '#type' => 'textfield' , '#attributes' => [ 'class' => [ '' ] ] , '#value' => $ item -> getTitle ( ) , '#theme_wrappers' => [ ] , '#suffix' => '<span class="fa fa-times"></span></div>' , ] ; $ element [ 'data' ] = drupal_render ( $ input ) ; $ element [ 'data-item-type' ] = 'node' ; $ element [ 'data-item-id' ] = $ item -> getNodeId ( ) ; $ element [ 'data-mlid' ] = $ item -> getId ( ) ; if ( $ item -> hasChildren ( ) ) { $ elements = $ this -> treeOutput ( $ item ) ; $ element [ 'data' ] .= drupal_render ( $ elements ) ; } $ items [ ] = $ element ; } $ build = [ '#theme' => 'item_list' , '#type' => 'ol' , '#items' => $ items , ] ; if ( $ menu ) { $ build [ '#attributes' ] = [ 'data-menu' => $ menu -> getName ( ) , 'class' => [ 'sortable' ] , ] ; $ build [ '#title' ] = $ menu -> getTitle ( ) ; // If tree has no children, add an empty element to allow drop. if ( ! $ tree -> hasChildren ( ) ) { $ build [ '#items' ] = [ ' ' ] ; } } return $ build ; }
Recursively outputs a tree as nested item lists.

@param TreeBase $tree
@param Menu $menu

@return string
Recursively outputs a tree as nested item lists .