[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 форматом валюткусочек функции где мы обращаемся к ЦБ РФ за XML форматом валют

А скрипты ЦБ РФ говорят, что бы получить конкретные котировки от определенной даты, то пожалуйста, запрашивайте по дате.

Один из примеров на сайте ЦБ РФОдин из примеров на сайте ЦБ РФ

Если скрипт http://www.cbr.ru/scripts/XML_daily.asp 

Файл XML от ЦБ РФ с котировками валютФайл XML от ЦБ РФ с котировками валют

вызывает XML файл с валютами всего мира, то придерживаясь логики, я свою переменную добавляю в конец, вместо конкретной даты req=02/02/2000 и будет мне счастье. НО не тут то было. 

Все это не сработало и никак не хотело чинить вывод валюты.

Неделя №2 обращение за помощью

Решил написать на форум, спросить мнения экспертов из интернета. В силу своей неопытности, я криво описал задачу и получал неправильные ответы на неправильные вопросы.

Почему-то я думал, что мне необходимо запускать функцию в определенное время и это решение показалось верным, но я пока не понимал какую же функцию и как запускать.

Совершенно наивно, без опыта и понимания о чем идет речь. Выудил на форуме помощь в виде составления функции и привязки ко времени, которую необходимо было поместить в некий файл помощник

Функция для определения времени Функция для определения времени

После необходимо было прописать новые условия в вызове в другом файле, что бы совместить все вместе

Функция проверки времени и вызова авто обновленияФункция проверки времени и вызова авто обновления

Добавляем функцию в условия проверки перед запуском

Применил

До 23.00 валюта не обновлялась и я думал что это победа, что вот-вот в 23.55.55 она обновится и я гордо расскажу о решении этой задачи!

Ничего не вышло

Утром пришлось откатывать все настройки назад. Потому что обновление не сработало вовсе. В этот момент я понял, что нужно начинать поиски заново.

Неделя №3 разгадка где-то рядом

Написал на хостинг администраторам. Что мне нужно запустить CRON задачу на файл. Но какой конкретно, я не знал. Поэтому пробовал всю неделю, просил хоста запустить на разные php файлы вызов.

CRON это планировщик заданийCRON это планировщик заданий

Параллельно с тестированием настройки крона я стал активно изучать Opencart на просторах YouTube. Начал смотреть видео про MVC и как там все устроено в целом.

Например, теперь, мне понятно, что система ООП (объектно ориентированного программирования) в php для CMS системы Opencart строится по системе Model View Controller. Когда они обращаются друг к другу и взаимодействуют между собой.

Спасибо каналу «Opencart» там все доходчиво объясняется автором канала и показывается на примерах.

В самом конце 3 недели, примерно в пятницу, написал в комментариях на ютуб канале о своей проблеме с валютой и подумал, вдруг кто-то даст мне подходящий совет.

Комментарий — просьба о помощиКомментарий — просьба о помощи

Оттуда я узнал, что на Opencart мы с помощью отключения ЧПУ (человеко подобного url) можем смотреть путь наших файлов в адресной строке.За счет этих знаний можем находить нужные нам файлы в проекте.

Код отвечающий за обновлениеКод отвечающий за обновление

Новые знания, приобретенные с помощью ютуб канала и 3 недель мучений с валютой, помогли мне понять, что основную манипуляцию нужно проводить с данной проверкой.

Обращение по этой схеме идет к папке Model и если там есть функция refresh () то она вызывается и отправляет ответ в папку Controller, которая в свою очередь уже приказывает папке View отобразить новые данные для пользователя.

MVC модель для CMS OpencartMVC модель для CMS Opencart

Неделя №4 кто ищет тот всегда найдет

В понедельник утром, отчаявшись и окончательно запутавшись, я получаю видео ролик, на ютуб канале где писал просьбу о помощи. Это видео на 30 минут с пояснением как нужно подготовить файл и запустить его через CRON. Дабы выполнение скрипта авто обновления валюты работало строго как нужно мне.

Новые знания снова пришли ко мне в руки и я с удовольствием их впитал. Изучив все файлы, содержащие нужные мне 4 строчки кода, я понял, что обновление валюты запускается в 2-х случаях. Когда я или кто-то еще заходит на страницу админ панели в Opencart, некий dashboard. А второй момент, когда мы заходим в настройки в той же админ панели.

Как будто срабатывает кнопка обновить, при входе на данные страницы.

настройки -> локализация → валюты» />настройки → локализация → валюты</p>

<p>Так как все работает на взаимодействии MVC мне нужно было добавить новую функцию в файл по пути controller/common/home.php например</p>

<p><img src=Как нужно было написать новую функцию что бы починить валютуинтерфейс CRON планировщикаинтерфейс CRON планировщика

И в середине 4 недели, проверив работоспособность данной схемы, я наконец смог выдохнуть и с гордостью заявить, что вопрос решен! Валюта обновляется в 12 ночи, как мне необходимо и ошибки перестали сыпаться.

  1. Получается, валюта на сайт подтягивалась с сайта ЦБ РФ каждый раз, когда кто-то заходил в админ панель из менеджеров или я сам. Поэтому она и обновлялась с 14 до 16 часов вечера. 

  2. Пример с указанием отдельной переменной и привязке к времени не сработал, так как вызов функции происходит при заходе в админ панель и никак иначе.

  3. Мы же с помощью CRON смогли добиться вызова этой функции, будто кто-то нажимает за нас кнопку «обновить»

  4. Я закомментировал 2 вызова функции, чтобы не мешать работе скрипта, а галочку на авто обновление оставил включенной. Ведь по условиям скрипта, кнопка авто обновление — должна быть активна.

  5. Да, я все еще junior с маленьким опытом, но я на верном пути и пусть медленно, но верно двигаюсь вперед. Еще тысячи задач ждут меня впереди. И я очень этому рад!

Как итог

  • Учите базу и узнавайте как работает движок и его нюансы, как например Opencart;

  • Учитесь читать чужой код, даже если не разбираетесь в синтаксисе, обращайтесь к дополнительным источникам за знаниями (Youtube, habr, stackoverflow);  

  • Читайте про дополнительные помощники в вашей работе, CRON или что-либо еще;

  • Не бойтесь сложных задач, ведь только за счет них вы по настоящему растете

P.S.: Если у Вас похожая задача, но Вам сложно, пишите, помогу чем смогу.

© Habrahabr.ru