public function build($includeRoot = false, $root = null, $depth = null)
    {
        $root = $root === null ? $this->getRoot() : $root;
        $depth = $depth === null ? $this->depth : $depth;

        $result = [];

        /** @var NodeInterface $childNode */
        foreach ($root->getChildNodes($this->nodeTypeFilter) as $childNode) {
            $hasChildNodes = $childNode->hasChildNodes($this->nodeTypeFilter);
            $shouldLoadChildNodes = $hasChildNodes && ($depth > 1 || $this->isInRootLine($this->active, $childNode));

            $result[$childNode->getName()] = [
                'label' => $childNode->getNodeType()->isOfType('Neos.Neos:Document') ?
                    $childNode->getProperty('title') : $childNode->getLabel(),
                'contextPath' => $childNode->getContextPath(),
                'nodeType' => $childNode->getNodeType()->getName(),
                'hasChildren' => $hasChildNodes,
                'isActive' => $this->active && ($childNode->getPath() === $this->active->getPath()),
                'isFocused' => $this->active && ($childNode->getPath() === $this->active->getPath()),
                'isCollapsed' => !$shouldLoadChildNodes,
                'isCollapsable' => $hasChildNodes
            ];

            if ($shouldLoadChildNodes) {
                $result[$childNode->getName()]['children'] =
                    $this->build(false, $childNode, $depth - 1);
            }

            if ($childNode->getNodeType()->isOfType('Neos.Neos:Document')) {
                $result[$childNode->getName()]['href'] = $this->linkingService->createNodeUri(
                    /* $controllerContext */ $this->controllerContext,
                    /* $node */ $childNode,
                    /* $baseNode */ null,
                    /* $format */ null,
                    /* $absolute */ true,
                    /* $arguments */ [],
                    /* $section */ '',
                    /* $addQueryString */ false,
                    /* $argumentsToBeExcludedFromQueryString */ [],
                    /* $resolveShortcuts */ false
                );
            }
        }

        if ($includeRoot) {
            return [
                $root->getName() => [
                    'label' => $root->getNodeType()->isOfType('Neos.Neos:Document') ?
                        $root->getProperty('title') : $root->getLabel(),
                    'icon' => 'globe',
                    'contextPath' => $root->getContextPath(),
                    'nodeType' => $root->getNodeType()->getName(),
                    'hasChildren' => count($result),
                    'isCollapsed' => false,
                    'isActive' => $this->active && ($root->getPath() === $this->active->getPath()),
                    'isFocused' => $this->active && ($root->getPath() === $this->active->getPath()),
                    'children' => $result
                ]
            ];
        }

        return $result;
    }
public function build($includeRoot = false, $root = null, $depth = null)
    {
        $root = $root === null ? $this->getRoot() : $root;
        $depth = $depth === null ? $this->depth : $depth;

        $result = [];

        /** @var NodeInterface $childNode */
        foreach ($root->getChildNodes($this->nodeTypeFilter) as $childNode) {
            $hasChildNodes = $childNode->hasChildNodes($this->nodeTypeFilter);
            $shouldLoadChildNodes = $hasChildNodes && ($depth > 1 || $this->isInRootLine($this->active, $childNode));

            $result[$childNode->getName()] = [
                'label' => $childNode->getNodeType()->isOfType('Neos.Neos:Document') ?
                    $childNode->getProperty('title') : $childNode->getLabel(),
                'contextPath' => $childNode->getContextPath(),
                'nodeType' => $childNode->getNodeType()->getName(),
                'hasChildren' => $hasChildNodes,
                'isActive' => $this->active && ($childNode->getPath() === $this->active->getPath()),
                'isFocused' => $this->active && ($childNode->getPath() === $this->active->getPath()),
                'isCollapsed' => !$shouldLoadChildNodes,
                'isCollapsable' => $hasChildNodes
            ];

            if ($shouldLoadChildNodes) {
                $result[$childNode->getName()]['children'] =
                    $this->build(false, $childNode, $depth - 1);
            }

            if ($childNode->getNodeType()->isOfType('Neos.Neos:Document')) {
                $result[$childNode->getName()]['href'] = $this->linkingService->createNodeUri(
                    /* $controllerContext */ $this->controllerContext,
                    /* $node */ $childNode,
                    /* $baseNode */ null,
                    /* $format */ null,
                    /* $absolute */ true,
                    /* $arguments */ [],
                    /* $section */ '',
                    /* $addQueryString */ false,
                    /* $argumentsToBeExcludedFromQueryString */ [],
                    /* $resolveShortcuts */ false
                );
            }
        }

        if ($includeRoot) {
            return [
                $root->getName() => [
                    'label' => $root->getNodeType()->isOfType('Neos.Neos:Document') ?
                        $root->getProperty('title') : $root->getLabel(),
                    'icon' => 'globe',
                    'contextPath' => $root->getContextPath(),
                    'nodeType' => $root->getNodeType()->getName(),
                    'hasChildren' => count($result),
                    'isCollapsed' => false,
                    'isActive' => $this->active && ($root->getPath() === $this->active->getPath()),
                    'isFocused' => $this->active && ($root->getPath() === $this->active->getPath()),
                    'children' => $result
                ]
            ];
        }

        return $result;
    }
