Автор Тема: Как перейти на страницу категорий со страницы продукта с учетом номера  (Прочитано 308 раз)

08 Сентября 2015, 15:09:30
  • Старожил
  • ****
  • Сообщений: 258
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Нежна помощь по 1.6.
Как перейти на страницу категорий со страницы продукта?
Есть вариант
href="{$link->getcategorylink($category)}"Но переход происходит в начало страницы категории и без учета номера.
На странице категорий товар выводиться по 12 номера страниц  1,2,3,4,5
Если переходим  с номера 2 страници категорий то адрес этой страници
http://localhost/shop1/index.php?id_category=3&controller=category#/page-2 По варианту 
href="{$link->getcategorylink($category)}"Адрес возврата
http://localhost/shop1/index.php?id_category=3&controller=categoryКак получить полный адрес с окончанием 
controller=category#/page-2Благодарю!
08 Сентября 2015, 15:38:16
Ответ #1
  • Ветеран
  • *****
  • Сообщений: 2169
  • Репутация: +49/-4
  • Сообщество PrestaShop
    • Просмотр профиля
Номера страниц не сохраняются при переходе. Параметры из url нужно получить и сохранить в контроллере ProductController.php
// Load category
$id_category = false;
if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] == Tools::secureReferrer($_SERVER['HTTP_REFERER']) // Assure us the previous page was one of the shop
&& preg_match('~^.*(?<!\/content)\/([0-9]+)\-(.*[^\.])|(.*)id_(category|product)=([0-9]+)(.*)$~', $_SERVER['HTTP_REFERER'], $regs))
{
здесь получаешь номер страницы. Определяешь переменную ссылки в
public function initContent()
{
...$this->context->smarty->assign(array(
используешь эту переменную в шаблоне /themes/default-bootstrap/product.tpl
08 Сентября 2015, 15:45:32
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 13147
  • Репутация: +14553/-0
  • Сообщество PrestaShop
    • Просмотр профиля
В контроллере товара для url возрата определена переменная
{$return_link}нужно только передать номер страницы.
08 Сентября 2015, 15:51:03
Ответ #3
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 85953
  • Репутация: +25399/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если нужно просто добавить кнопку возврата, то использовать лучше такой код
<a href="javascript:history.back()">Назад</a>
08 Сентября 2015, 15:58:12
Ответ #4
  • Ветеран
  • *****
  • Сообщений: 13147
  • Репутация: +14553/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если нужно просто добавить кнопку возврата, то использовать лучше такой код
<a href="javascript:history.back()">Назад</a>
Это тоже самое, что и
{$return_link}Иницилизация переменной в /controllers/front/ProductController.php
$return_link = 'javascript: history.back();';
08 Сентября 2015, 16:02:03
Ответ #5
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 85953
  • Репутация: +25399/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если нужно просто добавить кнопку возврата, то использовать лучше такой код
<a href="javascript:history.back()">Назад</a>
Это тоже самое, что и
{$return_link}Иницилизация переменной в /controllers/front/ProductController.php
$return_link = 'javascript: history.back();';
Не совсем так, вы привели лишь часть кода. При наличии ид категории в этой переменной будет адрес самой верхней категории без параметров
if (isset($this->category->id) && $this->category->id)
$return_link = Tools::safeOutput($this->context->link->getCategoryLink($this->category));
else
$return_link = 'javascript: history.back();';
Попробуйте добавить эти 2 ссылки в шаблон и увидите разницу, когда вы переходите с подкатегории.
08 Сентября 2015, 16:07:50
Ответ #6
  • Ветеран
  • *****
  • Сообщений: 2169
  • Репутация: +49/-4
  • Сообщество PrestaShop
    • Просмотр профиля
Лучше сразу в контроллере определять обратную ссылку со страницами по полученному занчению p.
$return_link  = $link->goPage($link->getPaginationLink('category', $category), $p)
08 Сентября 2015, 16:20:34
Ответ #7
  • Ветеран
  • *****
  • Сообщений: 763
  • Репутация: +6/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если нужно просто добавить кнопку возврата, то использовать лучше такой код
<a href="javascript:history.back()">Назад</a>
Чем проще, тем лучше.
Самый лучший вариант для возврата. Точнее лучший это кнопка возврата в самом браузере, но и этот неплох.
08 Сентября 2015, 16:42:33
Ответ #8
  • Старожил
  • ****
  • Сообщений: 258
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
Самый простой это
<a href="javascript:history.back()">Назад</a>Для кнопки возврата.
Но это втом случае если на странице товара нет кнопок просмотра "Следующего" "Предыдущего" товара.
Иначе возврат к предыдущей позиции на страницу товара.
И примеры приведенные выше то-же по такому принципу.
08 Сентября 2015, 16:49:46
Ответ #9
  • Старожил
  • ****
  • Сообщений: 258
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Пример
$return_link  = $link->goPage($link->getPaginationLink('category', $category), $p)Вообще не идет, так как он не возвращает на страницу категории конкретно а возвращает продукт
http://localhost/shop1/index.php?id_category=12&controller=category&id_product=34
08 Сентября 2015, 16:53:57
Ответ #10
  • Ветеран
  • *****
  • Сообщений: 1195
  • Репутация: +28/-1
  • Сообщество PrestaShop
    • Просмотр профиля
Если у вас навигация по товарам, то смысла нет в возврате на страницу категории.
Возврат будет на предыдущий товар. И на первую страницу категории.
Как вы собираетсь определять номер страницы, если клиент пролистает товаров 10?
08 Сентября 2015, 17:03:57
Ответ #11
  • Ветеран
  • *****
  • Сообщений: 2169
  • Репутация: +49/-4
  • Сообщество PrestaShop
    • Просмотр профиля
Но это втом случае если на странице товара нет кнопок просмотра "Следующего" "Предыдущего" товара.
Иначе возврат к предыдущей позиции на страницу товара.
И примеры приведенные выше то-же по такому принципу.
Так сразу нужно писать об этом.

Пример $return_link  = $link->goPage($link->getPaginationLink('category', $category), $p)
Вообще не идет, так как он не возвращает на страницу категории конкретно а возвращает продукт
http://localhost/shop1/index.php?id_category=12&controller=category&id_product=34
URL не правильный. страницы нет, лишняя переменная, поэтому и возврат на товар.
08 Сентября 2015, 17:10:38
Ответ #12
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 32991
  • Репутация: +26759/-0
    • Просмотр профиля
Цитировать
Самый простой это
<a href="javascript:history.back()">Назад</a>
Для кнопки возврата.
Но это втом случае если на странице товара нет кнопок просмотра "Следующего" "Предыдущего" товара.
Иначе возврат к предыдущей позиции на страницу товара.
И примеры приведенные выше то-же по такому принципу.
Если вам нужно сохранить значение и передавать его между страницами используйте форму с hidden полями.
08 Сентября 2015, 17:17:58
Ответ #13
  • Старожил
  • ****
  • Сообщений: 258
  • Репутация: +1/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Дак я и писал что надо , а про кнопки по ходу написал.
Всем спасибо!!!
Мне достаточно кнопки которую я уже поставил
<a title="{$next_product.name}" class="btn btn-default" font style="background: Burlywood;" href="javascript:history.back()">{l s='Возврат'}</a> Этого достаточно.
Всем спасибо, всех благодарю. Тема закрыта.
Вообще я программист по 1С уже 25 лет. А на престе разработал сайт, кое какие дороботки.
Спасибо еще раз ВСЕМ!
08 Сентября 2015, 17:30:27
Ответ #14
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 85953
  • Репутация: +25399/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Если вы программист, то объяснять, что решение задачи зависит от поставленных условий, вам не нужно. Вы написали что нужна кнопка возврата, вам дали примеры.
Хотите добавить новые условия, нет проблем. Методы объекта History позволяют учитывать многие факторы.
Основные методы объекта History:
/* Количество записей в текущей сессии истории */
window.history.length:
/* Возвращает текущий объект истории */
window.history.state:
/* Метод, позволяющий гулять по истории. В качестве аргумента передается смещение, относительно текущей позиции.
Если передан 0, то будет обновлена текущая страница. Если индекс выходит за пределы истории, то ничего не произойдет. /*
window.history.go(n):
/* Метод, идентичный вызову go(-1) */
window.history.back():
/* Метод, идентичный вызову go(1) */
window.history.forward():
/* Добавляет элемент истории. */
window.history.pushState(data, title [, url]):
/* Обновляет текущий элемент истории */
window.history.replaceState(data, title [, url]):
Хотите учитывать количество переходов, используйте счетчик переходов и смещение
window.history.go(n):
Или как советывал coder
<input type="hidden" />