Recommended Posts

Для устранения дублей страниц, т.к. страница пагинации page=1 является дублем страницы без пагинации

Добавляем в main.php шаблона в самом начале функции main следующий код:

$r_uri = $_SERVER['REQUEST_URI']; // Полная строка с GET параметрамиif (preg_match("#([\?\&]+page=1)\D*$#",$r_uri,$matches)) {$new_location=SITEBILL_MAIN_URL.str_replace($matches[1],"",$r_uri);header('HTTP/1.1 301 Moved Permanently');header('Location: '.$new_location);exit();} // Убираем page=1 из урл

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Для устранения дублей страниц, т.к. страница пагинации page=1 является дублем страницы без пагинации

Добавляем в main.php шаблона в самом начале функции main следующий код:

$r_uri = $_SERVER['REQUEST_URI']; // Полная строка с GET параметрамиif (preg_match("#([\?\&]+page=1)\D*$#",$r_uri,$matches)) {$new_location=SITEBILL_MAIN_URL.str_replace($matches[1],"",$r_uri);header('HTTP/1.1 301 Moved Permanently');header('Location: '.$new_location);exit();} // Убираем page=1 из урл

Прописываю, о при обновлении страницы, на секунду вылазит код, потом появляется сайт. Прописываю в маин, просто в самом начале, потом основной код начинается, правильно ли я делаю ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Прописываю, о при обновлении страницы, на секунду вылазит код, потом появляется сайт. Прописываю в маин, просто в самом начале, потом основной код начинается, правильно ли я делаю ?

Можете принтскрин этого кода показать, который появляется?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Еле словил момент - http://prntscr.com/8t889e

Это значит что вы просто в main.php вставили код в начале файла, так неправильно.

Вам нужно в этом файле найти функцию (строчки)

