Найти в Дзене
MWI - Маркетологи

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

Оглавление

Предыстория

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

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

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

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

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

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

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

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

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

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

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

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

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

-2

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

-3

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

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

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

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

MWI Marketing Masters

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

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

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

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

-5

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

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)

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

-6

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

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 и битрикса.

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