Skip to content

Latest commit

 

History

History
87 lines (79 loc) · 7.28 KB

README.md

File metadata and controls

87 lines (79 loc) · 7.28 KB

Стандарты программирования для платформы 1С-Битрикс

В этом руководстве описаны рекомендуемые техники при разработке под платформу 1С-Битрикс (далее просто Битрикс). Весь PHP код должен написан в соответствии со стандартом PSR-1. Стиль написания кода должен соответствовать стандарту PSR-2.

  1. Общие положения

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

  • РЕКОМЕНДУЕТСЯ использовать только <?php и <?= теги. Тег <? использовать НЕ РЕКОМЕНДУЕТСЯ.
  • РЕКОМЕНДУЕТСЯ использование кодировки UTF-8 без BOM.
  1. Базовые правила при разработке под Битрикс

  • при добавлении кода в файл init.php РЕКОМЕНДУЕТСЯ выносить логически сгруппированный код в отдельные файлы и подключать их внутри init.php

  • НЕ РЕКОМЕНДУЕТСЯ использовать цифровые значения в GetList, GetByID и схожих методах, которые принимают различные ID. РЕКОМЕНДУЕТСЯ создать файл со всеми необходимыми константами и вызывать их имена. У каждой константы ДОЛЖНО быть «говорящее» именование и комментарий.

    Не правильно:

    <?php
    $comments = CIBlockElement::GetList(Array(), Array("IBLOCK_ID" => 12));

    Правильно: Создаем файл constants.php и указываем в нем:

    <?php
    //ИБ с комментариями пользователей
    const COMMENTS_IBLOCK_ID = 12;

    Подключаем этот файл в init.php

    <?php
    //Константы проекта
    include_once($_SERVER["DOCUMENT_ROOT"] . '/bitrix/php_interface/includes/constants.php');

    Используем константу

    <?php
    $comments = CIBlockElement::GetList(Array(), Array("IBLOCK_ID" => COMMENTS_IBLOCK_ID));
  • при выборках данных (например, GetList) ОБЯЗАТЕЛЬНО указывать поля, которые нужны для дальнейших манипуляций, кроме случаев, когда нужны все поля

  • при необходмости выбрать несколько элементов по ID, ОБЯЗАТЕЛЬНО использовать GetList вместо GetByID

    Не правильно:

    <?php
    $element1 = CIBlockElement::GetByID(1);
    $element2 = CIBlockElement::GetByID(2);

    Правильно:

    <?php
    $elements = CIBlockElement::GetList(Array(), Array("ID" => Array(1, 2)));
  • НЕ РЕКОМЕНДУЕТСЯ использовать прямые запросы к базе данных без крайней необходимости

  • если к файлу не предусмотрен прямой доступ ОБЯЗАТЕЛЬНО в первой строке файла добавить

    <?php
    if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
  1. Работа с компонентами

  • РЕКОМЕНДУЕТСЯ давать шаблонам компонентов осмысленные названия и в каждом проекте придерживаться общего стиля. Например, Раздел/страница_сайта.Название.Тип Примеры:
  • index.user.auth
  • profile.orders.list
  • cart.products.additional
  • НЕЛЬЗЯ модифицировать стандартные компоненты. Если возникает такая необходимость — создается копия компонента в своем пространстве имен в папке /bitrix/components/
  • РЕКОММЕНДУЕТСЯ все шаблоны компонентов сохранять в шаблоне .default в папке /bitrix/templates/.default/
  • НЕ РЕКОМЕНДУЕТСЯ делать любые манипуляции с данными в файле template.php. При необходимости правки логики стандартных компонентов, но недостаточной для того, что делать свой используются файлы result_modifier.php и component_epilog.php
  • НЕЛЬЗЯ вставлять код вызова компонента внутрь файла template.php другого компонента
  • РЕКОМЕНДУЕТСЯ использовать файлы style.css и script.js в шаблонах только если они переопределяют стандартное поведение схожих элементов. РЕКОМЕНДУЕТСЯ оставить комментарий об этой особенности
  • НЕЛЬЗЯ отключать кеширование компонентов. Практически не существует задач, которые нельзя решить с включенным кешированием
  1. Работа с шаблонами

  • РЕКОМЕНДУЕТСЯ использовать минимальное количество шаблонов
  • РЕКОМЕНДУЕТСЯ подключать header.php и footer.php из одного места для всех шаблонов, если это позволяет дизайн и верстка
  • РЕКОМЕНДУЕТСЯ общие картинки, скрипты и стили шаблонов сохранять в одном месте, например, в /bitrix/templates/.default/
  1. Работа с инфоблоками

  • ОБЯЗАТЕЛЬНО называть все свойства инфоблоков в верхнем регистре, осмысленно (используя связку сущность-наименование), разделяя слова нижним подчеркиванием. Например:
  • Имя пользователя: USER_NAME
  • Валюта заказа: ORDER_CURRENCY
  • Список заказов: ORDER_LIST