Введение в Битрикс

32
Введение в Битрикс Interlabs 23 мая 2013 1 / 32

Post on 11-Nov-2014

1.737 views

Category:

Documents


17 download

DESCRIPTION

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

TRANSCRIPT

Page 1: Введение в Битрикс

Введение в Битрикс

Interlabs

23 мая 2013

1 / 32

Page 2: Введение в Битрикс

О чем речь

Как перестать бояться и ////////////полюбитьиспользовать Битрикс.

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

претензий на большой опыт.

2 / 32

Page 3: Введение в Битрикс

Файловая структураИз коробки — все в одной куче:

• кода и данные сайта;• код CMS и код сайта;• контент сайта и файлы CMS.

Огромное количество файлов — проблемы при использованииконтроля версий.

Необходимо разделить файлы CMS и сайта.

3 / 32

Page 4: Введение в Битрикс

Альтернативная структураПриложение DOC_ROOT

app/ www/components/ bitrix -> ../lib/bitrixphp_interface/ bitrix_app/templates/ cache -> ../../var/cachedefault/ html_pages -> ../../var/html_pages... managed_cache -> ../../var/managed_cacheindex.php php_interface -> ../../app/php_interfaceurlrewrite.php stack_cache -> ../../var/stack_cache

templates -> ../../app/templates/etc index.php -> ../app/index.php/lib urlrewrite.php -> ../app/urlrewrite.php/var upload/ -> ../var/upload

Также используем BX_PERSONAL_ROOT, подробнее — в wiki.4 / 32

Page 5: Введение в Битрикс

Файловая CMS• базовая структура сайта соответствует структуре файлов врабочем каталоге, страница = файл.

• код CMS и административные режимы вынесены вподкаталог bitrix, страницы явно подключает код CMS:

<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");$APPLICATION->SetTitle("1С-Битрикс: Управление сайтом 7.0"); ?>

Тело документа. Содержательная часть.

<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>

• cодержимое файла может быть произвольным.• папка (раздел) = вложенный ресурс в URL.

5 / 32

Page 6: Введение в Битрикс

Общая структура сайтаПолностью определяется файловой структурой, поэтому ееправильный выбор критически важен:

• базовая структура адресов страниц;• свойства отдельных разделов и их наследование;• хлебные крошки;• вложенные меню.

Динамический контент всегда расширяет статический, заранеепредусматриваем это:

http : //ottobock − shop.ru /medical− line︸ ︷︷ ︸статика, файл

/knee/50K13/︸ ︷︷ ︸динамика, компонент

6 / 32

Page 7: Введение в Битрикс

Статические разделы• статический раздел — папка в контентной части;• файл index.php — отображается при запросе к папке;• скрытые файлы для хранения дополнительных свойств.

http://site.com/about/company/about/company/

.access.php - права доступа к папке;

.section.php - настройки раздела;

.submenu.menu.php — пункты вложенного меню;index.php - страница по умолчанию.

Большая часть статики — папки со страницами по умолчанию.

7 / 32

Page 8: Введение в Битрикс

Свойства страниц и разделов• для разделов хранятся в файле .section внутри папки, длястраниц — в файле страницы.

• свойства разделов наследуются вложенными папками.• набор свойств по умолчанию:

Админ: Настройки → Настройки модулей → Управление структурой

Настройки для сайтов. Типы свойств.

Свойства могут быть получены в коде страницы, шаблона,компонента:

$APPLICATION->GetProperty("name");

8 / 32

Page 9: Введение в Битрикс

Свойства раздела: примерНекоторые разделы показываются в темной цветовой схеме, внекоторых разделах показывается дополнительная колонка:

• создаем свойства color_scheme и sidebar;• прописываем их в нужных разделах;• вложенные разделы наследуют свойства;

В шаблоне:

$sidebar = $APPLICATION->GetProperty(’sidebar’);$color_scheme = $APPLICATION->GetPropert(’color_scheme’);

