Перейти к содержанию
Официальный форум поддержки Simpla

Редирект с ?page=1 на категорию, с ?page=N+1 НА ?page=N


Перейти к решению Решено yr4ik,

Рекомендуемые сообщения

В общем стоит задача:

 

1. страница ?page=1 должна редиректить 301-м на категорию

 

2. если в категории например 10 страниц пагинации, а в урле 10-й страницы добавить +1 (перейти на ?page=11), страница открывается пустая. 

 

Нужно, чтобы такие (в т.ч. и последующие) страницы редиректили 301-м редиректом на последнюю страницу пагинации с товарами.

 

Кто-то сталкивался с подобной задачей? Есть решение? Хэлп)

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

Пробуйте в view/Products.php

 

1.

        // Постраничная навигация
        $items_per_page = $this->settings->products_num;        
        // Текущая страница в постраничном выводе
        $current_page = $this->request->get('page', 'integer');
        if($current_page==1)
            header('Location: '.$this->request->url(array('page'=>null)));
 
2. 
        // Если искали товар и найден ровно один - перенаправляем на него
        if(!empty($keyword) && $products_count == 1)
            header('Location: '.$this->config->root_url.'/products/'.$p->url);
        if(empty($keyword) && empty($products))
            header('Location: '.$this->request->url(array('page'=>null)));
 
Ссылка на сообщение
Поделиться на другие сайты

 

Пробуйте в view/Products.php

 

1.

        // Постраничная навигация
        $items_per_page = $this->settings->products_num;        
        // Текущая страница в постраничном выводе
        $current_page = $this->request->get('page', 'integer');
        if($current_page==1)
            header('Location: '.$this->request->url(array('page'=>null)));
 
2. 
        // Если искали товар и найден ровно один - перенаправляем на него
        if(!empty($keyword) && $products_count == 1)
            header('Location: '.$this->config->root_url.'/products/'.$p->url);
        if(empty($keyword) && empty($products))
            header('Location: '.$this->request->url(array('page'=>null)));
 

Спасибо за подсказку, но:

 

1. Работает, но перенаправляет 302 редиректом, а нужен 301-й. Что нужно поменять?

 

2. Судя по комментарию, то закомментированной строке, это из другой оперы. Нужно так: если переходим на страницу пагинации, на которой уже нет товаров, то чтобы переадрессовывало на последнюю страницу пагинации, на которой товары есть. Т.е. если в категории 10 страниц пагинации с товарами, то при переходе на 11-ю и далее - должно перебрасывать на десятую страницу (последнюю с товарами).

 

В обои случаях должен срабатывать 301-й редирект. 

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

       

 // Текущая страница в постраничном выводе

        $current_page = $this->request->get('page', 'integer');

        if($current_page==1)

        header('Location: '.$this->request->url(array('page'=>null)), true, 301 );

 

Вроде работает правильно, если есть ошибки, знающие поправьте.

 

По второму пункту вопросы открыт. Хэээлп!!!)

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

Пробуйте в view/Products.php

 

1.

        // Постраничная навигация

        $items_per_page = $this->settings->products_num;        

        // Текущая страница в постраничном выводе

        $current_page = $this->request->get('page', 'integer');

        if($current_page==1)

            header('Location: '.$this->request->url(array('page'=>null)));

 

2. 

 

 

        // Если искали товар и найден ровно один - перенаправляем на него

        if(!empty($keyword) && $products_count == 1)

            header('Location: '.$this->config->root_url.'/products/'.$p->url);

        if(empty($keyword) && empty($products))

            header('Location: '.$this->request->url(array('page'=>null)));

А не получим вечный цикл если откроем пустую категорию?

 

Попробуйте так:

if($this->request->get('page') == 'all')
	$items_per_page = $products_count;	

$pages_num = ceil($products_count/$items_per_page);

 

заменяем на: 

 

$pages_num = ceil($products_count / $items_per_page);
$request_page = $this->request->get('page');
if($request_page == 'all')
{
	$items_per_page = $products_count;	
}
elseif(intval($request_page)==1)
{
	header('Location: '.$this->request->url(array('page'=>null)), true, 301);
	exit;
}
elseif($current_page > 1 && $current_page > $pages_num)
{
	if($pages_num==1)
		$pages_num= null;
	
	header('Location: '.$this->request->url(array('page'=>$pages_num)), true, 301);
	exit;
}
Изменено пользователем yr4ik
Ссылка на сообщение
Поделиться на другие сайты

 

А не получим вечный цикл если откроем пустую категорию?

 

Попробуйте так:

if($this->request->get('page') == 'all')
	$items_per_page = $products_count;	

заменяем на: 

$request_page = $this->request->get('page');
if($request_page == 'all')
{
	$items_per_page = $products_count;	
}
elseif(intval($request_page)==1)
{
	header('Location: '.$this->request->url(array('page'=>null)), true, 301);
	exit;
}
elseif($current_page > 1 && !$products_count)
{
	if(($prev_page = max(1, floor($products_count/$items_per_page)))==1)
		$prev_page = null;
	
	header('Location: '.$this->request->url(array('page'=>$prev_page)), true, 301);
	exit;
}

с ?page=1 работает. А вот второй почему-то нет( 

Что может быть?

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

поправил предыдущее сообщение. Условия не так сделал.

Обратите внимание на $pages_num (оно должно стать выше кода)

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

Так должно быть лучше

 

2.

// Если искали товар и найден ровно один - перенаправляем на него

if(!empty($keyword) && $products_count == 1)

header('Location: '.$this->config->root_url.'/products/'.$p->url);

if(empty($keyword) && empty($products) && $pages_num>0)

header('Location: '.$this->request->url(array('page'=>$pages_num)), true, 301);

 

И вечного цикла не должно быть.

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

поправил предыдущее сообщение. Условия не так сделал.

Обратите внимание на $pages_num (оно должно стать выше кода)

теперь наоборот- первый не работает, второй работает

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

теперь наоборот- первый не работает, второй работает

 

Поправил еще раз. Случайно затер строку 

$request_page = $this->request->get('page');
Ссылка на сообщение
Поделиться на другие сайты

 

Поправил еще раз. Случайно затер строку 

$request_page = $this->request->get('page');

Супер, все работает. Спасибо!

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

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...