/** * Recupera os nos filhos de uma arvore * * Efetua a consulta uma unica vez. * Depois que os nos filhos estao populados, sempre * utiliza os nos encontrados * * @author Hugo Ferreira da Silva * @param boolean $loadSubChilds Indica se os filhos deverao carregar seus sub-filhos * @return Lumine_Tree_NodeList */ public function getChildNodes($loadSubChilds = false) { // se ainda nao buscou os nos filhos if (is_null($this->childNodes)) { // cria um node list $this->childNodes = new Lumine_Tree_NodeList(); // pega o codigo deste objeto $code = $this->obj->{$this->fieldId}; // se tiver um codigo if (!is_null($code)) { // inicia a reflexao $ref = new ReflectionClass($this->obj->metadata()->getClassname()); // recupera uma nova instancia $inst = $ref->newInstance(); // consulta os filhos $inst->where('{' . $this->fieldParentId . '} = ?', $code)->find(); // para cada filho encontrado while ($inst->fetch()) { // cria uma nova instancia $temp = $ref->newInstanceArgs(); // popula com os dados encontrados $temp->populateFrom($inst->toArray()); // cria um no $node = new Lumine_Tree_Node($temp, $this->fieldId, $this->fieldParentId); // informa que este objeto eh o parentNode $node->parentNode = $this; if (!is_null($this->getTree())) { // informa a arvore $node->setTree($this->getTree()); } if ($loadSubChilds) { $node->getChildNodes($loadSubChilds); } // coloca na lista $this->childNodes->add($node); } // destroi o objetode consulta $inst->destroy(); } } // retorna os nos filhos return $this->childNodes; }