1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-07-01 05:55:02 +03:00

Использование rewrite rules в роутере.

This commit is contained in:
Alexey Kachayev 2009-08-19 12:01:35 +00:00
parent 10231ffac3
commit 00a2ba53a1
4 changed files with 43 additions and 25 deletions

View file

@ -24,6 +24,6 @@ return array(
'user' => 'root',
'pass' => '',
'type' => 'mysql',
'dbname' => 'ls_core',
'dbname' => 'social',
);
?>

View file

@ -97,6 +97,13 @@ class Router extends Object {
protected function LoadConfig() {
//Конфиг роутинга, содержит соответствия URL и классов экшенов
$this->aConfigRoute = Config::Get('router');
// Переписываем конфиг согласно правилу rewrite
foreach ((array)$this->aConfigRoute['rewrite'] as $sPage=>$sRewrite) {
if(isset($this->aConfigRoute['page'][$sPage])) {
$this->aConfigRoute['page'][$sRewrite] = $this->aConfigRoute['page'][$sPage];
unset($this->aConfigRoute['page'][$sPage]);
}
}
}
/**
@ -120,15 +127,15 @@ class Router extends Object {
/**
* Сначала запускаем инициализирующий экшен
*/
require_once(DIR_SERVER_ROOT.'/classes/actions/Init.class.php');
require_once(Config::Get('path.root.server').'/classes/actions/Init.class.php');
$oActionInit=new Init($this->oEngine);
$oActionInit->InitAction();
$sActionClass=$this->DefineActionClass();
require_once(DIR_SERVER_ROOT.'/classes/actions/'.$sActionClass.'.class.php');
require_once(Config::Get('path.root.server').'/classes/actions/'.$sActionClass.'.class.php');
$sPrefixCustom='';
if (file_exists(DIR_SERVER_ROOT."/classes/actions/".$sActionClass.'.class.custom.php')) {
require_once(DIR_SERVER_ROOT."/classes/actions/".$sActionClass.'.class.custom.php');
if (file_exists(Config::Get('path.root.server')."/classes/actions/".$sActionClass.'.class.custom.php')) {
require_once(Config::Get('path.root.server')."/classes/actions/".$sActionClass.'.class.custom.php');
$sPrefixCustom='_custom';
}
$sClassName=$sActionClass.$sPrefixCustom;
@ -296,22 +303,33 @@ class Router extends Object {
}
/**
* Функция, возвращающая ссылку на Action по переданому названию страницы
* Функция, возвращающая правильную адресацию по переданому названию страницы
*
* @param string $action
* @return string
*/
static public function GetPath($action) {
$aRoutes = array_flip(self::getInstance()->aConfigRoute['page']);
// Если пользователь запросил action по умолчанию
if($action == 'default') {
$action = self::getInstance()->aConfigRoute['config']['action_default'];
}
// Пытаемся найте соответствующий роут
if(!$sPage = @$aRoutes['Action'.ucfirst($action)]) {
return false;
}
return DIR_WEB_ROOT."/$sPage/";
$sPage = ($action == 'default')
? self::getInstance()->aConfigRoute['config']['action_default']
: $action;
// Смотрим, есть ли правило rewrite
$sPage = self::getInstance()->Rewrite($sPage);
return Config::Get('path.root.web')."/$sPage/";
}
/**
* Try to find rewrite rule for given page.
* On success return rigth page, else return given param.
*
* @param string $sPage
* @return string
*/
protected function Rewrite($sPage) {
return (isset($this->aConfigRoute['rewrite'][$sPage]))
? $this->aConfigRoute['rewrite'][$sPage]
: $sPage;
}
}
?>

View file

@ -28,7 +28,7 @@ function smarty_function_router($aParams,&$oSmarty) {
$oSmarty->trigger_error("Router: missing 'page' parametr");
return ;
}
require_once(DIR_SERVER_ROOT.'/classes/engine/Router.class.php');
require_once(Config::Get('path.root.engine').'/classes/Router.class.php');
if(!$sPath = Router::GetPath($aParams['page'])) {
$oSmarty->trigger_error("Router: unknown 'page' given");

View file

@ -23,31 +23,31 @@
<h1><a href="{$DIR_WEB_ROOT}"><strong>Live</strong>Street</a></h1>
<ul class="nav-main">
<li {if $sMenuHeadItemSelect=='blog'}class="active"{/if}><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_BLOG}/">{$aLang.blogs}</a></li>
<li {if $sMenuHeadItemSelect=='people'}class="active"{/if}><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PEOPLE}/">{$aLang.people}</a></li>
<li {if $sAction=='page' and $sEvent=='about'}class="active"{/if}><a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_PAGE}/about/">{$aLang.page_about}</a></li>
<li {if $sMenuHeadItemSelect=='blog'}class="active"{/if}><a href="{router page='blog'}">{$aLang.blogs}</a></li>
<li {if $sMenuHeadItemSelect=='people'}class="active"{/if}><a href="{router page='people'}">{$aLang.people}</a></li>
<li {if $sAction=='page' and $sEvent=='about'}class="active"{/if}><a href="{router page='page'}about/">{$aLang.page_about}</a></li>
</ul>
{if $oUserCurrent}
<div class="profile">
<a href="{$oUserCurrent->getUserWebPath()}" class="avatar"><img src="{$oUserCurrent->getProfileAvatarPath(48)}" alt="{$oUserCurrent->getLogin()}" /></a>
<ul>
<li><a href="{$oUserCurrent->getUserWebPath()}" class="author">{$oUserCurrent->getLogin()}</a> (<a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_LOGIN}/exit/">{$aLang.exit}</a>)</li>
<li><a href="{$oUserCurrent->getUserWebPath()}" class="author">{$oUserCurrent->getLogin()}</a> (<a href="{router page='login'}exit/">{$aLang.exit}</a>)</li>
<li>
{if $iUserCurrentCountTalkNew}
<a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_TALK}/" class="message" title="{$aLang.user_privat_messages_new}">{$iUserCurrentCountTalkNew}</a>
<a href="{router page='talk'}" class="message" title="{$aLang.user_privat_messages_new}">{$iUserCurrentCountTalkNew}</a>
{else}
<a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_TALK}/" class="message-empty">&nbsp;</a>
<a href="{router page='talk'}" class="message-empty">&nbsp;</a>
{/if}
{$aLang.user_settings} <a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_SETTINGS}/profile/" class="author">{$aLang.user_settings_profile}</a> | <a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_SETTINGS}/tuning/" class="author">{$aLang.user_settings_tuning}</a>
{$aLang.user_settings} <a href="{router page='settings'}profile/" class="author">{$aLang.user_settings_profile}</a> | <a href="{router page='settings'}tuning/" class="author">{$aLang.user_settings_tuning}</a>
</li>
<li>{$aLang.user_rating} <strong>{$oUserCurrent->getRating()}</strong></li>
</ul>
</div>
{else}
<div class="profile guest">
<a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_LOGIN}/" onclick="return showLoginForm();">{$aLang.user_login_submit}</a> {$aLang.or}
<a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_REGISTRATION}/" class="reg">{$aLang.registration_submit}</a>
<a href="{router page='login'}" onclick="return showLoginForm();">{$aLang.user_login_submit}</a> {$aLang.or}
<a href="{router page='registration'}" class="reg">{$aLang.registration_submit}</a>
</div>
{/if}