addSites($sites); $site = $siteSwitcher->getSiteByDomain($_SERVER['HTTP_HOST']); if( $site===false ) { throw new Exception('Site '.$_SERVER['HTTP_HOST'].' is not recognized'); } Core_User::init(); Core_Registry::set('site',$site); /* инициализируем роутинг */ $uri = isset($_GET['a']) ? $_GET['a'] : $_SERVER['REQUEST_URI']; if( substr($uri,0,1)!='/' ) { $uri = '/'.$uri; } $noRewriteMod = false; $requestUri = $_SERVER['REQUEST_URI']; if( !empty($_SERVER['QUERY_STRING']) ){ $pos = strrpos($requestUri,$_SERVER['QUERY_STRING']); if( $pos!==false ){ $requestUri = substr($requestUri,0,$pos-1); } if( substr($requestUri,-8)=='main.php' ){ $requestUri = substr($requestUri,0,-8); $noRewriteMod = true; } } if( isset($_GET['a']) && ($prefixEndPos=strrpos($requestUri,$uri))!==false ) { $pathPrefix = substr($requestUri,0,$prefixEndPos); }else { $pathPrefix = ''; } $router = new Core_Router(array( 'defaultController' => 'error', 'defaultAction' => 'notFound', 'defaultView' => 'notFound', 'pathPrefix' => $pathPrefix, 'pathPrefixDin' => ($noRewriteMod?'main.php?a=':$pathPrefix), )); $routes = include('config/routes.conf.php'); if( !isset($routes[$site->sitename]) ) { throw new Exception('Routes for this site are not defined'); } $router->addRoutes($routes[$site->sitename]); $page = $router->resolvePath($uri); /* выполняем действие контроллера */ $page->controller = ucfirst($page->controller); $pageName = 'Controllers_'.$site->sitename.'_'.$page->controller; try{ $pageObject = new $pageName($page->action); }catch( Exception $exception ) { throw new Exception('Cannot load controller `'.$page->controller.'`'); } if( !method_exists($pageObject,$page->action.'Action') ) { throw new Exception('Action `'.$page->action.'` not found'); } $data = $pageObject->{$page->action.'Action'}($page->parameters); if( is_array($data) ) { if( !empty($data['layout']) ) { $page->layout = $data['layout']; unset($data['layout']); } if( !empty($data['view']) ) { $page->view = $data['view']; unset($data['view']); } } if( !isset($data['responseType']) || !in_array($data['responseType'],array('html','json')) ) { $data['responseType'] = null; } /* рендерим отображение */ $viewObject = new Core_View(); Core_Registry::set('view',$viewObject); $viewObject->setUrlGetter(array(&$router,'getUrlByRoute')); if( !empty($data['responseCode']) ) { $viewObject->setResponseCode($data['responseCode']); unset($data['responseCode']); } $responseType = empty($data['responseType']) ? null : $data['responseType']; switch( $responseType ) { case 'json': unset($data['responseType']); echo json_encode($data); break; default: $viewObject->setPageParams(array_merge($data,array( 'pathPrefix' => $pathPrefix, 'siteName' => $site->sitename, ))); $content = $viewObject->render('views/'.$site->sitename.'/content/'.$page->view,true); $viewObject->setPageParams(array( 'content' => $content, )); $viewObject->render('views/'.$site->sitename.'/layouts/'.$page->layout); break; } ?>