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

Используйте API продукта

Классы всех модулей продукта отлично документированы. Не надо изобретать велосипедов — всё уже придумано за вас.

Надо создать превью картинки?

$resizeImage = \CFile::ResizeImageGet($file, array('width' => 150, 'height' => 100));

Надо создать превью картинки и наложить ватермарк?

$resizeImage = \CFile::ResizeImageGet(
    $file,
    array('width' => 150, 'height' => 100),
    BX_RESIZE_IMAGE_PROPORTIONAL,
    true,
    array(
        array(
            "name" => "watermark",
            "position" => "center",
            "size" => "real",
            "file" => "/path/to/watermark.png"
        )
    )
);

Надо отправить POST запрос на внешний сервис?

$http = (new \Bitrix\Main\Web\HttpClient())
            ->post('http://www.1c-bitrix.ru', array('foo' => 'bar'));

Этот список можно продолжать бесконечно.

А то бывает, при поддержке проектов, наблюдаю функции mysql_query и mysql_fetch_array.

Кешируйте всё

Чем меньше мы ходим в базу за данными, тем шустрее работает сайт.

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

Используйте тегированный кеш при собственном кеширование кусков кода(в штатным компонентах он работает из «коробки»).

Пишите свои решения, когда необходимо

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

Например, я рассказывал как ускорить выборку в модуле «Информационные блоки» с помощью GetList в 10 раз.

Используйте языковые переменные везде и всюду

Общие фразы на сайте выносите из шаблонов компонентов в шаблоны сайта — в header.php шаблона:

IncludeTemplateLangFile(__FILE__);

С использованием языковых переменных в будущем будет легче создать вторую языковую версию сайта, да и это просто знак хорошего тона. Получение языковых переменных: в новом ядре это Loc::getMessage($key), в старом GetMessage($key).

Не пытайтесь использовать ЧПУ от корня сайта

Ни к чему хорошему это не приведёт. Даже сами разработчики не рекомендуют этого делать. Нет ничего плохого, когда адреса страниц товаров начинаются с /catalog/, а новостей с /news/

Не захламляйте файл init.php

Не надо писать код обработчиков прямо там. Даже небольших. Выносите их в отдельные файлы и классы. Дальше вам же легче будет переносить код этих самих классов из проекта в проект.

Ещё лучше сделать модуль-сборку с часто используюмыми функциями и загрузить его в маркетплейс. Можно не публиковать даже, а ставить на сайты по прямой ссылке.

Не надо модифицировать ядро

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

Если нашли ошибку в ядре — пишите в поддержку. Есть идея по улучшению кода или продукта — пишите на сайт идей.

Если прям совсем невмоготу и правки минимальны(буквально пара строк) — то можно поправить и при обновлении эти правки вносить снова. Кстати, бывает и я так делаю :-) Но для таких случаев я написал модуль и загрузил его в маркетплейс. Суть модуля: на странице обновления продукта выводится большая красная плашка с предупреждением, что код ядра модифицировался и очень подробно написано в каких файлах/функциях. Текст этого предупреждения редактируется на странице модуля.

Следите за ходом развития кода ядра

Это позволит вам всегда быть в курсе всех нововведений и, возможно, способствует удалению своих велосипедов в пользу функционала, который станет доступен «из коробки».

С 14 версии продукта активно развивается новое ядро D7, а это:

  • неймспейсы (пространства имён)
  • поддержка исключений (Exception)
  • ORM. Да, написали свой ORM. Конечно, не такой крутой как, например в Yii, но тоже неплохой.
  • поддежка ООП в компонентах. Да, теперь можно наследовать компоненты
  • автозагрузка классов в своих модулях, без лишних телодвижений в файле include.php (если конечно следовать инструкциям)

Читайте код

Там всегда есть много полезного и интересного. Плюс это поможет вам самим развиваться в написании и проектировании ваших продуктов.

Итог

Я не придумал что-то инновационно новое. Это прописные истины, к которым приходишь спустя какое-то время.

С тегом bitrix можно почитать ещё много интересного.

Есть вопросы? Задавайте в комментариях.