Введение в «1С-Битрикс: Управление сайтом»

Статья предназначена для тех, кто хочет овладеть основами замечательного программного продукта «1С-Битрикс: Управление сайтом». Эта статья ни в коей мере не заменяет официальную документацию и учебные курсы, однако, с большой вероятностью, сможет помочь читателю сделать вывод о целесообразности применения Bitrix для решения своих задач по созданию сайта. Также в статье рассказывается о преимуществах Bitrix по сравнению с популярной бесплатной CMS Drupal, распространяемой на условиях open source.

В этой статье имеется краткая информация о возможностях Битрикса, о политике лицензирования, об идеологии построения системы на инфоблоках, о программных модулях, компонентах и шаблонах, о политике кэширования. Мы постарались изложить всё это максимально доступным языком.

В любом случае, эта статья поможет сэкономить массу времени: документация Битркса великолепна, но уж очень объёмиста. В конце чтения статьи читатель сможет понять, стоит ли ему связываться с Битриксом и имеет ли смысл вникать глубже в его устройство.

[Update] Уважаемые любители CMS Drupal! Дабы положить конец флейму, вызванному этой статьёй, специально для вас добавлен Disclaimer.

Содержание

Обзор продукта

Продукт «1С-Битрикс: Управление сайтом» представляет собой уникальное сочетание на редкость удачно реализованной CMS и мощного фреймворка. Функциональность Битрикса с избытком покрывает все основные потребности владельцев контент-проектов, Интернет-магазинов, корпоративных сайтов и т.д. В состав «1С-Битрикс: Управление сайтом» входят функциональные блоки:

  • управления контентом с произвольно расширяемым набором предметных сущностей и поддержкой документооборота, эффективной системой кэширования;
  • Интернет-магазин с развитой системой управления заказами, скидками, валютами и акциями, возможностью обмена с «1С: Предприятием»;
  • модуль рассылок, позволяющий авторам автоматически формировать выпуски на основе появляющегося на сайте контента либо вручную, а подписчикам - самостоятельно управлять своими подписками;
  • блок рекламы и статистики, включающий в себя возможность управления рекламными площадками (в том числе и внешними), гибко настраивать рекламные кампании, правила ротаций баннеров, отслеживать эффективность, получать развёрнутую статистику не только по типовым параметрам (хиты-хосты), но и более сложные отчёты в привязке, например, к конкретным группам пользователей;
  • модуль работы с почтой, включающий в себя автоматизацию службы техподдержки;
  • блок автоматического обновления продукта;
  • и многое другое.

Рекомендуем ознакомиться с полным перечнем возможностей продукта «1С-Битрикс: Управление сайтом» по адресу: http://www.1c-bitrix.ru/sitemanager/features/features.php.

Изучению Битрикса предшествовали попытки освоения бесплатной CMS Drupal. Чтобы продемонстрировать преимущества Битрикса, иногда идеологии этих двух систем будут сравниваться.

Основные принципы лицензирования

Имеются два объекта лицензирования: установка продукта и сайт.

Под установкой продукта понимается одна установленная на web-сервер копия продукта «1С-Битрикс: Управление сайтом»: структура папок продукта плюс одна БД.

Одна установка продукта стандартно обслуживает не более двух сайтов. Соответственно, все сайты в рамках одной установки используют общую базу данных и общую структуру каталогов продукта. Также можно докупить лицензии на создание дополнительных сайтов в рамках имеющейся установки.

Продукты различаются по включённому в них набору модулей и по используемой СУБД. Так, максимальный набор модулей «Бизнес» для MySQL стоит примерно впятеро дешевле, чем тот же набор для MSSQL.

Версии Битрикса для разных СУБД абсолютно идентичны по функциональности - и выбор делается исключительно из соображений масштабируемости и имеющейся инфраструктуры. Обратите внимание, что ни в какую поставку Битрикса сама СУБД не входит и приобретается отдельно.

Имеется возможность приобретения как продуктов, так и дополнительных сайтов «пачками». В этом случае предоставляются существенные скидки. Также можно приобрести лицензию на неограниченное количество установок или на неограниченное число допсайтов.

Более подробно о ценах и ценовой политике можно посмотреть здесь.

Для партнёров предусмотрены скидки до 50%. Подробнее об условиях партнёрства можно посмотреть здесь.

При приобретении продукта техподдержка и возможность автоматического обновления продукта предоставляется бесплатно в течение одного года. Дальнейшее продление поддержки платное, льготная стоимость - 22% от стоимости продукта в год. Подробнее об условиях поддержки можно посмотреть здесь.

Управление сайтом

