По нажатию на кнопку купить - переход по ссылке "SEO URL"

Тема в разделе "Общие вопросы", создана пользователем Tokes, 14 сен 2017.

  1. Tokes

    Tokes Новичок

    Сообщения:
    5
    Симпатии:
    0
    Доброго всем времени!
    Только сегодня познакомился с движком. Очень понравилась стандартная тема, даже менять не буду.
    Поставил Version 3.0.2.0 (rs.2). Есть некоторые маленькие косметические вопросы, но это не самое главное.

    Самое главное, что нужно - это чтобы по нажатию кнопки "Купить" (кстати, кнопку надо будет переименовать) - товар не отправлялся бы в корзину, а пользователь уходил бы по ссылке, которая указана в поле SEO URL товара. Как такое можно реализовать?

    Если надо - сайт покажу.

    На данный момент спасибо интернету убрал личный кабинет, кнопку "избранное" и информационные ссылки в футере (powered оставил, конечно же).
    Думаю, к этому делу причастны следующие файлы:
    category.twig
    compare.twig
    featured.twig
    footer.twig
    header.twig
    product.twig
     
  2. Ravilr

    Ravilr Специалист

    Сообщения:
    3.879
    Симпатии:
    1.064
    т.е на страницу товара?
     
  3. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    переимtновать кнопку и
    оформить ссылку как кнопку href =ссылка на товар
     
  4. Tokes

    Tokes Новичок

    Сообщения:
    5
    Симпатии:
    0
    Ravilr, уточню. Есть site.com и в "переменных" товара есть поле "SEO URL", которое имееет значение, например, "another.de". И если мы нажмём на товар, то ссылка формируется как site.com/another.de. Мне бы хотелось, чтобы по нажатию кнопки "купить" посетитель уходил строго по адресу, указанному в SEO URL этого товара.
    В качестве поля SEO URL можно указать полный адрес с http и тогда ссылки принимает вид "site.com/http://another.de".
    Вот этот "site.com/" надо исключить из ссылки.
    Chukcha, насколько я понял, мне нужно имя переменной для просматриваемого товара, или, если мышка над этим товаром - чтобы именно она была полным адресом перехода без названия сайта, на котором этот товар находится.

    ИЛИ. Можно сделать и с корзиной, но чтобы при нажатии кнопки "Оформление заказа" открывались новые окна в браузере по url, указанным в SEO URL. Я не знаю, какая реализация проще. Просто мой сайт ничего продавать не будет, а только перенаправлять.
     
    Последнее редактирование: 14 сен 2017
  5. Ravilr

    Ravilr Специалист

    Сообщения:
    3.879
    Симпатии:
    1.064
    Во первых, вы выбрали не подходящее поле для ваших задумок. Рекомендую изучить опенкарт получше.
    Например выберите поле Расположение и туда вставляйте ссылку начиная с http

    в catalog\controller\checkout\cart.php
    найдем
    Код:
    if (!$json) {
    и перед ней вставим
    PHP:
    $json['error'] = true
    и найдет строку которая начинается с
    Код:
    $json['redirect'] = 
    и заменим на
    PHP:
    $json['redirect'] = $product_info['location'];
    В итоге получим редирект по адресу с любой страницы где нажали купить.
     
    Последнее редактирование: 4 окт 2017
    Ален, Tokes и karpov нравится это.
  6. Chukcha

    Chukcha Специалист

    Сообщения:
    3.013
    Симпатии:
    685
    Это если на другом сайте, то тогда - да..

    А если на своем? ведь ссылку надо сформировать
     
  7. Tokes

    Tokes Новичок

    Сообщения:
    5
    Симпатии:
    0
    Только сегодня добрался проверить решение. Сделал всё, как написали, почистил кеш путём удаления папки /storage/cache/. По нажатию "купить" - товар добавляется в корзину, как и было. Возможно, ещё что-то надо было сделать?

    upd. Извините. Я лох. Там где ['error'] = true; нужно перед проверкой ставить - я поставил после проверки. Только пока понял, что логичнее было бы, если бы эта строка вставлялась бы перед if (!$json) - всё заработало. Потом перечитал - смотрю, а так и написано. Я невнимателен очень часто, поэтому ещё раз извините. Всё работает, как я хотел, осталось пара маленьких деталей - хочу, чтобы в новой вкладке открывался товар. Это здесь - $json['redirect'] = $product_info['location']; что-то вроде target = "_blank " прописать надо? Уже по-всякому перепробовал, но не получается (
    Второй момент - из описания товара нет редиректа. Как добавить там? Может, product.twig надо править каким-то образом?
     
    Последнее редактирование: 3 окт 2017
  8. Ravilr

    Ravilr Специалист

    Сообщения:
    3.879
    Симпатии:
    1.064
    \catalog\view\javascript\common.js
    Код:
    location = json['redirect'];
    заменить на
    Код:
    window.open(json['redirect']);
    Это вам задача для самообучения. Я уже достаточно информации предоставил...
    Посмотрите на common.js как там добавляется товар add: и как в product.twig
    Делее добавьте то чего не хватает.
     
    Tokes нравится это.
  9. Tokes

    Tokes Новичок

    Сообщения:
    5
    Симпатии:
    0
    Попробовал я способ window.open - окно блокируется с надписью "popup blocked"
    Почитал я про метод window.open и почему "popup blocked" происходит. Странно - вызов инициируется пользователем при нажатии на кнопку, а браузер говорит "не верю".

    За файлы спасибо, как раз хотел спросить, что за файлы отвечают в описании товара чтобы работал редирект.

    Всё-таки надо как-то решить вопрос с блокировкой окна или дописывать к ссылкам атрибут target="_blank". Конкретной реализации ни того ни другого я не знаю, совсем отдалённо только если.
    Наверное, проще сделать, чтобы в ссылку после поля location вставлялось target="_blank" и только после этого закрывающая скобка >, чтобы было типа <a href ="location" target="_blank">text</a>
    Без помощи я не сделаю сам :(
     
    Последнее редактирование: 4 окт 2017
  10. Tokes

    Tokes Новичок

    Сообщения:
    5
    Симпатии:
    0
    В product.twig добавил
    PHP:
    if (json['redirect']) {
         
    location json['redirect'];
    }
    Теперь работает и со страницы товара редирект, за что уже огромное спасибо!
    Переименовал слово "купить" в "заказать", все значки корзины поменял на слово "заказать", убрал везде кнопку "в избранное". Остался единственный вопрос с открытием в новом окне.
     
    Последнее редактирование: 4 окт 2017
  11. Ален

    Ален Эксперт

    Сообщения:
    2.056
    Симпатии:
    640
    Можно сделать не через js, а заменой ссылок в шаблоне на ссылку из location тогда все будет норм. Просто ставите таргет и все. Для этого нужно внести изменения в контроллеры category.php и product.php
    Изначально @Ravilr лишнего написал... т.е как раз про контроллер category.php вот отсюда и вам нужно плясать.
    Только по такой схеме придется везде делать изменения.. имеется ввиду и в модулях рекомендуемых итд.
     
  12. gooldbee

    gooldbee Новичок

    Сообщения:
    6
    Симпатии:
    0
    Помогите добавить в карточке товара, не получается ..
     
  13. gooldbee

    gooldbee Новичок

    Сообщения:
    6
    Симпатии:
    0
    Кто столкнется, добавил после
    success: function(json) {
    $('.alert, .text-danger').remove();
    $('.form-group').removeClass('has-error');
    это
    if (json['redirect']) {
    location = json['redirect'];
    }
     
  14. buslikdrev

    buslikdrev Пользователь

    Сообщения:
    38
    Симпатии:
    1
  15. protempo

    protempo Новичок

    Сообщения:
    5
    Симпатии:
    0
    Добрый день. Помогите модифицировать код. Исходные данные - OpenCart 3.0. Решил реализовать задачу, в которой нужно определить, если поле 'location' не пустое, то переходим по указанной в поле реферальной ссылке, иначе (если поле пустое), переходим по стандартной ссылке на страницу товара для оформления покупки.

    В файле catalog\controller\checkout\cart.php

    if ($product_info['location'] == 0) {
    $json['redirect'] = $product_info['location'];
    } else {
    $json['redirect'] = str_replace('&amp;', '&', $this->url->link('product/product', 'product_id=' . $this->request->post['product_id']));
    }

    Редирект по реферальной ссылке работает, а у тех товаров, где поле 'location' пустое, кнопка не срабатывает.

    Соответственно, в product.twig добавил выше указанный код

    if (json['redirect']) {
    location = json['redirect'];
    }

    И соответственно, редирект работает отлично, но у товаров, у которых поле 'location' пустое - кнопка ни как не реагирует.

    P.S. Прошу заранее извинить если есть ошибки или не правильно оформлен пост. Пишу на форуме впервые.
     
  16. Ravilr

    Ravilr Специалист

    Сообщения:
    3.879
    Симпатии:
    1.064
    Вот так
    PHP:
    if (!$product_info['location']) {
     
    protempo нравится это.
  17. protempo

    protempo Новичок

    Сообщения:
    5
    Симпатии:
    0
    Безмерно благодарю. Задача решена.

    P.S. Я рано обрадовался. По умолчанию, при нажатии на кнопку купить в каталоге товаров и на странице товара происходило добавление товара в корзину. После внесения всех, вышеуказанных изменений (при пустом поле location) при нажатии на кнопку купить (и на странице каталога товаров, и на странице товара) происходит переход на страницу товара, но не добавление товара в корзину.
    В общем, ещё раз благодарю за помощь и буду стараться решить эту задачу.
    P.P.S. На сколько я понимаю. Причина такого поведения кроется в этом коде :
    - $json['error'] = true;
    Буду искать решение.
     
    Последнее редактирование: 1 дек 2020
  18. fanatic

    fanatic Продвинутый пользователь

    Сообщения:
    1.415
    Симпатии:
    239
    у вас всегда будет выполнятся это условие. потому как
    $fson['redirect'] , в любом случае true
     
  19. Ravilr

    Ravilr Специалист

    Сообщения:
    3.879
    Симпатии:
    1.064
    Так это и указано в условии, разве нет? Чтобы небыло перехода нужно оставить одно условие, на наличие значения в поле location, а не редирект на страницу товара если поле пустое.
     
  20. protempo

    protempo Новичок

    Сообщения:
    5
    Симпатии:
    0
    Всем добрый вечер и благодарю за участие. На данный момент решение нашёл. Оно не совсем элегантное (так как я не профессиональный программист), но всё же решает вставший передо мной вопрос. Итак :
    В файле catalog\controller\checkout\cart.php

    1. $json['error'] = true;

    2.
    if (!$product_info['location']){
    $this->cart->add($this->request->post['product_id'], $quantity, $option, $recurring_id);
    $json['success'] = sprintf($this->language->get('text_success'), $this->url->link('product/product', 'product_id=' . $this->request->post['product_id']), $product_info['name'], $this->url->link('checkout/cart'));
    $json['redirect'] = str_replace('&amp;', '&', $this->url->link('product/product', 'product_id=' . $this->request->post['product_id']));
    } else {
    $json['redirect'] = $product_info['location'];
    }

    В файле \catalog\view\theme\default\template\product\product.twig

    if (json['redirect']) {
    location = json['redirect'];
    }

    Действие :
    При нажатии на кнопку "Купить", в случае отсутствия реферальной ссылки в поле 'location', товар добавляется в корзину. А в случае наличия реферальной ссылки происходит 'redirect'

    Пока в работе сайта особых ошибок не увидел. Буду тестировать более тщательно. Если у кого-то найдётся более правильное решение, буду благодарен за дополнительную информацию.