Небольшой, но подробный туториал для начинающих разработчиков.
Возникла потребность в плавающей, выдвигающейся сбоку форме обратной связи (обратный звонок). К сожалению, готового решения я так и не нашел, кроме громоздкого, через модуль vqmod. Его суть заключается в перезаписи файлов OpenCart на лету, этакий своеобразный прокси-компонент, или декоратор, если угодно. Идея, конечно, интересная, но не об этом сейчас.
Мы займемся решением задачи с нуля, рассмотрим в деталях, как это делается. Надеюсь, материал данной статьи поможет вам лучше ориентироваться в OpenCart.
В развернутом виде, наша форма будет выглядеть так
Отправлять данные будем с помощью AJAX, то есть без перезагрузки страницы. Потребуется написать под это дело контроллер, исправить темплейт header текущей (дефолтной в нашем случае) темы, добавить стили и JavaScript.
Полный список редактируемых файлов:
- /catalog/view/theme/default/template/common/header.tpl
- /catalog/view/theme/default/stylesheet/stylesheet.css
- /catalog/view/javascript/common.js
- /catalog/controller/ajax/feedback.php – создаем папку и файл
Сперва, создадим код нашей формы:
Затем, вставим в header.tpl, сразу после открывающего тэга body. Полный путь здесь и далее смотри выше, в списке файлов.
Теперь добавим стили в самый конец stylesheet.css
Большая CSS простыня (кликни)
Теперь создадим папку ajax и контроллер feedback, следующего содержания:
Адрес, на который отправляются письма, берем из настроек OpenCart и другие настройки, связанные с почтой. Контроллер работает как в режиме «Mail» так и «SMTP».
Данное решение тщательно протестировано на версии OpenCart 2.3.0.2 (русская сборка).
Чтобы ваши письма не попадали в СПАМ, воспользуйтесь рекомендациями из ранее опубликованной статьи
Модуль для создания формы обратной связи на Opencart 2.x. Форму можно выводить через Макеты в позиции на сайте на любую страницу. В админке можно задать заголовок контактной формы и текст перед формой. Мультиязычный.
Установка модуля:
1. Установить модуль (contact-form.ocmod.zip) через админку
2. Обновить модификации
3. Перейти в Модули > Модули, включить и настроить модуль
4. Вывести модуль на страницы через Дизайн > Макеты
Изменения:
11.05.2017 – исправлены ошибки с выводом заголовка и описания модуля в версиях для Opencart 2.2 и 2.3
-
Opencart 2.0 Opencart 2.1 и ocStore 2.1 Opencart 2.2 Opencart 2.3 и ocStore 2.3
1. Скачайте и установите фикс Localcopy
2. Обновите модификации в админке
3. Загрузите модуль наново
Ошибка 500 после установки модуля означает, что случилась какая-то критическая ошибка в php.
Для определение проблемы можно:
1. Открыть файл logs/error.log на вашем сервере. В конце этого файла будут все последние критические ошибки.
2. Открыть в админке Инструменты > Логи ошибок – в этом месте отображаются ошибки, но не всегда.
3. Включить вывод ошибок php на экран – добавить следующий код в конец файла .htaccess:
1. Если вы раньше не загружали модули в архиве через админку – вам нужно установить бесплатную модификацию localcopy.ocmod.xml согласно инструкции и после этого переустановить модуль
2. Возможно в устанавливаемого модуля нет собственной страницы настроек и соответственно его не будет в списке Модулей
Два варианта решения:
1. Если при установке модуля из админки вылетает эта ошибка – вам нужно установить бесплатную FTP QuickFix модификацию localcopy.ocmod.xml. Она установиться без проблем через тот же установщик дополнений, только после установки не забудьте обновить модификации и затем можете приступать к установке любых модулей на Opencart 2.
2. Также решить эту ошибку можно по другому: прописать доступы к FTP в админке Система > Настройки > Магазин > вкладка FTP.
Если вы видите сообщение " Доступ запрещен! У Вас нет прав для доступа к этой странице. Если она Вам нужна, обратитесь к администратору. " – нужно дать права администраторам на управление модулем или страницей.
Решение: в админке Opencart 2 переходим в Система > Пользователи > Группы пользователей > Администраторы и здесь нажимаем "Выделить все" ниже обоих блоков, затем Сохранить .
Еще одной причиной появления этой ошибки может быть не правильная установка модуля – файлы не загрузились на свои места. Загрузите файлы модуля вручную на сервер или установите фикс localcopy и переустановите модуль.
Решение: в админке Opencart 2 переходим в Система > Пользователи > Группы пользователей > Администраторы и здесь нажимаем "Выделить все" ниже обоих блоков, затем Сохранить .
Если модуль – это один XML файл, то его расширение должно быть .ocmod.xml
Если модуль – это ocmod.zip архив, то его не нужно распаковывать, а устанавливать как есть. В таком архиве обязательно должна быть папка upload (может быть пустой) , а также могут быть файлы модификаций: install.xml , install.php , install.sql . Никаких других файлов в корне архива быть не должно.
Эта ошибка означает, что в загружаемом архиве отсутсвует папка upload. Даже если у модуля нет файлов, кроме модификаций – эта папка должна присутствовать в архиве модуля .ocmod.zip, тогда она должна оставаться пустой.
Эта ошибка означает, что вы пытаетесь установить модификатор, который уже установлен или, возможно, у какого-то вашего модуля такой же ID.
Для решения этой ошибки вам нужно перед установкой удалить старую версию модификации в разделе Модули > Модификации.
Если такого модуля у вас нет, но совпадает ID, тогда нужно поменять значение параметра в устанавливаемом модификаторе XML, сделать этот параметр уникальным дописав несколько символов.
Эта ошибка означает, что вы пытаетесь установить слишком объемный xml- модификатор.
Количество символов в ocmod.xml файле не должно превышать 65535 .
Для решения ошибки нужно разбить xml-файл модификации на несколько частей, главное – не забыть задавать каждой уникальное значение в , можно добавлять к текущему значению цифры 1,2,3. как идентификаторы части.
Еще одним способом решения есть изменения типа в поля, где храняться модификации, в таблице ‘oc_modification’ базы данных. Нужно выполнить следующий SQL-запрос:
ALTER TABLE oc_modification CHANGE xml xml MEDIUMTEXT CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ;
Похоже, вы установили на Opencart 2.3.x.x модуль для более старых версий этой системы, то есть не совместимый модуль. Нужно удалить все файлы этого модуля, иначе ошибка не исчезнет.
Для удаления файлов модулей из админкм в один клик можно использовать модуль
Также данная ошибка может возникать, если скрипт обращается к несуществующей таблице в базе данных. То есть, таблица модуля не создалась при установке. Читайте инструкцию по установке и переустановите модуль.
Если модуль не реагирует на ваши действия, будь-то нажатие на кнопку или загрузка карты или выбор даты или на любое другое действие которое есть в функционале модуля – скорее всего произошел конфликт в JS-скриптах.
Нажмите F12 на проблемной странице в браузере – откроется панель вебмастера, где на вкладке Console можно увидеть конфликты в скриптах, если они есть. Данное действие доступно в браузерах Chrome, Opera, Firefox.
При отправке заявки через форму обратной связи клиент указывает свой email. Затем, если нужно, можно с ним связаться, используя этот адрес. Но на одном из сайтов возникла проблема: уведомление об обращении на почту прилетает без клиентского email’а.
Проблема оказалась всего в одной строчке кода:
Opencart пытается отправить email от имени клиента. Но настройки хостинга запрещают подмену адреса отправителя, более того, адрес вида somelogin@anyHosting.ru автоматически выдаётся при регистрации и сменить его нельзя.
Чтобы это поправить, открываем: /catalog/controller/information/contact.php и находим строку:
После этого адрес будет всегда указываться в теле письма.
Вслед за большим обновлением Opencart, подготовил обновление для OpenSecurity.
В апреле этого года вышла ubuntu 16.04LTS, которая "из коробки" поддерживает php7. А в свете глобальных изменений в ядре php стало очень заманчиво переехать на обновлённую систему. Кроме этого, давно хотел перейти с apache на ngnix и с mysql на mariadb.