Ошибка 404 по ссылке на топик в закрытом блоге

Единственное чего мне не хватает в закрытых блогах — это надписи о том, что блог закрытый, вместо «Ошибки 404», когда человек переходит по прямой ссылке на топик в «закрытом блоге» (т.е. xxxxx.ru/blog/xxx/142.html).

Как можно сделать, что бы выводилась такая же надпись, которая появляется, когда «левый» человек переходит по ссылке на закрытый блог (т.е. xxxxx.ru/blog/xxx)?
Это закрытый блог, у вас нет прав на просмотр контента

Для чего мне это нужно?
Во-первых, некоторые пользователи, которые уже приглашены в закрытый блог, кидают прямые ссылки кому-либо, и получившие ссылку, переходя по ней, получают «Ошибку 404», мне кажется это не очень хорошо.

Во-вторых, я использую плагин «Похожие записи». В этот блог иногда попадают ссылки на «закрытые» записи. Переходя по ним, человек получает «Ошибку 404»

Большое спасибо за внимание.

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

avatar
Поддерживаю
avatar
+1
«404» это не человеческая ошибка, как ни странно, но многие просто могут не знать, что это такое. Люди пришли читать, некоторые — еще и писать в блог, а им какие-то невнятные ошибки подсовывают.
  • wcp
  • 0
avatar
Конечно, посетителю крайне не приятно видеть подобную ошибку.

Вообще я не ожидал с подобным столкнуться, сначала даже были мысли что я сам что-то упустил, но нет. Стандартная функция движка — и такой не очень приятный момент)
avatar
ВОт что-то типо хака:
ActionBlog.class.php
avatar
614 строка:
return parent::EventNotFound();

меняем на
return parent::TopicClosed();


Action.class.php:

Добавляем
protected function TopicClosed() {		
		return Router::Action('error','TopicClosed');
	}


ActionError.class.php:

protected function RegisterEvent() {		
		$this->AddEvent('index','EventError');		
		$this->AddEvent('404','EventError');		
	}


меняем на
protected function RegisterEvent() {		
		$this->AddEvent('index','EventError');		
		$this->AddEvent('404','EventError');		
		$this->AddEvent('TopicClosed','EventError');	
	}


if ($this->sCurrentEvent=='404') {			
			$this->Message_AddErrorSingle($this->Lang_Get('system_error_404'),'404');
			header("HTTP/1.1 404 Not Found");
		}
меняем на

if ($this->sCurrentEvent=='TopicClosed') {			
			$this->Message_AddErrorSingle('Топик в закрытом блоге','404');
			header("HTTP/1.1 404 Not Found");
		}


elseif ($this->sCurrentEvent=='404') {			
			$this->Message_AddErrorSingle($this->Lang_Get('system_error_404'),'404');
			header("HTTP/1.1 404 Not Found");
		}

Примерно так, некрасиво и работоспособность не проверял.
avatar
Спасибо, но я надеюсь что возможно применить что-то менее радикальное!
Хотелось бы что бы на этот момент обратил внимание ort
avatar
я думаю, что эту проблему можно вынести в svn
avatar
да, в слудующем релизе уж точно не хочется наблюдать такой момент
avatar
достаточно вместо
return parent::EventNotFound();
сделать
$this->Message_AddErrorSingle('Топик в закрытом блоге',$this->Lang_Get('error'));
return Router::Action('error');
avatar
Сделал, но, всё равно выскакивает 404
avatar
Пардон, всё получилось.

Максим, в следующем релизе это будет в комплекте?
avatar
$this->Message_AddErrorSingle('Топик находится в закрытом блоге. Вы не можете просматривать этот блог, так как в него не приглашены.',$this->Lang_Get('303'));
return Router::Action('error');

Вот мой вариант, может кому-то так больше понравится)
avatar
Текст, конечно, лучше через языковую константу, а то потом если вдруг придется переводить на другой язык — надой будет все такие вставки по коду искать. )
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.