Example #1
0
 /**
  * Get parents.
  *
  * @param int $smapID Section ID.
  * @return array
  */
 public function getParents($smapID)
 {
     $node = $this->tree->getNodeById($smapID);
     $result = [];
     if (!is_null($node)) {
         $result = $this->buildPagesMap(array_reverse(array_keys($node->getParents()->asList(false))));
     }
     return $result;
 }
Example #2
0
 /**
  * Iterate over descendants and get them all.
  *
  * @param TreeNodeList $nodeList Node list.
  * @return TreeNodeList
  */
 private function iterateDescendants(TreeNodeList $nodeList)
 {
     $result = new TreeNodeList();
     foreach ($nodeList as $node) {
         $result->add($node);
         $result->merge($node->iterateDescendants($node->getChildren()));
     }
     return $result;
 }
Example #3
0
 /**
  * Recursive iteration over tree-like array.
  *
  * @param array $data Data array in the form @code array(array('$keyName'=>$key, '$parentKeyName'=>$parentKey)) @endcode.
  * @param TreeNode|TreeNodeList $parent Parent object.
  * @return TreeNodeList
  */
 private static function iterate(array $data, $parent)
 {
     foreach ($data as $key => $value) {
         //Если родителем является TreeNodeList  - значит мы на начальном шаге итерации и ключ - пустой, во всех других случаях - ключом является идентификатор узла родителя
         if ($parent instanceof TreeNodeList) {
             $parentKey = '';
         } else {
             $parentKey = $parent->getID();
         }
         if ($value[self::$parentKeyName] == $parentKey) {
             //добавляем узел к родителю
             $addedNode = $parent->add(new TreeNode($value[self::$keyName]));
             //удаляем из массива данных
             unset($data[$key]);
             //делаем рекурсивный вызов, передавая изменившийся набор данных, и родительский узел
             self::iterate($data, $addedNode);
         }
     }
     return $parent;
 }