[recovery mode] Как я 30 дней автообновление валюты чинил: Opencart 3.0
Я новичок, совсем недавно начал изучать JavaScript, HTML, CSS и вот я web-администратор в офисе.
Все началось с обычного замечания на утренней планерке — генеральный директор сказал мне: «Видел? На сайте, сумма в рублях за доллар соответствует завтрашнему дню, а должна быть еще сегодняшняя!» Все товары, рекламные площадки, клиенты, заказы — все это завязано на валюте, которая обновляется на сутки раньше, чем должна.
И тут я понял что меня ждет очень сложная и почти не выполнимая задача. Ведь я совсем не секу в PHP и с Opencart только месяц как знаком. «Сделаю, конечно!», ответил я, не бить же в грязь лицом.
Как я с этим справился?
Опишу ситуацию как я её видел:
У меня есть интернет магазин, на Opencart 3 версии. Товары на нем отображаются как в рублях, так и в долларах. Каким-то волшебным, магическим образом, интернет магазин берет котировки валют и отображает на экране + записывает и подстраивает цены всех товаров под актуальный курс валют. Как это происходит еще предстояло узнать.
На сайте ЦБ РФ https://www.cbr.ru/ курс на следующий день известен уже в 14.00 ежедневно. И в моем интернет магазине, почему-то валюта обновляется в промежутке с 14.00 до 16.00 — это все что было мне известно.
Неделя №1 поиск и знакомство
Первое что я сделал, зашел на сайт, кликнул правой кнопкой просмотреть код и узнал какой класс отвечает за вывод валюты на экран.
Меню после клика правой кнопкой на элемент сайта
Далее начал шерстить по всем файлам, где только находил данный класс и пытался хоть что-нибудь понять. Файл за файлом я находил, открывал, искал, запоминал. Но кроме массива строк кода, не видел ничего. Ответов было 0.
Списки кода в котором сложно что то понять и разобраться с наскока
Позже, я нашел нужную мне функцию, но что с ней делать — не представлял даже. Так как я единственный разработчик в компании, мне не с кем было посоветоваться. Почему бы не написать в ЦБ РФ? По-моему отличная идея! Пишу — получаю примерно такой ответ: «Не понятно почему у Вас обновляется валюта раньше чем нужно, попробуйте вычесть из настоящего времени часы, чтобы подгадать обновление валюты» © разработчик ЦБ РФ
Нормально? Скинул мне ссылку на туториалы на сайте, про то как настраиваются XML запросы http://www.cbr.ru/development/sxml/
Следующие несколько дней я тестил собственные разработки. Создал новую переменную и присвоил ей значение (данный момент минус 7 часов)
кусочек функции где мы обращаемся к ЦБ РФ за XML форматом валют
А скрипты ЦБ РФ говорят, что бы получить конкретные котировки от определенной даты, то пожалуйста, запрашивайте по дате.
Один из примеров на сайте ЦБ РФ
Если скрипт http://www.cbr.ru/scripts/XML_daily.asp
Файл XML от ЦБ РФ с котировками валют
вызывает XML файл с валютами всего мира, то придерживаясь логики, я свою переменную добавляю в конец, вместо конкретной даты req=02/02/2000 и будет мне счастье. НО не тут то было.
Все это не сработало и никак не хотело чинить вывод валюты.
Неделя №2 обращение за помощью
Решил написать на форум, спросить мнения экспертов из интернета. В силу своей неопытности, я криво описал задачу и получал неправильные ответы на неправильные вопросы.
Почему-то я думал, что мне необходимо запускать функцию в определенное время и это решение показалось верным, но я пока не понимал какую же функцию и как запускать.
Совершенно наивно, без опыта и понимания о чем идет речь. Выудил на форуме помощь в виде составления функции и привязки ко времени, которую необходимо было поместить в некий файл помощник
Функция для определения времени
После необходимо было прописать новые условия в вызове в другом файле, что бы совместить все вместе
Функция проверки времени и вызова авто обновления
Добавляем функцию в условия проверки перед запуском
Применил
До 23.00 валюта не обновлялась и я думал что это победа, что вот-вот в 23.55.55 она обновится и я гордо расскажу о решении этой задачи!
Ничего не вышло
Утром пришлось откатывать все настройки назад. Потому что обновление не сработало вовсе. В этот момент я понял, что нужно начинать поиски заново.
Неделя №3 разгадка где-то рядом
Написал на хостинг администраторам. Что мне нужно запустить CRON задачу на файл. Но какой конкретно, я не знал. Поэтому пробовал всю неделю, просил хоста запустить на разные php файлы вызов.
CRON это планировщик заданий
Параллельно с тестированием настройки крона я стал активно изучать Opencart на просторах YouTube. Начал смотреть видео про MVC и как там все устроено в целом.
Например, теперь, мне понятно, что система ООП (объектно ориентированного программирования) в php для CMS системы Opencart строится по системе Model View Controller. Когда они обращаются друг к другу и взаимодействуют между собой.
Спасибо каналу «Opencart» там все доходчиво объясняется автором канала и показывается на примерах.
В самом конце 3 недели, примерно в пятницу, написал в комментариях на ютуб канале о своей проблеме с валютой и подумал, вдруг кто-то даст мне подходящий совет.
Комментарий — просьба о помощи
Оттуда я узнал, что на Opencart мы с помощью отключения ЧПУ (человеко подобного url) можем смотреть путь наших файлов в адресной строке.За счет этих знаний можем находить нужные нам файлы в проекте.
Код отвечающий за обновление
Новые знания, приобретенные с помощью ютуб канала и 3 недель мучений с валютой, помогли мне понять, что основную манипуляцию нужно проводить с данной проверкой.
Обращение по этой схеме идет к папке Model и если там есть функция refresh () то она вызывается и отправляет ответ в папку Controller, которая в свою очередь уже приказывает папке View отобразить новые данные для пользователя.
MVC модель для CMS Opencart
Неделя №4 кто ищет тот всегда найдет
В понедельник утром, отчаявшись и окончательно запутавшись, я получаю видео ролик, на ютуб канале где писал просьбу о помощи. Это видео на 30 минут с пояснением как нужно подготовить файл и запустить его через CRON. Дабы выполнение скрипта авто обновления валюты работало строго как нужно мне.
Новые знания снова пришли ко мне в руки и я с удовольствием их впитал. Изучив все файлы, содержащие нужные мне 4 строчки кода, я понял, что обновление валюты запускается в 2-х случаях. Когда я или кто-то еще заходит на страницу админ панели в Opencart, некий dashboard. А второй момент, когда мы заходим в настройки в той же админ панели.
Как будто срабатывает кнопка обновить, при входе на данные страницы.
Как нужно было написать новую функцию что бы починить валютуинтерфейс CRON планировщика
И в середине 4 недели, проверив работоспособность данной схемы, я наконец смог выдохнуть и с гордостью заявить, что вопрос решен! Валюта обновляется в 12 ночи, как мне необходимо и ошибки перестали сыпаться.
Получается, валюта на сайт подтягивалась с сайта ЦБ РФ каждый раз, когда кто-то заходил в админ панель из менеджеров или я сам. Поэтому она и обновлялась с 14 до 16 часов вечера.
Пример с указанием отдельной переменной и привязке к времени не сработал, так как вызов функции происходит при заходе в админ панель и никак иначе.
Мы же с помощью CRON смогли добиться вызова этой функции, будто кто-то нажимает за нас кнопку «обновить»
Я закомментировал 2 вызова функции, чтобы не мешать работе скрипта, а галочку на авто обновление оставил включенной. Ведь по условиям скрипта, кнопка авто обновление — должна быть активна.
Да, я все еще junior с маленьким опытом, но я на верном пути и пусть медленно, но верно двигаюсь вперед. Еще тысячи задач ждут меня впереди. И я очень этому рад!
Как итог
Учите базу и узнавайте как работает движок и его нюансы, как например Opencart;
Учитесь читать чужой код, даже если не разбираетесь в синтаксисе, обращайтесь к дополнительным источникам за знаниями (Youtube, habr, stackoverflow);
Читайте про дополнительные помощники в вашей работе, CRON или что-либо еще;
Не бойтесь сложных задач, ведь только за счет них вы по настоящему растете
P.S.: Если у Вас похожая задача, но Вам сложно, пишите, помогу чем смогу.