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 } }