if ($sidebar) {$APPLICATION->IncludeComponent("bitrix:catalog.section.list",...

9 / 32

Page 10: Введение в Битрикс

СтраницыСтраница = PHP-файл, включающий в себя:

• пролог и эпилог (показывается не во всех режимах);• HTML-текст страницы + произвольный PHP-код;• вызов компонент;• вызов включаемых блоков.

Адрес страницы определяется путем к файлу, для статики поумолчанию заводим папку со страницей по умолчанию.

Рекомендуется вносить все изменения через админ, меньшеошибок и значительно проще работать с компонентами.

10 / 32

Page 11: Введение в Битрикс

Компоненты на страницах• готовые повторно используемые модули• как правило, используют базу данных (динамика)добавляются на страницу с помощью стандартного вызова:

<?$APPLICATION->IncludeComponent("bitrix:news.list","faq",Array(

"DISPLAY_DATE" => "N","DISPLAY_NAME" => "Y",...

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

11 / 32

Page 12: Введение в Битрикс

Включаемые областиОтдельно редактируемая контентная область, выводимая поопределенному условию:

• включаемая область страницы: выводится на странице,файл с суффиксом _inc.php в том же каталоге;

• включаемая область раздела: выводится на всех страницахраздела, файл sect_inc.php в каталоге папки;

• включаемый файл: произвольный файл.

Подключение: CMain::IncludeFile1 или вызов компонентаbitrix:main.include.

1http://dev.1c-bitrix.ru/api_help/main/reference/cmain/includefile.php12 / 32

Page 13: Введение в Битрикс

Использование областейВарианты использования:

• редактируемая контактная информация в шапке сайта:включаемый файл

• дополнительная колонка с контекстными блоками раздела(новости на главной, группы каталога товаров длякаталога): включаемая область раздела с рекурсивнымпоиском

• дополнительный контент для страницы за пределамиосновной контентной области: включаемая областьстраницы

13 / 32

Page 14: Введение в Битрикс

МенюРазличные виды меню на сайте — «типы» меню (основное вшапке, дополнительное слева, вспомогательное внизу и т.д.):

Админ: Настройки → Настройки модулей → Управление структурой

Настройки для сайтов. Типы меню.

Физически — php-файл в папке раздела:

статическое: .<имя-типа-меню>.menu.php, главное меню;динамическое .<имя-типа-меню>.menu_ext.php, группы

товаров.

Внешний вид меню определяется выбором шаблона привызове компонента.

14 / 32

Page 15: Введение в Битрикс

Меню: продолжение• вложенные разделы наследуют меню родительских, если уних нет своего собственного;

• чтобы отменить родительское меню, нужнопереопределить его без пунктов.

• для пунктов меню можно указывать дополнительныепараметры, которые можно использовать при выводе, поумолчанию один параметр;

• в файлах menu_ext.php можно использовать вызовспециализированных компонент, например,bitrix:menu.sections для формирования из инфоблока.

Руководство по использованию компонентов меню2

2http://bit.ly/18jOv9P15 / 32

Page 16: Введение в Битрикс

Меню групп каталога<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();$aMenuLinks = array_merge(

$aMenuLinks,$GLOBALS[’APPLICATION’]->IncludeComponent("bitrix:menu.sections","",Array(

"IS_SEF" => "Y","SEF_BASE_URL" => "/catalog/medical-line/","SECTION_PAGE_URL" => "#SECTION_CODE#/","DETAIL_PAGE_URL" => "#SECTION_CODE#/#ELEMENT_CODE#","IBLOCK_TYPE" => "catalog","IBLOCK_ID" => "1","DEPTH_LEVEL" => "1","CACHE_TYPE" => "A","CACHE_TIME" => "36000000"

)));?>

16 / 32

Page 17: Введение в Битрикс

Виды компонентовПростые

Блок страницы, выводящийдинамическую информацию.

Пример: последние десятьновостей на главной странице.

Комплексные

Динамический раздел изнескольких страниц.

Пример: раздел «Новости»:список + страницы новостей.

http : //ottobock − shop.ru /medical− line︸ ︷︷ ︸статика

/knee/50K13/︸ ︷︷ ︸комплексный компонент

Залог успеха — максимальноe использованиестандартных компонентов.

17 / 32

Page 18: Введение в Битрикс

Свойства компонентов• компоненты стараются разделять логику и представление;• комплексные компоненты как правило используют наборболее простых, которые могут быть полезны на отдельныхстраницах;

• комплексный компонент размещается на статическойстранице и использует вложенные адреса для своихстраниц, структура статики влияет на адреса динамики;

• при выводе компонентов задействуются механизмыкеширования.

В идеале код страницы должен состоять только из вызововкомпонентов, нужно минимизировать PHP-код внутристраницы.

18 / 32

Page 19: Введение в Битрикс

Компоненты: реализацияИмя: bitrix︸ ︷︷ ︸

namespace

: catalog.section.list︸ ︷︷ ︸имя

/bitrix/components/bitrix/catalog.section.listimages/ - картинки и т.д.install/ - скрипты установкиlang/ - языковые сообщения, файлы помощиtemplates/ - шаблоны

.default/ - шаблоны по умолчаниюtemplate.php - шаблон по умолчанию

.description.php - описание компонента

.parameters.php - описание параметров компонентаcomponent.php - контроллер компонента

19 / 32

Page 20: Введение в Битрикс

Компоненты: контроллер

• проверяет наличие кеша StartResultCache(), все сам!• обращается к источнику данных (инфоблоки);• формирует массив данных для представления $arResult;• загружает шаблон $this->IncludeComponentTemplate().

Общая картина: страшно, много дублирующегося спагетти-кода.

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

20 / 32

Page 21: Введение в Битрикс

Компоненты: шаблон• .default — по умолчанию, можно реализовыватьальтернативные шаблоны и выбирать при размещении.

• шаблон — HTML + PHP, $arResult — данные;• шаблон сайта может переопределять шаблоны компонент.• если в папке шаблона есть result_modifier.php, в немможно модифицировать $arResult без модификациисамого компонента;

• result_modifier.php запускается если шаблон некешируется, component_epilog.php выполняется всегда.

Документация по компонентам3

3http://bit.ly/18jN6zY21 / 32

Page 22: Введение в Битрикс

Разработка компонентов

• всегда создаем компоненты в собственном пространствеимен;

• модифицируем существующие компоненты путемкопирования и последующей модификации, иначе теряемвозможность обновлений;

• при модификации комплексных компонентов следим,какие простые компоненты они вызывают, принеобходимости переопределяем;

• с наследованием и вообще ООП все плохо.

22 / 32

Page 23: Введение в Битрикс

Выполнение компонента

23 / 32

Page 24: Введение в Битрикс

ШаблоныШаблон дизайна определяет общий вид страниц сайта. Оченьпримитивная система, сэндвич из трех частей:

/templates/<имя-шаблона>components/ - переопределенные шаблоны компонентов;images/ - картинкиinclude_areas/ - включаемые файлы, в т.ч. для областей;page_templates/ - шаблоны страни и редактируемых областей;snippets/ - сниппеты;.styles.php - стили для визуального редактора;style.css - стили для контента и включаемых областей;.template_styles.css - стили для шаблона;header.php - шапка;footer.php - подвал;description.php - метаинформация для админа.

24 / 32

Page 25: Введение в Битрикс

Обработка адресов

Есть внутренний аналог mod_rewrite: urlrewrite.php4.

<?$arUrlRewrite = array(

array("CONDITION" => "#^/gallery/#","RULE" => "","ID" => "bitrix:photo","PATH" => "/max/images/index.php",

),

Для компонента можно указать привязку к адресу, используяпараметр компонента SEF_MODE.

4http://bit.ly/gAIY1R25 / 32

Page 26: Введение в Битрикс

Инфоблоки

База данных в базе данных:

• базовая абстракция для работы с БД;• произвольный набор полей без необходимости менятьструктуру базы;

• сложная структура таблиц, затрудняющая работунепосредственно с базой;

• страшный API;• невысокая производительность.

26 / 32

Page 27: Введение в Битрикс

Терминология инфоблоков

• каждый инфоблок принадлежит определенному типу суникальным идентификатором;

Админ: Контент → Инфоблоки → Типы инфоблоков

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

• элемент инфоблока — собственно запись, набор значенийполей.

27 / 32

Page 28: Введение в Битрикс

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

До версии 12.05 всегда один уровень вложенности:

http://site.ru/catalog/sectionC/element.php

После 12.05 — произвольная вложенность для компонентовcatalog, news, photo (SECTION_CODE_PATH):

http://site.ru/catalog/sectionA/sectionB/sectionC/element.php

28 / 32

Page 29: Введение в Битрикс

API инфоблоков$BID = 1; //ID инфоблока$SID = 2; //ID секции$result = CIBlockElement::GetList(

array("ID"=>"DESC"),array("IBLOCK_ID"=>IntVal($BID),

"ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y","SECTION_ID"=>$SID),

false,array("nPageSize"=>15),array("ID", "NAME", "PREVIEW_PICTURE", "PREVIEW_TEXT",

"PROPERTY_UF_USER_FIELD"));

while($element = $result->GetNextElement()) {$arItem[]= $element->GetFields();

}

Документация по API инфоблоков5

5bit.ly/10oplBM29 / 32

Page 30: Введение в Битрикс

Каталог товаровМаксимально используем стандартное решение, учитываем еговозможности при составлении ТЗ.

• выполняем первоначальную настройку каталога: типы цен,типы плательщиков, свойства заказа;

• заводим типы инфоблоков, с поддержкой вложенныхадресов должно хватать одного типа;

• создаем разделы, определяем наборы полей;• определяемся с товарными позициями: цены в элементахкаталога или отдельные товарные предложения.

• вводим или импортируем первоначальный наборэлементов.

30 / 32

Page 31: Введение в Битрикс

Товары vs предложения

• предложения — разновидности одного товара сразличными ценами;

• отдельный тип инфоблока и отдельный инфоблок;• если есть варианты одного товара с одинаковой ценой,заводить предложения не надо;

• свойства товара можно передавать в заказ безиспользования товарных предложений;

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

31 / 32

Page 32: Введение в Битрикс

Общие рекомендации• максимально используйте готовый функционал, Битрикснедружественен к программисту;

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

• код, работающий с базой — внутри компонента,допускающего кеширование;

• собственные компоненты — в отдельном пространствеимен;

• никогда не модифицируйте код Битрикса, если нужно —копируйте компоненты;

32 / 32