public function build ( $ includeRoot = false , $ root = null , $ depth = null ) { $ root = $ root === null ? $ this -> getRoot ( ) : $ root ; $ depth = $ depth === null ? $ this -> depth : $ depth ; $ result = [ ] ; /** @var NodeInterface $childNode */ foreach ( $ root -> getChildNodes ( $ this -> nodeTypeFilter ) as $ childNode ) { $ hasChildNodes = $ childNode -> hasChildNodes ( $ this -> nodeTypeFilter ) ; $ shouldLoadChildNodes = $ hasChildNodes && ( $ depth > 1 || $ this -> isInRootLine ( $ this -> active , $ childNode ) ) ; $ result [ $ childNode -> getName ( ) ] = [ 'label' => $ childNode -> getNodeType ( ) -> isOfType ( 'Neos.Neos:Document' ) ? $ childNode -> getProperty ( 'title' ) : $ childNode -> getLabel ( ) , 'contextPath' => $ childNode -> getContextPath ( ) , 'nodeType' => $ childNode -> getNodeType ( ) -> getName ( ) , 'hasChildren' => $ hasChildNodes , 'isActive' => $ this -> active && ( $ childNode -> getPath ( ) === $ this -> active -> getPath ( ) ) , 'isFocused' => $ this -> active && ( $ childNode -> getPath ( ) === $ this -> active -> getPath ( ) ) , 'isCollapsed' => ! $ shouldLoadChildNodes , 'isCollapsable' => $ hasChildNodes ] ; if ( $ shouldLoadChildNodes ) { $ result [ $ childNode -> getName ( ) ] [ 'children' ] = $ this -> build ( false , $ childNode , $ depth - 1 ) ; } if ( $ childNode -> getNodeType ( ) -> isOfType ( 'Neos.Neos:Document' ) ) { $ result [ $ childNode -> getName ( ) ] [ 'href' ] = $ this -> linkingService -> createNodeUri ( /* $controllerContext */ $ this -> controllerContext , /* $node */ $ childNode , /* $baseNode */ null , /* $format */ null , /* $absolute */ true , /* $arguments */ [ ] , /* $section */ '' , /* $addQueryString */ false , /* $argumentsToBeExcludedFromQueryString */ [ ] , /* $resolveShortcuts */ false ) ; } } if ( $ includeRoot ) { return [ $ root -> getName ( ) => [ 'label' => $ root -> getNodeType ( ) -> isOfType ( 'Neos.Neos:Document' ) ? $ root -> getProperty ( 'title' ) : $ root -> getLabel ( ) , 'icon' => 'globe' , 'contextPath' => $ root -> getContextPath ( ) , 'nodeType' => $ root -> getNodeType ( ) -> getName ( ) , 'hasChildren' => count ( $ result ) , 'isCollapsed' => false , 'isActive' => $ this -> active && ( $ root -> getPath ( ) === $ this -> active -> getPath ( ) ) , 'isFocused' => $ this -> active && ( $ root -> getPath ( ) === $ this -> active -> getPath ( ) ) , 'children' => $ result ] ] ; } return $ result ; }
Build a json serializable tree structure containing node information

@param bool $includeRoot
@param null $root
@param null $depth
@return array
Build a json serializable tree structure containing node information