Backend\Modules\Pages\Engine\Model::getTree PHP Method

getTree() public static method

Get all pages/level
public static getTree ( array $ids, array $data = null, integer $level = 1, string $language = null ) : array
$ids array The parentIds.
$data array A holder for the generated data.
$level integer The counter for the level.
$language string The language.
return array
    public static function getTree(array $ids, array $data = null, $level = 1, $language = null)
    {
        // redefine
        $level = (int) $level;
        $language = $language !== null ? (string) $language : BL::getWorkingLanguage();
        // get data
        $data[$level] = (array) BackendModel::getContainer()->get('database')->getRecords('SELECT
                 i.id, i.title, i.parent_id, i.navigation_title, i.type, i.hidden, i.data,
                m.url, m.data AS meta_data,
                IF(COUNT(e.id) > 0, "Y", "N") AS has_extra,
                GROUP_CONCAT(b.extra_id) AS extra_ids,
                IF(COUNT(p.id), "Y", "N") AS has_children
             FROM pages AS i
             INNER JOIN meta AS m ON i.meta_id = m.id
             LEFT OUTER JOIN pages_blocks AS b ON b.revision_id = i.revision_id
             LEFT OUTER JOIN modules_extras AS e ON e.id = b.extra_id AND e.type = ?
             LEFT OUTER JOIN pages AS p ON p.parent_id = i.id AND p.status = "active" AND p.hidden = "N"
             AND p.language = i.language
             WHERE i.parent_id IN (' . implode(', ', $ids) . ')
                 AND i.status = ? AND i.language = ?
             GROUP BY i.revision_id
             ORDER BY i.sequence ASC', array('block', 'active', $language), 'id');
        // get the childIDs
        $childIds = array_keys($data[$level]);
        // build array
        if (!empty($data[$level])) {
            return self::getTree($childIds, $data, ++$level, $language);
        } else {
            // cleanup
            unset($data[$level]);
        }
        // return
        return $data;
    }

Usage Example

Example #1
0
 /**
  * Fetches all data from the database
  *
  * @param string $language
  * @return array tupple containing keys and navigation
  */
 protected function getData($language)
 {
     // get tree
     $levels = Model::getTree(array(0), null, 1, $language);
     $keys = array();
     $navigation = array();
     // loop levels
     foreach ($levels as $pages) {
         // loop all items on this level
         foreach ($pages as $pageId => $page) {
             $temp = $this->getPageData($keys, $page, $language);
             // add it
             $navigation[$page['type']][$page['parent_id']][$pageId] = $temp;
         }
     }
     // order by URL
     asort($keys);
     return array($keys, $navigation);
 }