В CMS Drupal административный и пользовательский интерфейсы смешаны (т.е. если логинится пользователь с администраторскими правами, то в интерфейсе появляются дополнительные элементы управления). В Битриксе административный и пользовательский интерфейсы полностью разнесены, что позволяет создавать совершенно произвольные шаблоны страниц (в Drupal приходилось делать шаблоны таким образом, чтобы в них нормально отображалась та часть административного интерфеса, которая не использует административный шаблон).

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

Подробнее о принципах управления сайтом можно прочитать в учебном курсе «Администрирование системы».

Информационные блоки (инфоблоки)

Идеология инфоблоков

Основной структурной единицей CMS Drupal служит узел (node). По сути дела, любая страница сайта на Drupal (за исключением служебных) - это либо список анонсов узлов, либо полное отображение одного узла. Вывод любой страницы может сопровождаться выводом дополнительных блоков, но, так или иначе, они являются вторичными по отношению к node.

В Битриксе реализована идеология инфоблоков (синоним понятию «справочник» в «1С: Предприятии» или понятию «сущность предметной области»). Инфоблок представляет собой совокупность объектов, обладающих одинаковым набором свойств.

Все инфоблоки равноправны в том смысле, что любой инфоблок (или даже несколько инфоблоков) может использоваться для вывода как в основной области страницы, так и в дополнительных областях. Таким образом, node в CMS Drupal является лишь частным случаем инфоблока - и, по сути, в Drupal имеется только один инфоблок, тогда как в Битриксе их может быть неограниченное количество.

Свойства инфоблоков

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

Пользовательские свойства могут быть скалярного типа (число, строка, дата, YN - булевский) либо ссылочного типа. Так, например, если есть инфоблок «Статьи» и инфоблок «Авторы», то у инфоблока «Статьи» можно добавить свойство «Автор» и указать тип - ссылка на элемент инфоблока «Авторы». На самом деле, конечно, в поле «Автор» будет храниться лишь код автора, однако при вводе новых статей администратор будет вводить не сам код, а будет выбирать автора из списка имеющихся в инфоблоке «Авторы».

Обычное свойство инфоблока ссылочного типа

Свойство можно сделать множественным. Это означает, что в нём сможет храниться одновременно более одного значения. Так, например, если у статей допускается соавторство, то можно свойство «Автор» сделать множественным - и тогда можно будет указывать нескольких авторов для одной статьи. Служебные таблицы для развязки отношений «многие-ко-многим» создаются Битриксом автоматически.

Множественное свойство инфоблока ссылочного типа

Принципы именования инфоблоков

Применяется тот же принцип, что и при построении инфологической модели предметной области:

  • инфоблоки, как и сущности в инфологической модели, следует называть существительным во множественном числе, если нужно, с зависимыми словами («Статьи», «Графические баннеры»);
  • элементы инфоблоков, как и экземпляры сущностей, следует называть так же, как сам инфоблок, но в единственном числе («статья», «графический баннер»);
  • обычные свойства инфоблоков следует называть существительными в единственном числе (при этом, если поле ссылочного типа, то его следует называть тем же сущесвтительным, что и инфоблок, на который ссылается это поле, например, в инфоблоке «Статьи» поле «Автор»);
  • множественные свойства инфоблоков следует называть аналогично, но во множественном числе.

Обратите внимание, что не следует давать названия вроде «КодАвтора» или «IDАвтора». Инфоблок - это не табличная, а объектная сущность, и при этом неважно, что в ссылочных полях хранятся коды. Коды - это детали реализации, а суть в том, что это не просто код, а именно ссылка.

Иерархическое упорядочивание элементов инфоблоков

Инфоблоки могут использоваться как плоские списки либо как иерархические структуры. В случае плоского списка все элементы равноправны и выводятся в административном интерфейсе одним списком. Однако иногда необходимо выделить какой-либо признак и разложить элементы, подобно раскладывания файлов по папкам. Так, например, можно сделать первым уровнем иерархии год публикации статьи, а вторым - месяц.

  • Корень инфоблока

    • 2006 год

      • Январь

        • «О вкусной и здоровой пище»
        • «Основы сайтостроения»
      • Февраль

        • «Введение в Битрикс»
    • 2007 год

      • «Использование блендера для приготовления коктейлей»
      • «Управление сайтом»

При подобной структуре годы и месяцы называются разделами инфоблока (синоним понятия «группа справочника» в «1С: Предприятии»). Вложенность разделов может быть любой, причём необязательно допускается использование разного количества уровней в разных ветвях дерева (см. пример). Также некоторые элементы могут не входить ни в один раздел, то есть принадлежать непосредственно корню инфоблока.

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

Фасетное упорядочивание элементов инфоблоков

