Обновлять ли устаревший сайт или создавать новый?

Предыстория

Заказчик пришел к нам на техническую поддержку сайта – оптово-розничный магазин, который был в рабочем состоянии, но не обновлялся несколько лет.

В основе функционала – решения (модули), которые не поддерживаются их разработчиками около пяти лет.

Эти устаревшие решения необходимы для функционирования магазина, но они же работают на старой седьмой версии php, а старая версия блокирует обновления Битрикса, что в свою очередь влияет на безопасность – получается замкнутый круг.

Доработать решения под требования 8 версии php вроде бы самое очевидное решение, но весь магазин и его функционал завязан на этих решениях, сразу сыпятся десятки ошибок.

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

Но возникает две проблемы:

  • переделывать с нуля довольно дорого, а ситуация здесь и сейчас в глазах клиента не требует срочного вливания денег, т.к. сайт формально работает (хоть и доработки вносить проблематично)
  • нет исходного ТЗ, по которому делался сайт. Есть разные части задач, которые удалось скомпилировать в один файл, но в полноценное ТЗ это не складывается. Часть функционала, который есть, заказчик не знает или не помнит достаточно подробно. Но его необходимо сохранить.

Поэтому было принято решение вернуться к варианту с последовательным планомерным устранением ошибок после переключения на php8 на отдельной тестовой площадке.

Процесс работы

Поставлена задача: обновить сайт на CMS Битрикс https://marcolin-rus.ru/

Для обновления CMS необходимо поднять версию PHP с 7,4 до версии 8,1.

В первую очередь перед тем как взяться за решение. Проверяем что ядро системы не затрагивалось. Запускаем тестирование сайта.

Видим, что проверку оно не прошло. Нужно выяснить, что изменялось.

Отделяем зерна от плевел.

Переместим все нужные файлы и модули в папку local. Основная логика сделана в модуле /indi.main

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

Строгие проверки на типы данных, вывод пустых переменных и ошибки нестатических методов, вызывающие статически. Самое сложное будет их все найти.

И так, приступаем. Меняем версию php на 8.1 и обновляем Битрикс.

Покажу пару ошибок, которые встречаются в основном модуле.

in_array(): Argument #2 ($haystack) must be of type array, null given (0)

Добавляем проверку

Пример типичных ошибок нестатических методов вызывающие статически

call_user_func_array(): Argument #1 ($callback) must be a valid callback, non-static method Indi\Main\Notify::OrdersSentEmailNew() cannot be called statically (0) public function OrdersSentEmailNew(\Bitrix\Main\Event $event) Добовляем static public static function OrdersSentEmailNew(\Bitrix\Main\Event $event)

Классов и методов достаточно много, так что за работу. Ищем и исправляем

В шаблонах ошибки так же типичны. Вывод данных без проверки и т.п.

Unsupported operand types: int - string (0) /var/www/marcolin-rus.mwidev.ru/data/www/marcolin-rus.mwidev.ru/local/templates/main/components/bitrix/catalog.section/.default/template.php:435

Делаются математические действия не проверив данные.

Делаем проверку данных:

if(!empty($offer["PRICES"][$priceType]["DISCOUNT_VALUE"]) && !empty($offer["PROPERTIES"]["RAZMER_SKIDKI"]["~VALUE"])){ $priceOld=$offer["PRICES"][$priceType]["DISCOUNT_VALUE"]/((100-$offer["PROPERTIES"]["RAZMER_SKIDKI"]["~VALUE"])/100); }

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

И по срокам, и по бюджету для клиента вопрос решился выгоднее, чем если бы ему настоятельно предлагали переделывать сайт с нуля ввиду того, что все устарело.

Внедрение бонусной программы в интернет-магазине на базе Mindbox

Sport Point – российская мультибрендовая сеть магазинов спортивной одежды, обуви и аксессуаров для тренировок, соревнований и повседневной жизни.

0
12 комментариев
Написать комментарий...
Александр

Кто также как и я не любит Битрикс - ставь лайк)

Ответить
Развернуть ветку
MWI
Автор

Предчувствовали, что будут комментарии от хейтеров Битрикс)

Ответить
Развернуть ветку
Ирина Поликарпова

когда ты у мамы - программист)

Ответить
Развернуть ветку
Илья Зарецкий

Для меня всегда легче создать что-то новое, чем тянуть старое!

Ответить
Развернуть ветку
MWI
Автор

В определенных случаях это правильно.

Ответить
Развернуть ветку
Аманда

если рассматривать этот вопрос в рамках статьи , то в сайт вложены большие средства и создавать новое , когда все знакомы со старым не целесообразно все же

Ответить
Развернуть ветку
Jon Rembo

Если так говорит заказчик то он идеальный, если так говорит разработчик то гнать его в лес)

Ответить
Развернуть ветку
Илья Зарецкий

В таком случае будем считать, что я заказчик 😂

Ответить
Развернуть ветку
Irina Egorova

Ничего не поняла, но очень интересно

Ответить
Развернуть ветку
MWI
Автор

Этот текст написан для заказчиков, кто сомневается, что его сайт проще обновить, чем разработать новый. Но да, писал его разработчик)

Ответить
Развернуть ветку
Роман Чернышев

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

Ответить
Развернуть ветку
Вячеслав Ра

о, кто-то научился поисковую выдачу самостоятельно настраивать 😂

Ответить
Развернуть ветку
9 комментариев
Раскрывать всегда