Интересная задача переадресации на другую страничку

Можно ли как-то сделать перенаправление через конфиг или файл шаблона? Если юзер зарег., то на /сайт/index, иначе тут остаться.

15 комментариев

avatar
Можно переопределить actionIndex и там делать проверку. Но можно более конкретный пример?
avatar
Я, конечно, не совсем дурак. Поэтому сделал вот так в index.tpl:
{if $oUserCurrent}
<meta  HTTP-EQUIV="Refresh" CONTENT="0; URL=/index/">
код

{else}
    код
{/if}

Но хотелось, чтобы уже раньше определял и сразу туда шел.

Пример. Пользователь зашел на сайт и авторизирован. Для него должен осуществляться переход на сайт/index/. А всем незарег. юзерам должна показываться стандартная страничка сайта, адрес — сайт.ру. Есть, конечно, идея с добавлением нового acrion… Но хочу у сообщества спросить.
avatar
Но хотелось, чтобы уже раньше определял и сразу туда шел.
Переопределить ActionIndex
avatar
Вот я и спрашиваю, как?
avatar
PluginKuku_ActionIndex extends PluginKuku_Inherit_ActionIndex {
 protected funtion EventIndex(){
  if ($this->oUserCurrent){
    Router::Location('/index');
    return;
  }
   parent::EventIndex();
}
}


Вот как-то так
avatar
Спасибо большое, но куда этот код вставить?
avatar
Пишите минимальный плагин с приблизительно таким кодоим в classes/actions/ActionIndex
avatar
В mainpage плагин как-то получится встроить?
avatar
да, думаю получится давайте может в личку координаты ФТПшки и посмотрим.
avatar
Я понимаю, что лень отвечать на вечные вопросы. Поэтому могу предоставить денежное вознаграждение за решение проблемы.

Также предлагаю другим пользователям присоединиться к решению проблемы.
avatar
Хук на вскидку

\classes\hooks\HookRedirect.class.php
<?php
//===============================================================
class HookRedirect extends Hook{
//===============================================================
	public function RegisterHook(){
		$this->AddHook('init_action','InitActionRedirectHook',__CLASS__,1000);
	}
//===============================================================
	public function InitActionRedirectHook(){
		$aRedirectSettings=array(
		//	экшен=>array('events'=>массив ивентов,'redirect'=>редирект)
			'page'=>array('events'=>array('','about',),'redirect'=>'login'),
		//	редирект c /page и /page/about на /login
			'people'=>array('events'=>array(),'redirect'=>'register'),
		//	редирект всех ссылок начинающихся с /people на страницу ошибки 404 ( 'register' - несуществующий урл)
		);
		if(!($this->User_IsAuthorization()) && !empty($aRedirectSettings)){
			$aActionSettings=isset($aRedirectSettings[Router::GetAction()]) ? $aRedirectSettings[Router::GetAction()] : null;
			if(!is_null($aActionSettings)){
				if((!empty($aActionSettings['events']) && in_array(Router::GetActionEvent(),$aActionSettings['events'])) || empty($aActionSettings['events'])) Router::Location(Router::GetPath($aActionSettings['redirect']));
			}
		}
	}
//===============================================================
}
?>


ЗЫ данным пользуйтесь на свой страх и риск, возможно это работает
avatar
Тоже огромное спасибо. Пока работает.
avatar
Дико извиняюсь. Сначала он работал, но потом перестал.

Я использую mainpage для создания другой главной страницы. Пользователь зашел на сайт и авторизирован. Для него должен осуществляться переход на сайт/index/. А всем незарег. юзерам должна показываться стандартная страничка сайта, адрес — сайт.ру. После вызова хука он перестал
работать.
avatar
Хук выполняет обратную задачу — устанавливает редирект только тех кто незарегистрированный пользователь.
Два вашей задачи
$aRedirectSettings=array(
	'mainpage'=>array('events'=>array(),'redirect'=>'index'),
);

+ в условии (18 строка) !($this->User_IsAuthorization()) убрать впереди восклицательный знак
avatar
О! Спасибо огромное.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.