Search the Community
Showing results for tags 'oc3'.
-
Всем привет! Ищу модуль - "этот товар сейчас просматривают..." (как на скрине) Видел пару тем, ни одна толком не закончена, все уходят в рассуждения зачем, почему итд. Давайте эту часть опустим и если кто знает готовый модуль для oc3 или как сделать (не думаю, что сложно) - подскажите, пожалуйста. Суть его: в карточке товара он показывает рандомное число пользователей внутри заданного (1-30, например) , которые просматривают товар.
-
Version 1.0.0
Особенности: простота установки; создание неограниченного количества блоков; простота использования без каких-либо знаний в области программирования; мультиязычность (English, Русский, Українська) Преимущества: переопределение заголовка модуля; управлением изображением, заголовком и кратким описанием для блоков; Изменение количества столбцов (Bootstrap3); управление размером и выравниванием изображения;$10-
- преимущества магазина
- иконки
- (and 4 more)
-
Всем привет подскажите как убрать вспылвающее увидомление одобавление товар в ocstore 3?вот фото прочел несколько статей пока не понял что делать вот скрип в common.js и в product.twig <script> $('body').on('click', '#button-cart', function(){ $.ajax({ url: 'index.php?route=checkout/cart/add', type: 'post', data: $('#product input[type=\'text\'], #product input[type=\'hidden\'], #product input[type=\'radio\']:checked, #product input[type=\'checkbox\']:checked, #product select, #product textarea'), dataType: 'json', cache: false, beforeSend: function() { $('#button-cart').button('loading'); }, complete: function() { $('#button-cart').button('reset'); }, success: function(json) { $('.alert-dismissible, .text-danger').remove(); $('.form-group').removeClass('has-error'); if (json['error']) { if (json['error']['option']) { let errorOption = ''; for (i in json['error']['option']) { var element = $('#input-option' + i.replace('_', '-')); if (element.parent().hasClass('input-group')) { element.parent().after('<div class="text-danger">' + json['error']['option'][i] + '</div>'); } else { element.after('<div class="text-danger">' + json['error']['option'][i] + '</div>'); } errorOption += '<div class="alert-text-item">' + json['error']['option'][i] + '</div>'; } rmNotify('danger', errorOption); } if (json['error']['error_warning']) { rmNotify('danger', json['error']['error_warning']); } if (json['error']['recurring']) { $('select[name=\'recurring_id\']').after('<div class="text-danger">' + json['error']['recurring'] + '</div>'); } // Highlight any found errors $('.text-danger').parent().addClass('has-error'); } if (json['success']) { if (json['isPopup']) { octPopupCart(); } else { rmNotify('success', json['success']); } if (typeof octYandexEcommerce == 'function') { octYandexEcommerce(json); } // Need to set timeout otherwise it wont update the total setTimeout(function() { $('#oct-cart-quantity, .rm-header-cart-quantity, #mobile_cart_index, .oct-fixed-bar-quantity-cart').html(json['total_products']); $('.rm-header-cart-text').html(json['total_amount']); }, 100); } }, error: function(xhr, ajaxOptions, thrownError) { alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); } }); }); </script> это то что в product.twig // Cart add remove functions var cart = { 'add': function(product_id, quantity) { $.ajax({ url: 'index.php?route=checkout/cart/add', type: 'post', data: 'product_id=' + product_id + '&quantity=' + (typeof(quantity) != 'undefined' ? quantity : 1), dataType: 'json', cache: false, beforeSend: function() { $('#cart > button').button('loading'); }, complete: function() { $('#cart > button').button('reset'); }, success: function(json) { $('.alert-dismissible, .text-danger').remove(); if (json['redirect']) { location = json['redirect']; } if (json['error'] && json['error']['error_warning']) { rmNotify('danger', '<div class="alert-text-item">' + json['error']['error_warning'] + '</div>'); } if (json['success']) { if (json['isPopup']) { octPopupCart(); } else { rmNotify('success', json['success']); } if (typeof octYandexEcommerce == 'function') { octYandexEcommerce(json); } // Need to set timeout otherwise it wont update the total setTimeout(function() { $('#oct-cart-quantity, .rm-header-cart-quantity, #mobile_cart_index, .oct-fixed-bar-quantity-cart').html(json['total_products']); $('.rm-header-cart-text').html(json['total_amount']); }, 100); } }, error: function(xhr, ajaxOptions, thrownError) { alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); } }); }, 'update': function(key, quantity) { $.ajax({ url: 'index.php?route=checkout/cart/edit', type: 'post', data: 'key=' + key + '&quantity=' + (typeof(quantity) != 'undefined' ? quantity : 1), dataType: 'json', cache: false, beforeSend: function() { $('#cart > button').button('loading'); }, complete: function() { $('#cart > button').button('reset'); }, success: function(json) { // Need to set timeout otherwise it wont update the total setTimeout(function() { $('#oct-cart-quantity, .rm-header-cart-quantity, #mobile_cart_index, .oct-fixed-bar-quantity-cart').html(json['total_products']); $('.rm-header-cart-text').html(json['total_amount']); }, 100); var now_location = String(document.location.pathname); if ((now_location == '/cart/') || (now_location == '/cart') || (now_location == '/checkout/') || (now_location == '/checkout') || (getURLVar('route') == 'checkout/cart') || (getURLVar('route') == 'checkout/checkout')) { location = 'index.php?route=checkout/cart'; } else { $('#cart > ul').load('index.php?route=common/cart/info ul li'); } }, error: function(xhr, ajaxOptions, thrownError) { alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); } }); }, 'remove': function(key) { $.ajax({ url: 'index.php?route=checkout/cart/remove', type: 'post', data: 'key=' + key, dataType: 'json', cache: false, beforeSend: function() { $('#cart > button').button('loading'); }, complete: function() { $('#cart > button').button('reset'); }, success: function(json) { // Need to set timeout otherwise it wont update the total setTimeout(function() { $('#oct-cart-quantity, .rm-header-cart-quantity, #mobile_cart_index, .oct-fixed-bar-quantity-cart').html(json['total_products']); $('.rm-header-cart-text').html(json['total_amount']); }, 100); var now_location = String(document.location.pathname); if ((now_location == '/cart/') || (now_location == '/cart') || (now_location == '/checkout/') || (now_location == '/checkout') || (getURLVar('route') == 'checkout/cart') || (getURLVar('route') == 'checkout/checkout')) { location = 'index.php?route=checkout/cart'; } else { $('#cart > ul').load('index.php?route=common/cart/info ul li'); } }, error: function(xhr, ajaxOptions, thrownError) { alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText); } }); } } это в common.js Всем заранее спс!
-
Добрый день! Странная ситуация стала время от времени возникать с некоторыми товарами со скидкой: при оформлении заказа в корзине устанавливается не цена с примененной скидкой, а старая цена. Но, что важно, такая ситуация не со всеми товарами со скидкой, а с 1-2 карточками. Кто-нибудь сталкивался с подобным? Если да, то как решили?
-
Доброго времени суток! Не смог найти (точно неправильно ищу) как вывести картинку в order_list.twig который отвечает за историю заказов. Подскажите пожалуйста, как это реализовать, куда копать... OpenCart 3
- 7 replies
-
- oc3
- order list
-
(and 1 more)
Tagged with:
-
Здравствуйте! делаю свой первый проект, поэтому многое не понимаю и не все могу найти в гугле. На данный момент у меня и после успешного оформления заказа и после успешной отправки фидбэка идет редирект на одну и ту же common/success.twig Подскажите как сделать при успешном оформлении заказа редирект на мой новый success-checkout.twig? Я дошел до контроллера /checkout/success.php и в конце index() if ( ... ) { $this->response->setOutput($this->load->view('common/checkout-success', $data)); } else { $this->response->setOutput($this->load->view('common/success', $data)); } не знаю что вставить в условие
-
Доброе утро! Столкнулся с неведомой до селе проблемой - на сайте стало невозможно оформить заказ. При нажатии на кнопку "купить", "быстрый заказ" и "сообщить когда появится" - всплывает ошибка (скриншот). Кто-нибудь сталкивался с таким? Как можно решить? P.S.: хостинг провайдеру уже написал, но пока без ответа.
- 6 replies
-
- oc3
- 403 forbidden
-
(and 1 more)
Tagged with:
-
Выкладываем на сайте товары , артикул заполняем такой же как у поставщика . Нужно создать модуль или с помощью АОП настроить обновление\загрузку фотографий для товаров по которым найдены совпадения артикула на сайте у поставщика . Постоянно возникает много мелких задач , ищем исполнителя который заинтересован в долгосрочном сотрудничестве . Требования к исполнителю : Опыт настройки модуля АОП Широкий кругозор в опенкарт 3 Рассматриваем разные форматы сотрудничества : Позадачно или по часам .
-
Здравствуйте, возникла необходимость в добавлении поля выбора количества товара в модуле вариантов товара, саму кнопку добавления покупки товара я сделал, но возикла проблема с выбором количества и добавления этого количества в корзину. Не хочет отправлять нужное количество в корзину код модуля с кнопкой <div class="prodvar-button"> <div class="form-group"> <label class="control-label" for="input-quantity">{{ entry_qty }}</label> <div class="input-group number-spinner"> <span class="input-group-btn"> <button class="btn btn-default" data-dir="dwn"><i class="fa fa-minus"></i></button> </span> <input type="text" name="quantity" value="{{ product['minimum'] }}" id="input-quantity" class="form-control text-center" /> <span class="input-group-btn"> <button class="btn btn-default" data-dir="up"><i class="fa fa-plus"></i></button> </span> </div> <input type="hidden" name="product_id" value="{{ product['product_id'] }}" /> <br /> <button type="button" id="button-cart" data-loading-text="{{ text_loading }}" class="btn btn-primary btn-lg btn-block">{{ button_cart }}</button> </div> </div> В кнопку <button type="button" id="button-cart" class="btn btn-primary btn-lg btn-block">{{ button_cart }}</button> добавлял атрибут onclick="cart.add('{{ product['product_id'] }}', $(this).parent().parent().find('.quantity_input').val());" работало только с onclick="cart.add('{{ product['product_id'] }}', {{ product['minimum'] }} но добавлял только 1 товар код для переключалки количества $(document).on('click', '.number-spinner button', function () { var btn = $(this), oldValue = btn.closest('.number-spinner').find('input').val().trim(), newVal = 1; if (btn.attr('data-dir') == 'up') { newVal = parseInt(oldValue) + 1; } else { if (oldValue > 1) { newVal = parseInt(oldValue) - 1; } else { newVal = 1; } } btn.closest('.number-spinner').find('input').val(newVal); }); Как сделать так чтобы было стандартное поле как с правой стороны и оно адекватно работало? в идеале нужно чтоб оно отправляло данные в попап корзину, с блоком справа код ниже работает $(function() { $.ajax({ type: 'get', url: 'index.php?route=extension/module/cart_popup/initcart', dataType: 'json', cache: false, success: function(json) { $.each($("[onclick^='"+json['add_function_selector']+"']"), function() { var product_id = $(this).attr('onclick').match(/[0-9]+/); $(this) .attr('onclick', 'call_cp(\'' + $(this).attr('onclick').match(/[0-9]+/) + '\',\'' + 'add' + '\');') .addClass('cp-call-button'); }); var product_id_in_page = $("input[name='product_id']").val(); $('#'+json['add_id_selector']) .unbind('click') .attr('onclick', 'call_cp(\'' + product_id_in_page + '\',\'' + 'add_option' + '\');'); if (json['cart_products']) { $.each(json['cart_products'], function(i,value) { $('[onclick="call_cp(\'' + value + '\',\'' + 'add' + '\');"]') .html('<i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md">' + json['text_in_cart'] + '</span>') .attr('onclick', 'call_cp(\'' + value + '\',\'' + 'load' + '\');'); $('[onclick="call_cp(\'' + value + '\',\'' + 'add_option' + '\');"]') .html(json['text_in_cart']) .attr('onclick', 'call_cp(\'' + value + '\',\'' + 'load_option' + '\');'); }); } if (json['cart_products_vs_options']) { $.each(json['cart_products_vs_options'], function(i,value) { $('[onclick="call_cp(\'' + value + '\',\'' + 'add' + '\');"]') .html('<i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md">' + json['text_in_cart'] + '</span>'); $('[onclick="call_cp(\'' + value + '\',\'' + 'add_option' + '\');"]') .html(json['text_in_cart_vs_options']); }); } } }); }); function call_cp(product_id, action) { quantity = typeof(quantity) != 'undefined' ? quantity : 1; if (action == "add") { $.ajax({ url: 'index.php?route=checkout/cart/add', type: 'post', data: 'product_id=' + product_id + '&quantity=' + quantity, dataType: 'json', cache: false, success: function(json) { if (json['redirect']) { location = json['redirect']; } if (json['success']) { cpInit(); call_cp(product_id,'load'); $('#cart-total').html(json['total']); } } }); } if (action == "load" || action == "load_option") { $.magnificPopup.open({ tLoading: '<img src="catalog/view/theme/default/stylesheet/cart_popup/loading.svg" alt="" />', items: { src: 'index.php?route=extension/module/cart_popup', type: 'ajax' }, showCloseBtn: false }); $('.mfp-bg').css({ 'background': 'url(image/cart_popup/background/{{ cp_setting['style_beckground'] }})', 'opacity': '{% if cp_setting['background_opacity'] == 0 %}{{ cp_setting['background_opacity'] }}{% else %}{{ cp_setting['background_opacity']/10 }}{% endif %}' }); } if (action == "add_option") { $.ajax({ url: 'index.php?route=checkout/cart/add', type: 'post', data: $('#product input[type=\'text\'], #product input[type=\'hidden\'], #product input[type=\'radio\']:checked, #product input[type=\'checkbox\']:checked, #product select, #product textarea'), dataType: 'json', cache: false, beforeSend: function() { $('#button-cart').button('loading'); }, complete: function() { $('#button-cart').button('reset'); }, success: function(json) { $('.alert, .text-danger').remove(); $('.form-group').removeClass('has-error'); if (json['error']) { if (json['error']['option']) { for (i in json['error']['option']) { var element = $('#input-option' + i.replace('_', '-')); if (element.parent().hasClass('input-group')) { element.parent().after('<div class="text-danger">' + json['error']['option'][i] + '</div>'); } else { element.after('<div class="text-danger">' + json['error']['option'][i] + '</div>'); } } } $('.text-danger').parent().addClass('has-error'); } if (json['success']) { cpInit(); call_cp(product_id, 'load_option'); $('#cart-total').html(json['total']); } } }); } } подскажите пожалуйста что я не так сделал? и как мне это починить? Благодарю
-
Доброго времени суток! Подключаю в head файла header.twig кастомные js-скрипты (предварительно собранные и минифицированные в Gulp, на статичной версии сайта работают), путь верный (в devtools код 200), но по факту-не работают, не могу понять причину. Единственное-в консоли есть ошибка, но с этими же скриптами ее нет в статичной версии сайта
-
Здравствуйте! Ищу модуль, с помощью которого можно создавать всплывающую строку с небольшим текстом и кнопкой. Строка должна быть на всю ширину сайта. Желательно возможность выставлять цвет строки, непрозрачность и цвет текста. Самому написать подобное не хватает навыков.
- 2 replies
-
- opencart 3
- oc3
-
(and 2 more)
Tagged with:
-
Доброго времени суток! На странице "контакты/связаться с нами" в форму нужно добавить поле "ваш телефон". Делаю по аналогии с полем "email", но в контроллере contact. php есть метод getEmail-и я не могу найти файл, где он прописан, чтобы создать по аналогии для телефона. Может кто-то имел опыт добавления телефона в эту форму? Я нашел подобную тему, но там для oc2...
-
Долгосрочное сотрудничество в приоритете. Нужен грамотный программист с свежим взглядом для доработки функционала OC3. Задач много и они разные , в основном маленькие по верстке на фронте . Бывают и более сложные , типа написания модуля для рекомендованных остатков в маркетплейсы. Пишите , более подробное ТЗ кину в личку.
-
Всем добрый день. Имеется сайт, для которого необходимо выставить часовой пояс "America/Denver". В php.ini прописал, в startup.php if (!ini_get('date.timezone')) { date_default_timezone_set('UTC'); } Заменил на date_default_timezone_set('America/Denver'); По итогу php время корректное, время в БД корректное, но время на сервере остаётся в UTC: Каким образом можно решить данную проблему без установки модулей, создающих дополнительные поля в базе данных (module_timezone и им подобные)?
-
Здравствуйте, есть ли возможность назначать опции не каждому товару, а всем товарам одной категории? Например, у меня есть категория смартфон, я хочу всем товарам, которые находятся в этой категории сделать одинаковые опции с одинаковыми значениями. В ручную каждому добавлять одно и то же долго. Может есть вариант с каким-нибудь модулем. Спасибо.
- 2 replies
-
- opencart 3
- oc3
-
(and 1 more)
Tagged with:
-
Всем привет, ребят как можно найти кусок кода если в файлах его нет, а гугл показует что он есть? Суть в чем я нашел так он должен выглядить в оргинале -> у меня почему то класс и home не отображаються вместо этого стоит другой класс! вот так он у меня! и как найти и исправить классы хз! Все файлы прошарил не где нет такого! Может как то подругому можно его вывести ? Вот ссылка на сайт!
-
Создаем магазин https://aroma-doterra.ru/ работает на OpenCart 3х + Unishop2 + SimplePars. Модуль парсинга работает с сайта doterra.com Нужно: 1. Настроить в OpenCart вариативность товаров, так как это принято в других CMS, но не принято в OpenCart. Все варианты в одной карточке (разные склады, объемы) 2. Коррективы текущих настроек парсинга + инструкции по его обслуживанию. 3. Простые визуальные коррективы + цветовая гамма и шрифты Подробно задание изложил здесь https://docs.google.com/document/d/1_9s1NDvjwCmt0sJCgosLUfAw_g5QTkv84Wps8jML1WE/edit#heading=h.kso68vj4czmo В Вашем отклике укажите: опыт решения подобных задач на OpenCart. Цена выполнения работы зависит от подхода выполнения задач и опыта исполнителя. Открыт к Вашим предложениям!
-
- simplepars
- настройка
-
(and 2 more)
Tagged with:
-
9 Скачать / Купить дополнение Last-Modified, If-Modified-Since, 304 not modified. Для Opencart 3. Ускорение индексации поисковыми системами, экономия Трафика, снижение нагрузки на сервер, Поддержка: OpenCart 3.x.x.x Возможности: Выводит дату последней модификации для страниц категорий, товаров и статьей и для главной страницы. Можно менять вручную дату последней модификации категорий Можно менять вручную дату последней модификации статей Можно менять вручную дату последней модификации главной страницы Установить: Модули/Расширения -> Установка расширений. Выбрать архив с модулем и Загрузить. Модули/Расширения -> выбрать установленный модуль (Last Modified ...) -> Активировать Зайти в активированный модуль и установить время для главной страницы Модули/Расширения -> Модификаторы. Нажать кнопку Обновить Обращаем ваше внимание, что заголовок LastModified не отдаётся для WWW-доменов с включенным SSI. Перед покупкой проверьте передает ли ваш сервер параметры $_SERVER['HTTP_IF_MODIFIED_SINCE'] или $_ENV['HTTP_IF_MODIFIED_SINCE'] * Если при установке модуля возникает ошибка "Директория не доступна для записи!" - необходимо поставить бесплатный модуль Localcopy OCMOD для Opencart 3 Зачем нужен Last-Modified HTTP заголовок Last-Modified сообщает клиенту время последнего изменения страницы (объекта). Если клиент (браузер, поисковый робот) получил заголовок Last-Modified, то при следующем обращении к адресу, при условии, что страница (объект) есть в локальном кеше, он добавит вопрос If-Modified-Since(не изменилась ли страница после даты, полученной в Last-Modified). В свою очередь сервер, получив запрос If-Modified-Since должен сверить полученную временную метку с временем последнего изменения страницы и, если страница не изменялась ответить 304 Not Modified. Экономия Трафика Если страница не изменилась, то сервер прекратит передачу данных после отправки заголовков с кодом 304 Not Modified, тело страницы, изображения и другие объекты передаваться не будут. Снижение нагрузки на сервер Правильная реализация проверки времени последнего изменения страницы может значительно (до 30% и более) сократить нагрузку на сервер. Под правильной реализацией подразумевается проверка времени до начала генерации страницы на динамическом сайте. В таком случае все действия для генерации страницы (запрос контента из базы данных, парсинг шаблонов, получение комментариев и др) выполняться не будут. Особенно это актуально для сайтов с высокой посещаемостью и долгой продолжительностью визита пользователя. Пример: пользователь находится на сайте спортивных новостей и постоянно обновляет главную страницу в ожидании публикации результата матча. За несколько минут страница может быть запрошена и получена десятки раз. Если заголовок Last-Modified отдается и запрос If-Modified-Since обрабатывается правильно, то реально страница будет передана один раз, а на все последующие запросы будет выдан ответ 304 Not Modified. Ускорение индексации поисковыми системами Поисковые системы через руководство для вебмастеров рекомендуют отсылать заголовок Last-Modifiedи правильно обрабатывать If-Modified-Since. Добавил Feech Добавлено 19.04.2019 Категория SEO, карта сайта, оптимизация Системные требования Метод активации Без активации Ioncube Loader Нет ocStore 3.0 OpenCart.Pro, ocShop Обращение к серверу разработчика Нет
- 7 replies
-
- seo
- оптимизация
-
(and 5 more)
Tagged with:
-
Добрый день! Подскажите пожалуйста как добавить фото товара в письме клиенту в OC3x Пробовал в catalog\controller\mail order.php добавить в $data['products'][] = array( 'img' => (!empty($product_info['image']) ? HTTPS_SERVER.'image/'.strip_tags(html_entity_decode($product_info['image'], ENT_QUOTES, 'UTF-8')) : ''), в файле order.twig для вывода в <img src="{{ product.img }}" /> В итоге фото не выводится в письме путь <img src="https://ci5.googleusercontent.com/proxy/IfnpJ_SVUWOZHsiWL0n7XLNnxcW9Q9_lPvVKtEcK3Stu6fKtTnnJpTmYhoVWxPAjU7ZM-9xe8vzk9bLJfF1TRkH80jEUdAg7zJ0rnsUvgdHfAw=s0-d-e1-ft#http:// далее наименование файла img
-
У меня существует два типа доставки в магазине - "самовывоз" и "доставка по весу". Если в корзине есть товар из конкретной категории, то нужно добавить фиксированную сумму к стоимости доставки. Есть ли плагин который это может решить? Если нет, то как это реализовать ручками, подскажите пожалуйста? Всем спасибо за участие!!
-
Ребят смотрите как можно сделать модуль подписки на рассылку на всю ширину в footere? щас он такой см фото #1 а мне нужно сделать его таким примерно и еще такой вопрос почему то перевод модуля не подключаеться и в чем может быть проблема? вместо Подписка на рассылку пишет Лидеры продаж и кнопка вместо подписки пишет Применить (Хотя если модуль выводить не в footere то он нормально работает )
-
Всем привет, подскажите как можно вывести модуль подписка на рассылку в footer? Код в контрльере subscribe.php <?php class ControllerExtensionModuleSubscribers extends Controller{ public function index(){ $this->load->language('extension/module/subscribers'); $data['heading_title'] = $this->language->get('heading_title'); return $this->load->view('extension/module/subscribers', $data); } public function newSubscribe(){ $this->load->model('extension/module/subscribers'); $json = array(); $json['message'] = $this->model_extension_module_subscribers->Subscribe($this->request->post); $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); } } Вот код из catalog/view/theme/default/template/extension/module <div class="container-fluid"> <div class="row"> <div class="box-subscribers"> <form action="" method="post" class="form-inline" class="subscribers"> <div class="subscribers"> <div class="col-xs-12 col-md-3"> <h3>{{ heading_title }}</h3> {{ test }} </div> <div class="col-xs-12 col-md-6"> <div class="input-group"> <div class="input-group-addon"><i class="fa fa-envelope-o"></i></div> <input type="email" name="txtemail" id="txtemail" value="" placeholder="" class="form-control input-lg" /> </div> <p><label><input type="checkbox" id="agree"> {{ entry_submit }} </label></p> </div> <div class="col-xs-12 col-md-3"><button type="submit" id="subscribe" class="subscribers btn btn-primary btn-lg" onclick="return Subscribe();" disabled="disabled">{{ button_submit }}</button></div> </div> </form> </div> </div> </div> <style> .subscribers .col-md-12,.subscribers .col-md-3{text-align:start;}.subscribers .input-group{width:100%;display:table}.subscribers p{padding:10px;text-align:start;} </style> <script> function Subscribe() { var emailpattern = /^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}(.[a-zA-Z]{2})?$/; // email pattern for email text field var email = $('#txtemail').val(); if(email != "") { if(emailpattern.test(email)){ $.ajax({ type: 'POST', url: 'index.php?route=extension/module/subscribers/newSubscribe', dataType: 'json', data: {email: $('#txtemail').val()}, success: function(data){ alert(data.message);} }); $('#txtemail').val(''); return false; }else{ alert("{{ text_invalid_email }}"); return false; } } else { alert("{{ text_email_require }}"); $(email).focus(); return false; } } $('#agree').click(function(){ if ($(this).is(':checked')){ $('#subscribe').removeAttr('disabled'); } else { $('#subscribe').attr('disabled', 'disabled'); } }); </script> изучил пару тем на форуме почему то не чего не нашел , как можно вывести данный модуль в footer? он щас выглядит вот так фото в низу! Спасибо заранее за помощь!