Доброго всем времени! Только сегодня познакомился с движком. Очень понравилась стандартная тема, даже менять не буду. Поставил Version 3.0.2.0 (rs.2). Есть некоторые маленькие косметические вопросы, но это не самое главное. Самое главное, что нужно - это чтобы по нажатию кнопки "Купить" (кстати, кнопку надо будет переименовать) - товар не отправлялся бы в корзину, а пользователь уходил бы по ссылке, которая указана в поле SEO URL товара. Как такое можно реализовать? Если надо - сайт покажу. На данный момент спасибо интернету убрал личный кабинет, кнопку "избранное" и информационные ссылки в футере (powered оставил, конечно же). Думаю, к этому делу причастны следующие файлы: category.twig compare.twig featured.twig footer.twig header.twig product.twig
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. Я не знаю, какая реализация проще. Просто мой сайт ничего продавать не будет, а только перенаправлять.
Во первых, вы выбрали не подходящее поле для ваших задумок. Рекомендую изучить опенкарт получше. Например выберите поле Расположение и туда вставляйте ссылку начиная с http в catalog\controller\checkout\cart.php найдем Код: if (!$json) { и перед ней вставим PHP: $json['error'] = true; и найдет строку которая начинается с Код: $json['redirect'] = и заменим на PHP: $json['redirect'] = $product_info['location']; В итоге получим редирект по адресу с любой страницы где нажали купить.
Только сегодня добрался проверить решение. Сделал всё, как написали, почистил кеш путём удаления папки /storage/cache/. По нажатию "купить" - товар добавляется в корзину, как и было. Возможно, ещё что-то надо было сделать? upd. Извините. Я лох. Там где ['error'] = true; нужно перед проверкой ставить - я поставил после проверки. Только пока понял, что логичнее было бы, если бы эта строка вставлялась бы перед if (!$json) - всё заработало. Потом перечитал - смотрю, а так и написано. Я невнимателен очень часто, поэтому ещё раз извините. Всё работает, как я хотел, осталось пара маленьких деталей - хочу, чтобы в новой вкладке открывался товар. Это здесь - $json['redirect'] = $product_info['location']; что-то вроде target = "_blank " прописать надо? Уже по-всякому перепробовал, но не получается ( Второй момент - из описания товара нет редиректа. Как добавить там? Может, product.twig надо править каким-то образом?
\catalog\view\javascript\common.js Код: location = json['redirect']; заменить на Код: window.open(json['redirect']); Это вам задача для самообучения. Я уже достаточно информации предоставил... Посмотрите на common.js как там добавляется товар add: и как в product.twig Делее добавьте то чего не хватает.
Попробовал я способ window.open - окно блокируется с надписью "popup blocked" Почитал я про метод window.open и почему "popup blocked" происходит. Странно - вызов инициируется пользователем при нажатии на кнопку, а браузер говорит "не верю". За файлы спасибо, как раз хотел спросить, что за файлы отвечают в описании товара чтобы работал редирект. Всё-таки надо как-то решить вопрос с блокировкой окна или дописывать к ссылкам атрибут target="_blank". Конкретной реализации ни того ни другого я не знаю, совсем отдалённо только если. Наверное, проще сделать, чтобы в ссылку после поля location вставлялось target="_blank" и только после этого закрывающая скобка >, чтобы было типа <a href ="location" target="_blank">text</a> Без помощи я не сделаю сам
В product.twig добавил PHP: if (json['redirect']) { location = json['redirect'];} Теперь работает и со страницы товара редирект, за что уже огромное спасибо! Переименовал слово "купить" в "заказать", все значки корзины поменял на слово "заказать", убрал везде кнопку "в избранное". Остался единственный вопрос с открытием в новом окне.
Можно сделать не через js, а заменой ссылок в шаблоне на ссылку из location тогда все будет норм. Просто ставите таргет и все. Для этого нужно внести изменения в контроллеры category.php и product.php Изначально @Ravilr лишнего написал... т.е как раз про контроллер category.php вот отсюда и вам нужно плясать. Только по такой схеме придется везде делать изменения.. имеется ввиду и в модулях рекомендуемых итд.
Кто столкнется, добавил после success: function(json) { $('.alert, .text-danger').remove(); $('.form-group').removeClass('has-error'); это if (json['redirect']) { location = json['redirect']; }
Вот https://shop.opencart-russia.ru/knopka-kupit-u-partnyorov-buy-button-from-partner и не нужно париться.
Добрый день. Помогите модифицировать код. Исходные данные - OpenCart 3.0. Решил реализовать задачу, в которой нужно определить, если поле 'location' не пустое, то переходим по указанной в поле реферальной ссылке, иначе (если поле пустое), переходим по стандартной ссылке на страницу товара для оформления покупки. В файле catalog\controller\checkout\cart.php if ($product_info['location'] == 0) { $json['redirect'] = $product_info['location']; } else { $json['redirect'] = str_replace('&', '&', $this->url->link('product/product', 'product_id=' . $this->request->post['product_id'])); } Редирект по реферальной ссылке работает, а у тех товаров, где поле 'location' пустое, кнопка не срабатывает. Соответственно, в product.twig добавил выше указанный код if (json['redirect']) { location = json['redirect']; } И соответственно, редирект работает отлично, но у товаров, у которых поле 'location' пустое - кнопка ни как не реагирует. P.S. Прошу заранее извинить если есть ошибки или не правильно оформлен пост. Пишу на форуме впервые.
Безмерно благодарю. Задача решена. P.S. Я рано обрадовался. По умолчанию, при нажатии на кнопку купить в каталоге товаров и на странице товара происходило добавление товара в корзину. После внесения всех, вышеуказанных изменений (при пустом поле location) при нажатии на кнопку купить (и на странице каталога товаров, и на странице товара) происходит переход на страницу товара, но не добавление товара в корзину. В общем, ещё раз благодарю за помощь и буду стараться решить эту задачу. P.P.S. На сколько я понимаю. Причина такого поведения кроется в этом коде : - $json['error'] = true; Буду искать решение.
Так это и указано в условии, разве нет? Чтобы небыло перехода нужно оставить одно условие, на наличие значения в поле location, а не редирект на страницу товара если поле пустое.
Всем добрый вечер и благодарю за участие. На данный момент решение нашёл. Оно не совсем элегантное (так как я не профессиональный программист), но всё же решает вставший передо мной вопрос. Итак : В файле 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('&', '&', $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' Пока в работе сайта особых ошибок не увидел. Буду тестировать более тщательно. Если у кого-то найдётся более правильное решение, буду благодарен за дополнительную информацию.