Правила по работе с Bitrix: ошибки разработчиков

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

Правила по работе с Bitrix: ошибки разработчиков
Advego - наполнение сайтов информацией
Advego - наполнение сайтов информацией
Advego - наполнение сайтов информацией

 1) ИСПОЛЬЗУЙТЕ ПАПКУ local. Это просто жизненно необходимо при использовании системы контроля версий. Все, что вам нужно – добавить в исключения папку /bitrix/. Всё. Далее практически вся разработка ведется только в ней. Это заметно упрощает поиск нужных файлов и компонентов в последствии, помогает не засорять репозиторий лишними файлами, да и вообще – приводит дерево проекта в более опрятный вид.

2) НЕ МОДИФИЦИРУЙТЕ ЯДРО. В том числе, если вы уверены, что оно не будет обновляться. Даже если так быстрее и вам лень.  При необходимости изменить логику работы стандартного компонента – перенесите его в новое пространство имен /local/components/modify/ и работайте с ним. То же самое касается модулей, гаджетов и activities бизнес-процессов.

3) НЕ ЗАСОРЯЙТЕ ФАЙЛ init.php. Объединяйте функции для работы с каким-то конкретным модулем или функционалом в класс, весь этот класс записывайте в отдельный файл, а в init.php просто подключайте эти файлы и прописывайте обработчики событий, чтобы файл init.php не весил по 500Kb, где в кашу были смешаны функции, определение констант, классы и инициализация обработчиков. 

4) НЕ СТОИТ ПЫТАТЬСЯ СДЕЛАТЬ УНИФИЦИРОВАННЫЙ ШАБЛОН ДЛЯ КОМПОНЕНТА НА ВСЕ СЛУЧАИ ЖИЗНИ.
Пункт не касается случая разработки готовых решений для Marketplace, когда целью ставится сделать максимально настраиваемый функционал из публичной части для конечного потребителя. Если вы работаете над конкретным проектом, по конкретному ТЗ. Придерживайтесь философии – лучше несколько простых шаблонов, использующихся для разных целей, чем один универсальный, но в котором сам черт потом ногу сломит. Разумеется, в каждом конкретном случае нужно отталкиваться от того, что есть – техзадание, варианты реализации и тому подобное, но забывать про «Бритву Оккама» все-таки не стоит. 

5) ИСПОЛЬЗУЙТЕ API. Не изобретайте велосипеды там, где это не нужно. Юзайте документацию – весь продукт довольно хорошо описан, а так же каждую функцию можно посмотреть детально на bxapi.ru.

6) ИЗБЕГАЙТЕ ПРЯМЫХ ЗАПРОСОВ К БАЗЕ. Это частный случай предыдущего пункта – используйте API. Необдуманные, незащищенные запросы могут привести к порче, утере или даже к компрометации данных.

7) НЕ ИСПОЛЬЗУЙТЕ КОМПОНЕНТЫ С ЧПУ ИЗ КОРНЯ САЙТА. Последствия, как правило, довольно печальны, так как ЧПУ использует файл обработчика адресов, попытка использовать его из корня легко ломает вам адресацию других компонентов, а так же 404 страницы. Ничего страшного не будет, если статьи у вас будут адресоваться относительно папки /articles/, а товары относительно /catalog/.

8) ПОДКЛЮЧАЙТЕ CSS И JS С ПОМОЩЬЮ API.  Используйте объект класса \Bitrix\Main\Page\Asset и функции addJs() и addCss(). Это позволит объединять файлы и, в последствии, кешировать их одним нажатием чекбокса в настройках главного модуля

9) ПРОВЕРЯЙТЕ НА ПУСТОТУ МАССИВ С РЕЗУЛЬТАТАМИ ВЫБОРКИ. Как пример, последний раз встретился с данной проблемой при работе с одним интернет-магазином. Жалоба: страницы иногда грузятся по 16 секунд. С чем связано – не ясно. Методом проб и ошибок выяснил, что страницы грузятся неприлично долго только тогда, когда корзина пустая. Казалось, с чего бы? Как выяснилось, у корзины при наведении появлялось всплывающее окно, в котором отображались изображения товара, положенного в корзину. Ну что сделал предыдущий разработчик? Взял результат работы компонента «маленькая корзина» и в файле result_modifier.php сделал вызов GetList() товаров для выборки изображений с фильтром из массива ID товаров, потом из результатов выборки в массив соответствующего товара добавлял src изображения. В итоге, когда товаров в корзине не было, фильтр уходил пустой, и в выборку попадал ВЕСЬ каталог товаров. Ну а дальше цикл по каждому и… имеем то, что имеем. Ясно, что на этапе разработки при тестовых 15 товарах это было незаметно, и проблемы возникли уже в боевых условиях. Хотя, казалось бы, чего стоило поставить проверку на empty($arResult[‘ITEMS’]).

Advego - система покупки и продажи контента для сайтов, форумов и блогов
Advego - система покупки и продажи контента для сайтов, форумов и блогов
Advego - система покупки и продажи контента для сайтов, форумов и блогов