В некоторых случаях необходимо классифицировать элементы инфоблоков более чем по одному признаку. Например, статьи можно классифицировать не только по дате публикации, но и по тематике. В таких случаях у элементов инфоблока свойство «Родитель» становится множественным.

  • Корень инфоблока

    • Даты публикации

      • 2006 год

        • Январь

          • «О вкусной и здоровой пище»
          • «Основы сайтостроения»
        • Февраль

          • «Введение в Битрикс»
      • 2007 год

        • «Использование блендера для приготовления коктейлей»
      • Дата неизвестна

        • «Управление сайтом»
    • Тематики

      • Web-технологии
        • «Основы сайтостроения»
        • «Иерархическое упорядочивание элементов инфоблоков»
        • «Введение в Битрикс»
        • «Управление сайтом»
      • Кулинарные изыски

        • «О вкусной и здоровой пище»
        • «Использование блендера для приготовления коктейлей»

Обратите внимание, что элементы при такой структуре не дублируются, подобно тому, как при создании ярлыка в Windows не дублируются файлы. Однако если в Windows файл физически находится в какой-то папке, а остальные ярлыки - лишь ссылки на него, то в инфоблоке все местоположения равноправны. Так, например, можно с одинаковой достоверностью сказать, что элемент «Основы сайтостроения» находится в разделе «Даты публикации \ 2006 год \ Январь» и в разделе «Тематики \ Web-технологии».

Плюсы и минусы упорядочивания элементов по разделам

Упорядочивание элементов инфоблоков по разделам может быть очень удобным для навигации по инфоблоку в административном интерфейсе. Фасетное упорядочивание делает навигацию ещё более удобной.

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

Минус заключается в невозможности или крайнем неудобстве работать с отдельно именно с разделами. Так, например, если помимо инфоблока «Статьи» существует инфоблок «Книги», то велика вероятность, что его элементы также будут нуждаться в классификации по дате публикации и по тематикам. В этом случае придётся ещё раз создавать такую же структуру разделов. Также весьма непросто будет вывести, например, список всех материалов (статей и книг) по одной тематике, упорядочив их по дате публикации. Также практически невозможно будет вывести общий рубрикатор тематик в меню сайта.

В таком случае следует завести отдельный инфоблок «Тематики» и добавить в инфоблоки «Книги» и «Статьи» свойство ссылочного типа «Тематика», а также свойство «ДатаПубликации» типа «Дата». Навигацию в административном интерфейсе тогда будет удобнее осуществлять при помощи установки фильтров по этим свойствам.

Группировка инфоблоков

В Битриксе есть возможность объединять инфоблоки в группы. Так, например, можно объединить инфоблоки «Статьи» и «Книги» в группу «Материалы». В этом случае Битрикс предписывает называть «Материалы» типом инфоблоков.

Тип инфоблока - это лишь группировочная сущность, облегчающая работу со списком инфоблоков в административном интерфейсе и через API.

Модули

Продукт «1С-Битрикс: Управление сайтом» как Фреймворк представляет собой набор программных модулей, содержащих классы для выполнения специализированных действий. Состав модулей в разных вариантах поставки продукта может отличаться.

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

Пример модуля - это модуль инфоблоков, позволяющий осуществлять выборки, изменять информацию в инфоблоках и т.п.

Компоненты

Основные сведения

Компоненты - это программные модули, предназначенные для извлечения информации из инфоблоков и других источников и преобразования её в HTML-код для отображения в виде фрагментов web-страниц.

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

Компоненты состоят из:

  • файла компоненты (component.php);
  • файла параметров компоненты (.parameters.php);
  • папки с шаблонами вывода;
  • папки локализаций;
  • любых дополнительных файлов и папок.

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

Компоненты могут быть простыми и комплексными. Простая компонента реализует вывод только на одну конкретную страницу, доступную под конкретным URL. Комплексная же компонента заменяет собой набор простых компонент. Например, вывод списка новостей и полного текста новости можно оформить двумя раздельными простыми компонентами, а можно - одной комплексной. Во втором случае компонента будет смотреть, например, на QueryString, и выводить список новостей с ссылками на полные тексты, автоматически сформированными таким образом, что при переходе по такой ссылке компонента будет переходить в режим вывода полного текста новости.

Также компоненты могут быть оформлены по обычному стандарту или по стандарту 2.0. Обычный стандарт в данное время устарел (хоть и продолжает поддерживаться), поэтому Битрикс настоятельно рекомендует при разработке использовать только компоненты 2.0.

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

Шаблоны вывода компонент

Каждая компонента имеет как минимум один шаблон (по умолчанию он называется .default). Шаблон преобразует данные, подготовленные компонентой, непосредственно в HTML-код. При включении компоненты в страницу сайта администратор настраивает, какой именно шаблон вывода будет использоваться в данном конкретном случае.

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

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

