Jump to content

Ошибка при просмотре контента пользователя

Featured Replies

Posted
comment_156573

Здравствуйте. 

Установлен Invision Community v4.3.4 NULLED, при просмотре контента пользователя который не разместил ни одного поста на форуме появляется ошибка "Сайт ***.ru выполнил переадресацию слишком много раз."

error1.thumb.png.f4caef48f6db2be5273614e80657824e.png

error.png.b36bf517d9cfc2b4f9deb22eeda8467c.png

error3.thumb.gif.9a0a1fe9d846e5911d17fdfd0b2a347d.gif

Плагины и приложения все отключал, не помогает. 

Может знает кто в чем проблема?

  • Author
comment_156680

Увы не придумал ничего лучше размещения этого скрипта в index.php в самом верху.

if(strpos($_SERVER['REQUEST_URI'], '/content/'))
{
    ob_start();
    require_once 'init.php';
    $urlID = explode('-', explode("/", $_SERVER['REQUEST_URI'])[3])[0];
    $profile_IPS = \IPS\Member::load( $urlID );
    if($profile_IPS->member_posts <= 0)
    {
       $urlGo = 'https://site.ru/forum/profile/'.$profile_IPS->member_id.'-q/';
        header('Location: '.$urlGo);
        ob_flush();
        exit;   
    }
}

Если находимся на странице содержащей в URL текст /content/, то смотрим существует ли у пользователя хоть 1 сообщение, если их нет то выполняем редирект на его профиль.

Вот такой некрасивый костыль. Возможно кому-то пригодиться или кто-то предложит решение лучше.

comment_156687

Врядли кому нибудь пригодится, так как в нормальных условиях этот редирект отрабатывает только при определенных условиях, и о багов по нему небыло репортов. У вас он почему-то ложно срабатывает каждый раз вызывая таким образом зацикливание. Возможно поступают неактуальные данные (где-то вручную правили) или что-то не так высчитывается. Нужно смотреть в файле профиле profile.php какое из условий заставляет его сработать. К сожалению воспроизвести проблему мне не удалось.

  • Author
comment_156695

siv1987 спасибо что дали направление поиска проблемы, это решило её правильным образом)

В файле profile.php в функции content() добавил проверку на количество контента пользователя, в случае если он равен 0, то не делать редирект.

У меня это находилось в 506 строке. Код ниже, доработка помечена комментарием //Доработка

	/* Build Output */
		if ( !$currentType )
		{
		    
			$query = \IPS\Content\Search\Query::init()->filterByAuthor( $this->member )->setOrder( \IPS\Content\Search\Query::ORDER_NEWEST_UPDATED )->setPage( $page );
			$results = $query->search();
            
			/* If we requested a higher page than is allowed, redirect back to last page */
			$totalResults = $results->count( TRUE );
            
			if( ceil( $totalResults / $query->resultsToGet ) < $page )
			{
			    if($this->member->member_posts != 0) //Доработка
			    {
    				$highestPage = floor( $totalResults / $query->resultsToGet );
    				\IPS\Output::i()->redirect( \IPS\Request::i()->url()->setQueryString( 'page', $highestPage ?: 1 ), NULL, 303 );
			    }
			}
            
			$pagination = trim( \IPS\Theme::i()->getTemplate( 'global', 'core', 'global' )->pagination( $this->member->url()->setQueryString( array( 'do' => 'content', 'all_activity' => 1 ) ), ceil( $results->count( TRUE ) / $query->resultsToGet ), $page, $query->resultsToGet ) );
			if ( \IPS\Request::i()->isAjax() AND \IPS\Request::i()->all_activity )
			{
				\IPS\Output::i()->json( array( 'rows' => \IPS\Theme::i()->getTemplate('profile')->userContentStream( $this->member, $results, $pagination ) ) );
				return;
			}
			else
			{
				$output = \IPS\Theme::i()->getTemplate('profile')->userContentStream( $this->member, $results, $pagination );
			}
		}

 

Упростил код. 504 строка

if( ceil( $totalResults / $query->resultsToGet ) < $page && $this->member->member_posts != 0)
{
  $highestPage = floor( $totalResults / $query->resultsToGet );
  \IPS\Output::i()->redirect( \IPS\Request::i()->url()->setQueryString( 'page', $highestPage ?: 1 ), NULL, 303 );
}

 

Хотя пожалуй лучше будет даже так && $this->member->member_posts > 0

comment_156697

Нужно было не костыли ставить, а продебажить данные почему срабатывает редирект.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.


Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.