Jump to content

triok

Новичок
  • Content Count

    23
  • Joined

  • Last visited

Community Reputation

0 Обычный

About triok

  • Rank
    Пользователь

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Все еще раз привет, пользовался SEO PRO несколько месяцев, но к сожалению данный модуль не дружит с MegaFilter. Вопрос, есть еще какие-нибудь модули/варианты которые помогут решить проблему дублей, кроме SEO PRO ?
  2. В порядке эксперимента, Поставил Opencart 2.3 Русская сборка, затем MegaFilter, затем SEO Pro. Результат такой же, перестают работать ссылки фильтра если включить Тип чпу - SEO Pro. Затем поставил OcStore 2.3 , к нему MegaFilter и затем SEO Pro. Точно такой же результат. Не работают. Попробовал в другом порядке поставить, значения не имеет. Из-за того что проведена колоссальная 2 летняя работа с Мегафильтром, избавиться от него не представляется возможным.
  3. есть ощущение, что либо ни у кого не стоит такая связка Опенкарт 2.3 + МегаФильтр + СеоПро, либо у всех всё без проблем работает. Если второе (у всех такая связка работает без проблем), ребята, отпишитесь пожалуйста)
  4. Добрый день, подниму тему, проблема актуальна и не у меня одного! Если снять галочку в Мегафильтра alliases, то все работает норм, если опять включить что бы использовать ЧПУ, то редиректит на "страница не найдена"
  5. Всем привет! Ищу исполнителя для следующего задания: Opencart 2.3 Megafilter Pro 2.0.5.2 SeoPro Если включить SEOPro, то перестают работать ЧПУ которые назначены для страниц в Мегафильтре. То есть при выборе фильтра в урл отображается правильный ЧПУ, но если скопировать этот урл и открыть на новой странице или даже на той же, то "Запрашиваемая страница не найдена". Если поставить ЧПУ: Default, то все работает хорошо. Готов оплатить работу по исправлению этой проблемы!
  6. Спасибо большое за разъяснение, теперь все стало понятно. В итоге сделал отдельную функцию, в ней указал роут по умолчанию common/home и все модули загрузились.
  7. А почему тогда без Ajax все работает? То есть смотрите если оставить в home строку echo $content_bottom, то она включает контроллер content_bottom , который в свою очередь возвращает вьюху return $this->load->view('common/content_bottom', $data); А в content_bottom.tpl функция: <?php foreach ($modules as $module) { ?> <?php echo $module; ?> <?php }?> И вот она без проблем выводит все модули которые отмечены в админке в разделе Дизайн. Правильно ли я делаю что через ajax обращаюсь к функции Index контроллера content_bottom?
  8. Всем привет, пытаюсь сделать ленивую загрузку модулей в Opencart 2.3. На главной странице почти все модули выводятся через echo $content_bottom и я пытаюсь сделать их загрузку по кнопке "Load". Вот что сделал: В home.tpl убрал echo $content_bottom и написал следующий скрипт: modulesShown = false; $('#load').click(function(){ if(!modulesShown){ showModules(); modulesShown=true; } function showModules () { $.ajax({ url:"index.php?route=common/content_bottom/index", dataType:"html", success: function(e){ $("#modules").html(e); } }); }; }); То есть по моему замыслу все модули должны будут загрузится в див "modules" по нажатию на кнопку "Load" Контроллер content_bottom.php у меня стандартный. Вьюха content_bottom.tpl тоже Если добавить print_r($modules); то каждый раз у меня возвращается пустой массив. В этом собственно и проблема. Не могу понять почему он пустой.
  9. Всем привет! Столкнулся с проблемой дублей страниц, решить ее не смог. Кто поможет убрать дубли, что бы они не попадали в индексацию? Вкратце о строении сайта Есть Бренды (это категории) Есть Категории (это тоже категории и подкатегории) Одна и та же карточка товара отображается по следующим url: https://gearpro.ru/nozh-opinel-8-olive-wood (сайт/карточка) https://gearpro.ru/brand/nozh-opinel-8-olive-wood (сайт/бренд/карточка) https://gearpro.ru/brand/opinel/nozh-opinel-8-olive-wood (сайт/бренды/бренд/карточка) https://gearpro.ru/categories/nozh-opinel-8-olive-wood (сайт/категории/карточка) https://gearpro.ru/categories/nozhi/nozh-opinel-8-olive-wood (сайт/категории/категория/карточка) https://gearpro.ru/categories/nozhi/nozhi-opinel/nozh-opinel-8-olive-wood (сайт/категории/категория/подкатегория/карточка) Ну я так понимаю можно еще комбинации придумать) Все варианты попадают в индекс и в вебмастере эти страницы постоянно удаляются с пометкой дубль.А затем снова попадают и снова удаляются.
  10. 1) Немного переделал форму, так как если поля не заполнить и закрыть ее все равно появлялось уведомление что письмо отправлено. Поправил это. Новый код: <script type="text/javascript"> window.onload = function () { var a = document.getElementById('director'); a.onclick = function() { Swal({ type: 'warning', title: 'Письмо директору', html: '<input name="name" id="swal-input1" class="swal2-input" placeholder="Ваше имя">' + '<input name="email" id="swal-input2" class="swal2-input" placeholder="Email для ответа">' + '<textarea name="text" id="swal-textarea1" class="swal2-textarea" placeholder="Введите текст сообщения..." style="display: flex;"></textarea>', showCancelButton: true, confirmButtonColor: '#ff5908', cancelButtonColor: '#666', confirmButtonText: 'Далее', cancelButtonText: 'Отмена', preConfirm: function () { return new Promise(function (resolve) { resolve([ $('#swal-input1').val(), $('#swal-input2').val(), $('#swal-textarea1').val() ]) }) }, }).then(function (result) { if (result.value) { var result = {}; result.name = $('#swal-input1').val(); result.email = $('#swal-input2').val(); result.text = $('#swal-textarea1').val(); $.ajax({ url:"index.php?route=common/director/index", type: "POST", data: JSON.stringify(result), success: function() {Swal({type: 'success', text: 'Сообщение отправлено'});}, error: function(xhr,status,error){ console.log(status); console.log(error); } }) } }) return false; } } </script> 2) Вопрос к знатокам, с точки зрения более чистого кода уместно ли было создать новый контроллер для обработки такого запроса. Или же логичнее было впихнуть функцию обработки например в контроллер хедера/футера? Может быть вообще правильнее было всю логику вставить в функцию индекс хэдера/футера? 3) Защиту от спама не делал, во-первых не знаю как, а во-вторых на моем проекте она не нужна, спама нет) А вот с file_get_contents , тут да. Я долго не мог поймать пост запрос и в итоге это единственное решение которое сработало. Был бы признателен если бы указали как правильнее его поймать. Я так понимаю что надо начать со строк: if ($this->request->server['REQUEST_METHOD'] == 'POST') { } но как тут правильно все сделать не понимаю, у меня ничего не получилось
  11. Если долго мучиться, то что-нибудь получится. В итоге все сделал. Может кому понадобится, оставлю код здесь. Надеюсь кто-нибудь опытный поправит кои косяки и недоработки. В общем повторю еще раз смысл: В шапке магазина размещена ссылка, нажав на которую появляется модальное окошко SweetAlert с формой (имя, имейл, текст). Заполнив форму, жмем "ОК" и происходит отправка сообщения с данными формы на определенный имейл. В моем случае на почту директора. Итак, в header.tpl, ссылка выглядит так: <a href="mailto:director@xxx.ru"><p id="director" class="director">Письмо директору</p></a> В footer.tpl, вставил скрипт JS(SweetAlert) + отправку формы через Ajax, json <script type="text/javascript"> window.onload = function () { var a = document.getElementById('director'); a.onclick = function() { Swal({ type: 'warning', title: 'Письмо директору', html: '<input name="name" id="swal-input1" class="swal2-input" placeholder="Ваше имя">' + '<input name="email" id="swal-input2" class="swal2-input" placeholder="Email для ответа">' + '<textarea name="text" id="swal-textarea1" class="swal2-textarea" placeholder="Введите текст сообщения..." style="display: flex;"></textarea>', showCancelButton: true, confirmButtonColor: '#ff5908', cancelButtonColor: '#666', confirmButtonText: 'Далее', cancelButtonText: 'Отмена', preConfirm: function () { return new Promise(function (resolve) { resolve([ $('#swal-input1').val(), $('#swal-input2').val(), $('#swal-textarea1').val() ]) }) }, }).then(function (result) { var result = {}; result.name = $('#swal-input1').val(); result.email = $('#swal-input2').val(); result.text = $('#swal-textarea1').val(); $.ajax({ url:"/catalog/controller/common/director/index", type: "POST", data: JSON.stringify(result), error: function(xhr,status,error){ console.log(status); console.log(error); } }).done(function() { Swal({type: 'success', text: 'Сообщение отправлено'}); }); }) return false; } } </script> В папке controller/common/ создал контроллер director.php, который получает данные jSON и отправляет сообщение. Вот так он выглядит: <?php class ControllerCommonDirector extends Controller { public function index() { $request_body = file_get_contents('php://input'); $data = json_decode($request_body); $username = $data->name; $email = $data->email; $msg = $data->text; $message = '<div><span>Имя: </span><span><strong>'.$username.'</strong></span></div><br><div><span>Имейл: </span><span><strong>'.$email.'</strong></span></div><br><div>Текст сообщения:</div><br><div><strong>'.$msg.'</strong><div>'; $subject = 'Письмо директору от: '.$email; $mail = new Mail(); $mail->protocol = $this->config->get('config_mail_protocol'); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); $mail->setTo('director@xxx.ru'); // Имейл директора $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject(html_entity_decode($subject, ENT_QUOTES, 'UTF-8')); $mail->setHtml($message); $mail->send(); } } Уверен, что можно было бы где-то что-то упростить, но вариант рабочий. Буду рад услышать критику.
  12. Добрый день коллеги, помогите разобраться. Придумал себе задачу, сделать JS форму на сайте типа "Письмо директору", с двумя инпутами и кнопкой "ОК". При заполнении полей и нажатии на кнопку должна происходить отправка имейл сообщения. Почему именно JS , потому что все всплывающие окошки на сайте сделаны через SweetAlert2. Форму сделал соответственно тоже через SweetAlert2, при заполнении полей и нажатии на OK данные с инпутов кодируются в JSON, тут всё работает. Вот так выглядит форма: <script type="text/javascript"> window.onload = function () { var a = document.getElementById('director'); a.onclick = function() { Swal({ type: 'warning', title: 'Письмо директору', html: '<input id="swal-input1" class="swal2-input" placeholder="Ваш иемйл">' + '<textarea id="swal-textarea1" class="swal2-textarea" placeholder="Введите текст сообщения..." style="display: flex;"></textarea>', showCancelButton: true, confirmButtonText: 'Отправить', cancelButtonText: 'Отмена', preConfirm: function () { return new Promise(function (resolve) { resolve([ $('#swal-input1').val(), $('#swal-textarea1').val() ]) }) }, }).then(function (result) { var message = JSON.stringify(result); }) return false; } } </script> Собственно, вопрос , а дальше что? Я начал лепить аджакс запрос: $.ajax({ url:"sendmail.php", type: 'POST', data: message, error: true, success:function(message){swal('success')}, }) }) Результат приходит как succes. Создал sendmail.php файл: <?php $message = $_POST['message']; $mail = new \Mail(); $mail->protocol = $this->config->get('config_mail_protocol'); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); $mail->setTo('director@mail.ru'); // Кому $mail->setFrom($this->config->get('config_email')); // От кого $mail->setSubject("Test mail"); // Тема $mail->setHtml($message); // Текст $mail->send(); ?> И тут у меня возникла мысль, что я вообще не той дорогой иду)) Уважаемые коллеги, направьте меня на правильный путь. Правильно ли я понял схему, сначала делаю форму, затем формирую ajax запрос в файл sendmail.php, а там ловлю json данные и произвожу отправку?
  13. Да все понятно и ясно, с человеком в живую встречался, долго общался, ну , в общем , урок на будущее )
  14. Добрый день, выполнил работу на которую потратил 2 недели, заказчик работу не оплатил, поменял все пароли, на связь не выходит. Классика( Есть данные для подключения к БД (имя БД, логин, пароль) их не меняли это 100%. Опенкарт 2.3. Есть шансы как-то зайти в БД и удалить ее? Зайти в phpmyadmin напрямую нельзя (хостинг дает возможность зайти в PMA только через панель). Всю структуру сайта знаю (есть полная копия на локальном сервере).
  15. Добрый день! Opencart 2.3 Установлен модуль корзины Simple Необходимо доработать корзину и внести следующие изменения: Вкратце: Добавить столбик "скидка", который будет появляться при определенных условиях Сделать правила для столбца "скидка" по которым там будет отображаться сумма с учетом скидки или % скидки. Полное ТЗ: Техническое задание: 1) Необходимо задать правило: Если (клиент залогинен) или (один из товаров в корзине имеет акцию) или (активирован купон), то: [появляется колонка "Скидка"], которая будет располагаться между "Ценой" и "Итого". в остальных случаях этой колонки нет. 2) Необходимо задать правило к первой колонке (Цена): В любом случае если на товар есть акция, то в колонке Цена указывается обычная цена без учета акции. 3) В колонке (скидки) будут отображаться все варианты скидок. Правило: (не учитывая правила появления этой колонки описанное выше. Нижеследующие правила применяются только если сработало одно из условия для) Если (клиент залогинен), то: показывает процентный размер скидки и указывется слово "Накопительная" (http://joxi.ru/BA0bWaMtB7BJPm). Еще Если (к товару применен купон), то показывает процентный размер скидки и указывется "код купона" (http://joxi.ru/8238Kgbt6j6nxA), Еще Если (товар имеет акцию), то показывается процентный размер скидки и указывается "Акция" (http://joxi.ru/a2XYG7xcy5y4DA) В остальных случаях - прочерк. Есть идеи у кого-нибудь как все это реализовать? И какая будет стоимость работ...
×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.