Заполненные параметры шаблона объединяются в общий массив с параметрами компоненты и становятся доступными как из файла компоненты, так и из файла шаблона.

Папки локализаций

Компоненты и их шаблоны поддерживают возможность вывода пользовательских сообщений на различных языках. Так, например, если компонента выводит содержимое инфоблока, это содержимое может понадобиться предварить строковой константой, например, «Здесь вы видите содержимое инфоблока». Пользователь же может перейти, например, в англоязычную версию сайта - и в этом случае эта константа может быть для него автоматически выведена на английском языке.

Для реализации этой функции при выводе строковых констант выводится не сама константа, а вызывается спецфункция, а в качестве аргумента ей передаётся идентификатор этой константы.

Для каждой языковой версии создаётся папка с названием языка (например, ru, en и т.п.). В ней создаются файлы с теми же именами, что и файлы, из которых происходит вызов спецфункции. В этих файлах находятся массивы, ключами для которых являются идентификаторы констант, а значениями - сами константы, переведенными на соответствующий язык.

Папки локализаций создаются отдельно для компонент и для каждого из шаблонов.

Размещение компоненты на web-странице

Удобнее всего размещать компоненты на странице при помощи встроенного визуального редактора Битрикса (см. рисунок). Для этого необходимо открыть панель компонент (1), выбрать нужную компоненту (2) и перетащить её значок в нужное место страницы (3).

После выбора шаблона (4), через который будет осуществляться вывод результатов работы компоненты на данной странице, будет доступен список параметров (5), состоящий из параметров компоненты и параметров выбранного шаблона.

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

Размещение компоненты Bitrix на web-странице

Формирование web-страницы

Параметры компонента и шаблона доступны из программных модулей компоненты и шаблона как массив $arParams. Результатом работы программного модуля компоненты является массив $arResult, подаваемый на вход шаблона компоненты. Результирующий HTML-код выводится обычным оператором echo на поток (при этом он встраивается в нужное место страницы).

Формирование web-страницы в «1С-Битрикс: Управление сайтом»

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

Политика кэширования

Важным отличием Битрикса от Drupal является принцип кэширования страниц. Так, в Drupal производится кэширование всей страницы, доступной по данному URL, целиком. Соответственно, если пользователь в данный момент залогинен на сайте, то на странице, скорее всего, присутствует некоторая персонализированная информация (например, его логин). Стало быть, кэширование страницы в этом случае навозможно в принципе.

Битрикс же производит кэширование на уровне компонент, причём кэширование может быть следующих видов:

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

Вывод, например, логина пользователя производит компонента с отключённым кэшированием, тогда как вывод более статичной информации (например, списка новостей) производит компонента с включённым кэшированием.

Таким образом, Битрикс предоставляет гораздо более гибкую и эффективную политику кэширования, чем Drupal.

Заключение

Продукт «1С-Битрикс: Управление сайтом» - это мощный инструмент для разработки сайтов практически любой сложности, созданный с учётом опыта работы сайтов самого разного профиля. Это - профессиональный инструмент, который по многим параметрам функциональнее и эффективнее бесплатных open source-аналогов, таких, как CMS Drupal.

Продукт постоянно развивается, отлично документирован, позволяет очень быстро научиться им пользоваться и разрабатывать на его основе web-сайты.

Disclaimer

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

Авторов статьи не раз обвиняли в том, что она заказная, проплаченная и т.д. Доказывать, что мы не верблюды, не имеем ни возможности, ни особого желания.

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

Нам указывали на то, что мы просто не разобрались в преимуществах Drupal. Да, это так, именно поэтому мы предпочли CMS со сравнимой функциональностью, разобраться с которой оказалось намного проще. Собственно, сокращение «курвы вхождения» составляет львиную долю потребительской ценности (и стоимости) Битрикса.

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

Изначально задача сравнения CMS не ставилась вообще, просто было желание продемонстрировать, как на Битриксе без усилий можно сделать некоторое из того, для чего в Drupal придётся попотеть. Именно поэтому о достоинствах Drupal в статье ничего нет. Уважаемые пользователи Drupal, вы всё о них знаете, а остальные читатели смогут почитать о них в ваших статьях.

В завершение хочется привести ссылку, найденную на сайте Drupal-Россия. Думаем, этот материал также поможет оценить преимущества и недостатки внедрения каждой из CMS в своём конкретном случае. Однако тоже следует иметь в виду, что помимо чтения статей, следует попробовать реализовать один и тот же важный для вас тестовый функционал на обеих платформах и сделать собственный вывод.

P.S. Поводов для религиозных войн в IT-сфере и так предостаточно. Поэтому не хочется, чтобы эта статья воспринималась как очередной пост вроде «ATI или nVidia: выбор профессионалов» или «Windows и *Nix: полигон для мордобития».