kazak Опубликовано 15 февраля, 2018 Жалоба Поделиться Опубликовано 15 февраля, 2018 В общем стоит задача: 1. страница ?page=1 должна редиректить 301-м на категорию 2. если в категории например 10 страниц пагинации, а в урле 10-й страницы добавить +1 (перейти на ?page=11), страница открывается пустая. Нужно, чтобы такие (в т.ч. и последующие) страницы редиректили 301-м редиректом на последнюю страницу пагинации с товарами. Кто-то сталкивался с подобной задачей? Есть решение? Хэлп) Цитата Ссылка на сообщение Поделиться на другие сайты
Karabaska Опубликовано 16 февраля, 2018 Жалоба Поделиться Опубликовано 16 февраля, 2018 Пробуйте в 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))); Цитата Ссылка на сообщение Поделиться на другие сайты
kazak Опубликовано 16 февраля, 2018 Автор Жалоба Поделиться Опубликовано 16 февраля, 2018 Пробуйте в 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-й редирект. Цитата Ссылка на сообщение Поделиться на другие сайты
kazak Опубликовано 16 февраля, 2018 Автор Жалоба Поделиться Опубликовано 16 февраля, 2018 Немного переиначил первый код, получилось так: // Текущая страница в постраничном выводе $current_page = $this->request->get('page', 'integer'); if($current_page==1) header('Location: '.$this->request->url(array('page'=>null)), true, 301 ); Вроде работает правильно, если есть ошибки, знающие поправьте. По второму пункту вопросы открыт. Хэээлп!!!) Цитата Ссылка на сообщение Поделиться на другие сайты
Решение yr4ik Опубликовано 16 февраля, 2018 Решение Жалоба Поделиться Опубликовано 16 февраля, 2018 (изменено) Пробуйте в 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; } Изменено 17 февраля, 2018 пользователем yr4ik Цитата Ссылка на сообщение Поделиться на другие сайты
kazak Опубликовано 16 февраля, 2018 Автор Жалоба Поделиться Опубликовано 16 февраля, 2018 А не получим вечный цикл если откроем пустую категорию? Попробуйте так: 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 работает. А вот второй почему-то нет( Что может быть? Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 16 февраля, 2018 Жалоба Поделиться Опубликовано 16 февраля, 2018 поправил предыдущее сообщение. Условия не так сделал.Обратите внимание на $pages_num (оно должно стать выше кода) Цитата Ссылка на сообщение Поделиться на другие сайты
Karabaska Опубликовано 17 февраля, 2018 Жалоба Поделиться Опубликовано 17 февраля, 2018 Так должно быть лучше 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); И вечного цикла не должно быть. Цитата Ссылка на сообщение Поделиться на другие сайты
kazak Опубликовано 17 февраля, 2018 Автор Жалоба Поделиться Опубликовано 17 февраля, 2018 поправил предыдущее сообщение. Условия не так сделал.Обратите внимание на $pages_num (оно должно стать выше кода)теперь наоборот- первый не работает, второй работает Цитата Ссылка на сообщение Поделиться на другие сайты
yr4ik Опубликовано 17 февраля, 2018 Жалоба Поделиться Опубликовано 17 февраля, 2018 теперь наоборот- первый не работает, второй работает Поправил еще раз. Случайно затер строку $request_page = $this->request->get('page'); Цитата Ссылка на сообщение Поделиться на другие сайты
kazak Опубликовано 17 февраля, 2018 Автор Жалоба Поделиться Опубликовано 17 февраля, 2018 Поправил еще раз. Случайно затер строку $request_page = $this->request->get('page'); Супер, все работает. Спасибо! Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.