Posted 4 апреля, 20195 yr comment_156573 Здравствуйте. Установлен Invision Community v4.3.4 NULLED, при просмотре контента пользователя который не разместил ни одного поста на форуме появляется ошибка "Сайт ***.ru выполнил переадресацию слишком много раз." Плагины и приложения все отключал, не помогает. Может знает кто в чем проблема?
10 апреля, 20195 yr 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 сообщение, если их нет то выполняем редирект на его профиль. Вот такой некрасивый костыль. Возможно кому-то пригодиться или кто-то предложит решение лучше.
10 апреля, 20195 yr comment_156687 Врядли кому нибудь пригодится, так как в нормальных условиях этот редирект отрабатывает только при определенных условиях, и о багов по нему небыло репортов. У вас он почему-то ложно срабатывает каждый раз вызывая таким образом зацикливание. Возможно поступают неактуальные данные (где-то вручную правили) или что-то не так высчитывается. Нужно смотреть в файле профиле profile.php какое из условий заставляет его сработать. К сожалению воспроизвести проблему мне не удалось.
11 апреля, 20195 yr 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
11 апреля, 20195 yr 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.