Example #1
0
 static function init($openPages = array())
 {
     if (empty(self::$pages)) {
         $act = system::$isAdmin ? '' : ' and active = 1';
         if (true) {
             $where = self::getSqlForRights();
             $table = ', <<rights>>';
             $select = ', MAX(r_state) r_state';
         } else {
             $where = $table = $select = '';
         }
         // Добавляем фильтр по классам (получаем данные только для классов образующих структуру сайта)
         $in_menu = reg::getList(ormPages::getPrefix() . '/no_view');
         $cfilter = '';
         while (list($num, $val) = each($in_menu)) {
             $or = empty($cfilter) ? '' : ' or ';
             $cfilter .= $or . ' o_class_id = "' . $val . '" ';
         }
         if (!empty($cfilter)) {
             $cfilter = ' and (' . $cfilter . ')';
         }
         if (system::$isAdmin) {
             $select = 'o_id, o_name, o_class_id, o_create_date, o_change_date, pseudo_url, other_link, view_in_menu, active, is_home_page, template_id, template2_id, lang_id, domain_id' . $select;
         } else {
             $select = ' * ' . $select;
         }
         // Получаем список страниц
         $sql = 'SELECT ' . $select . '
     	    	FROM <<objects>>, <<pages>>' . $table . '
     			WHERE lang_id = "' . languages::curId() . '" and
     				  domain_id = "' . domains::curId() . '" and
     				  o_to_trash = 0 and
     				  p_obj_id = o_id' . $cfilter . $act . $where . '';
         if (system::$isAdmin) {
             if (!empty($openPages)) {
                 $open_pages = '';
                 while (list($page_id, $val) = each($openPages)) {
                     $open_pages .= ' or r_parent_id = "' . $page_id . '" ';
                 }
                 $open_pages = ' and (r_parent_id is NULL ' . $open_pages . ')';
             } else {
                 $open_pages = ' and r_parent_id is NULL';
             }
             $sql = '(' . $sql . ') UNION (
     			SELECT ' . $select . '
     	    	FROM <<objects>>, <<pages>>, <<rels>>' . $table . '
     			WHERE lang_id = "' . languages::curId() . '" and
     				  domain_id = "' . domains::curId() . '" and
     				  r_children_id = o_id ' . $open_pages . ' and
     				  r_field_id is NULL and
     				  o_to_trash = 0 and
     				  p_obj_id = o_id' . $act . $where . '
     		)';
         }
         $tmp = db::q($sql, records);
         while (list($key, $value) = each($tmp)) {
             self::$pages[$value['o_id']] = $value;
             if (self::$pages[$value['o_id']]['is_home_page']) {
                 self::$homepage_id = $value['o_id'];
             }
         }
         // Получаем связи между страницами
         $sql = 'SELECT r_parent_id, r_children_id, r_position
     	    	FROM <<objects>>, <<pages>>, <<rels>>' . $table . '
     			WHERE lang_id = "' . languages::curId() . '" and
     				  domain_id = "' . domains::curId() . '" and
     				  o_to_trash = 0 and
     				  p_obj_id = o_id and
     				  r_children_id = o_id and
     				  r_field_id is NULL' . $cfilter . $act . $where . '
     			ORDER BY r_position ASC';
         if (system::$isAdmin) {
             $sql = '(' . $sql . ') UNION (
     			SELECT child.r_parent_id, child.r_children_id, child.r_position
     	    	FROM <<objects>>, <<pages>>, <<rels>> child' . $table . '
     			WHERE lang_id = "' . languages::curId() . '" and
     				  domain_id = "' . domains::curId() . '" and
     				  o_to_trash = 0 and
     				  p_obj_id = o_id and
     				  r_children_id = o_id ' . $open_pages . ' and
     				  r_field_id is NULL' . $act . $where . '
     			ORDER BY child.r_position ASC
     		)
     		ORDER BY r_position ASC
     		';
         }
         $tmp = db::q(str_replace('GROUP BY o_id', '', $sql), records);
         while (list($key, $value) = each($tmp)) {
             if (empty($value['r_parent_id'])) {
                 $value['r_parent_id'] = 0;
             }
             self::$pages_rel[$value['r_children_id']] = $value['r_parent_id'];
             self::$pages_rel2[$value['r_parent_id']][] = $value['r_children_id'];
         }
         //print_r(self::$pages_rel2);
         //getPageOfSection
     }
 }