function main () {

И сразу после нее добавить код.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это значит что вы просто в main.php вставили код в начале файла, так неправильно.

Вам нужно в этом файле найти функцию (строчки)

function main () {

И сразу после нее добавить код.

Спасибо, теперь нет page1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

Для устранения дублей страниц, т.к. страница пагинации page=1 является дублем страницы без пагинации

Добавляем в main.php шаблона в самом начале функции main следующий код:

$r_uri = $_SERVER['REQUEST_URI']; // Полная строка с GET параметрамиif (preg_match("#([\?\&]+page=1)\D*$#",$r_uri,$matches)) {$new_location=SITEBILL_MAIN_URL.str_replace($matches[1],"",$r_uri);header('HTTP/1.1 301 Moved Permanently');header('Location: '.$new_location);exit();} // Убираем page=1 из урл

 

Если не ошибаюсь, то в таком варианте перестанет работать сортировка объявлений на главной странице, если она присутствует в шаблоне. При сортировке используется запрос типа site.ru/?page=1&order=type&asc=desc, где page=1 обязателен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Действительно, в шаблоне Realia не работают функции, расположенные на панели под картой на главной, вызывая ошибку 404, а именно - варианты отображения list/thumbs, сортировка по возрастанию/убыванию, сортировка по типам город/район/улица/цена ... Пока отключаю эту примочку. 

Ждём сведений со стороны... :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
if (preg_match("#([\?\&]+page=1)\D*$#",$r_uri,$matches))

В этом условии, как минимум, не нужно захватывать [\?\&] в регулярке, потому что присходит замена не только page=1 а ?page=1 или &page=1. Второе не особо страшно, а вот первое полностью ломает строку переменных запроса.

 

Но и просто выкинуть их за скобки тоже не вариант кажется. Над этим я еще подумаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не уверен на сколько это правильно, т.к. не селен в php и тем более в регулярных выражениях, но я бы сделал так if (preg_match("#([\?\&]+page=1)$#",$r_uri,$matches)). В таком варианте замена page=1 при поиске или сортировке не должна происходить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вот исправленный вариант

		$r_uri = $_SERVER['REQUEST_URI']; // Полная строка с GET параметрами		if (preg_match("#([\?\&]+page=1)(\D*)$#",$r_uri,$matches)) {			$new_location=SITEBILL_MAIN_URL.str_replace($matches[1],"",$r_uri);			if(!empty($matches[2]) && $matches[1] == '?page=1') {				$new_location = substr_replace($new_location,'?',strpos($new_location,'&'),1);			}			header('HTTP/1.1 301 Moved Permanently');			header('Location: '.$new_location);			exit();		} // Убираем page=1 из урл

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вариант 1:

суть: разбираем адрес запроса. анализируем параметры на наличие первой страницы. при наличии его - убираем ео из параметров, пересклеиваем строку запроса, формируем новый адрес с учетом вырезки и делаем редирект.

минусы: больше строк

плюсы: нет неочевидных регулярок

$parsed_parts=parse_url($_SERVER['REQUEST_URI']);$par=array();parse_str($parsed_parts['query'], $par);if(isset($par['page']) && $par['page']=='1'){  unset($par['page']);  $new_location=SITEBILL_MAIN_URL.$parsed_parts['path'].(count($par)>0 ? '?'.http_build_query($par) : '');  header('HTTP/1.1 301 Moved Permanently');  header('Location: '.$new_location);  exit();}

Вариант 2:

суть: регуляркой ищем в строке запроса подозрительные куски вида ?page=1 и &page=1, При наличии их даем команду на замену. Но замену проводим не в лоб, а избирательно:

 

/apps/?page=1&paramА=x&paramB=y =============> ?page=1& меняем на "?" что бы сохранить целостность строки запросы и просто убить первое звено

/apps/?page=1 =============> ?page=1 "короткая" строка запроса: меняем на пустоту

/apps/?paramА=x&page=1&paramB=y =============> &page=1 меняем на пустоту (удаляем звено)

 

порядок замен важен!

 

минусы: для фанатов регулярок минусов нет, но необходимость вариативнх действия после использования регулярки, сводит профит от ее применения к мизеру

плюсы: меньше строк

$r_uri = $_SERVER['REQUEST_URI'];if (preg_match("#([\?\&]page=1)\D*$#", $r_uri, $matches)) {  $new_location=SITEBILL_MAIN_URL.str_replace(array('?page=1&', '?page=1', '&page=1'), array('?', '', ''), $r_uri);  header('HTTP/1.1 301 Moved Permanently');  header('Location: '.$new_location);  exit();}

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
if (preg_match("#([\?\&]+page=1)(\D*)$#",$r_uri,$matches)) {

 

Не могу понять зачем плюсик между вариативным ?|& и page=1 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не могу понять зачем плюсик между вариативным ?|& и page=1 ?

Это последствия "одновременной игры" под названием "программируем+отбиваемся по скайпу"  :blink:

Мог быть и не "+", а что-то типа {1,1} ....  :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Проверил по варианту 1, полёт нормальный, глюков не заметил. Сортировка и переключение видов - list / thumbs работает корректно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

После манипуляций с вариантом 1 (пост 15) заметил, что если переходить с главной на страницы 2,3 и т.д. в пагинаторе, после чего кликнуть на Главную (по сути первую), то отображается последняя открытая страница но уже в качестве главной, т.е. ничего не меняется. Шаблон Realia

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А это уже другая история. Есть внутри движка такая штучка, как фиксация последней просмотренной страницы. Суть в том, что вы открыли список своих объяв в ЛК, налистали страницу N, выбрали объявку и открыли ее поредактировать. После этого жмете сохранить и, обычно вы должны были бы вылететь на первую страницу списка, но вот эта запомненная страница не дает сделать этого и вы опять остаетесь на той, с которой ушли на форму.

 

А вот то, что вы наблюдаете в обычном списке - это побочное явление вот этого запоминания.

 

Можно убить это поведение совсем, разместив строки

if(isset($_SESSION['rem_page'])){unset($_SESSION['rem_page']);}

в файле /main/main.php сразу после <?php

Либо попробовать зарезать их аккуратнее, поставив эти же строки после блока 

if ( !$has_result && preg_match('/^account/', $REQUESTURIPATH) ) {...}

Тогда мы как бы оставим это поведение для ЛК, но уберем для сетки объявлений.

 

Первый способ у меня самого включен исходно и меня устраивает, а вот второй я, честно говоря, тщательно не проверял.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

А это уже другая история. Есть внутри движка такая штучка, как фиксация последней просмотренной страницы. Суть в том, что вы открыли список своих объяв в ЛК, налистали страницу N, выбрали объявку и открыли ее поредактировать. После этого жмете сохранить и, обычно вы должны были бы вылететь на первую страницу списка, но вот эта запомненная страница не дает сделать этого и вы опять остаетесь на той, с которой ушли на форму.

 

А вот то, что вы наблюдаете в обычном списке - это побочное явление вот этого запоминания.

 

Можно убить это поведение совсем, разместив строки

if(isset($_SESSION['rem_page'])){unset($_SESSION['rem_page']);}

в файле /main/main.php сразу после <?php

Либо попробовать зарезать их аккуратнее, поставив эти же строки после блока 

if ( !$has_result && preg_match('/^account/', $REQUESTURIPATH) ) {...}

Тогда мы как бы оставим это поведение для ЛК, но уберем для сетки объявлений.

 

Первый способ у меня самого включен исходно и меня устраивает, а вот второй я, честно говоря, тщательно не проверял.

 

 

Тоже интересовал этот вопрос. Сделал как написали, работает

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сделал как написали, работает

 

Первым способом (глобально) или вторым (после отработки account)?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Первым способом (глобально) или вторым (после отработки account)?

Второй, тоже была проблема, с тем что остаются страницы пользователя.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это последствия "одновременной игры" под названием "программируем+отбиваемся по скайпу"  :blink:

 

Мне бы так, хотя бы первое.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас