protected function processNodes(&$nodes, $uri, $level = 1, $label = 'level', $type = null) { $hasActive = false; foreach ($nodes as &$node) { $node['url'] = \CMF::link($node['url']); $node['active'] = ltrim($node['url'], "/") == ltrim($uri, "/"); $node['parent_active'] = false; if (isset($node['type'])) { $node['type'] = \Inflector::classify($node['type']); } else { if (!is_null($type)) { $node['type'] = $type; } } if (isset($node['__children']) && count($node['__children']) > 0) { $newlevel = $level + 1; $node['parent_active'] = $this->processNodes($node['__children'], $uri, $newlevel, $label, $type); if ($node['active'] || $node['parent_active']) { $levelid = $label ? $label . '_level' . $newlevel : 'level' . $newlevel; $parent = $node; unset($parent['__children']); if ($node['parent_active'] && $node['active']) { $node['active'] = false; } $parent = array($parent); $this->{$levelid} = array_merge($parent, $node['__children']); } } if ($node['parent_active'] || $node['active']) { $node['parent_active'] = $hasActive = true; $crumbs_label = $label ? $label . '_crumbs' : 'crumbs'; $crumbs = $this->{$crumbs_label}; $crumbs[$level - 1] = $node; $this->{$crumbs_label} = $crumbs; } } return $hasActive; }
public function __toString() { return \CMF::link(strval($this->url)); }