Перейти к содержимому


Фото
- - - - -

Редирект с ?page=all


  • Чтобы отвечать, сперва войдите на форум
1 ответ в теме

#1 kazak

kazak
  • Пользователь
  • 59 сообщений
  • Заказчик
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 31.07.2018 - 21:50

Ребят, привет!
Нужна подсказка, помогите плиз. 
Суть: если в категории появляется пагинация, то появляется и ссылка на страницу с ?page=all (все товары с категории).
Но если товаров мало и блок ссылок пагинации не появляется, страница с ?page=all все равно открывается при переходе по прямой ссылке. Пример: Здесь 
При определенной логике организации пагинации для поисковых систем это не правильно. Так получилось и у меня.
Задача: Сделать 301 редирект со страниц с page=all, если товаров не достаточно, чтобы появилась пагинация.
Что есть: В шаблоне вывода блока пагинации есть условие {if $total_pages_num>1}. Под мои нужды его можно переделать в {if $total_pages_num<1}

В /view/ProductsView.php есть код, я так понимаю нужно править примерно здесь:

		// Показать все страницы сразу
		
		if($this->request->get('page') == 'all')
		$items_per_page = $products_count;	
		
		$pages_num = ceil($products_count/$items_per_page);
		$this->design->assign('total_pages_num', $pages_num);
		$this->design->assign('total_products_num', $products_count);		

		$request_page = $this->request->get('page');
		if(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;
		}
		
		
		$this->design->assign('total_pages_num', $pages_num);
		$this->design->assign('total_products_num', $products_count);

		$filter['page'] = $current_page;
		$filter['limit'] = $items_per_page;

ЗЫ: теоретически этот участок может отличаться от оригинального в сборке, у меня многое затрагивалось, возможно и этот код тоже.

 

Когда-то у меня была реализована логика пагинации без страниц с page=all. Тогда мы просто редиректили эту страницу на основную. Тогда в /view/ProductsView.php код выглядел так:

 

		// Показать все страницы сразу
		$pages_num = ceil($products_count / $items_per_page);
		$request_page = $this->request->get('page');
		if(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;
		}
		
		
		$this->design->assign('total_pages_num', $pages_num);
		$this->design->assign('total_products_num', $products_count);

		$filter['page'] = $current_page;
		$filter['limit'] = $items_per_page;

Отсюда можно взять сам редирект.

 

Вопрос: как правильно в существующий код (который первый в моем посте) вписать 301 редирект с условием, чтобы {if $total_pages_num<1}, то редиректило на основную страницу?


Изменено: kazak, 31.07.2018 - 21:52


#2 yr4ik

yr4ik
  • Фрилансер
  • 865 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 31.07.2018 - 22:13

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

на 

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

}

Изменено: yr4ik, 31.07.2018 - 23:28





0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых