Матвей Земсков

Заметки веб-мастера

Суббота, 21 апреля 2018 16:10

1С-Битрикс - создаем мастер создания сайта

Оцените материал
(32 голосов)

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

Информации в нем достаточно, но в процессе изучения этого курса мне захотелось выделить важные моменты, которые я опишу ниже. В итоге получится небольшой конспект по материалам курса. Для примера я решил создать мастер для создания сайта по подготовке к экзамену №1, который основан на курсе академии Битрикс «Интеграция дизайна и настройка платформы».

Файлы с версткой страниц и элементами шаблона сайта я скачал из уроков указанного курса. После прохождения всех уроков и выполнения заданий у меня получился готовый сайт. На его основе я и создал свой мастер установки. Результат моей работы доступен в репозитории GitHub. Вы можете разработать мастер на основе какого-нибудь своего готового сайта. Главное, чтобы у вас был готовый сайт, мастер установки которого вы будете создавать.

Давайте приступим.

Шаг 1

Установим CMS «1С-Битрикс». Для нашей задачи будет нужна редакция «Стандарт».

Свой мастер будем разрабатывать на основе мастера создания корпоративного сайта производственной компании, который расположен в папке /bitrix/modules/bitrix.sitecorporate/install/wizards/bitrix/corp_furniture.

Создаем в папке /bitrix/wizards/bitrix/ папку своего мастера (например, exam_design_integration – далее корневая папка мастера). Можно использовать свое пространство имен: создать новую папку в /bitrix/wizards/. Например, я бы назвал ее mattweb.

На данном шаге нужно определиться с кодировкой файлов вашего мастера. Есть 2 варианта: windows-1251 и utf-8. Выбор кодировки зависит от того, собираетесь ли вы размещать свое решение на маркетплейсе Битрикса. Если да, то файлы должны быть в кодировке windows-1251. В процессе установки их кодировка будет преобразована в кодировку сайта.

Шаг 2

Добавляем в корневую папку мастера 2 файла .description.php и wizard.php. В файле .description.php хранится название, описание, версия мастера, а также порядок вызова шагов мастера.

В файле wizard.php код самого мастера. Подробнее о нем в шаге 8.

Также создаем папку lang, в ней папку ru. В этой папке будут располагаться языковые файлы с переводами фраз, которые используются в файлах .description.php и wizard.php.

Вы можете получить более детальную информацию о файлах .description.php() и wizard.php в курсе «Маркетплейс Bitrix Framework».

Шаг 3

В корневой папке мастера создаем папку images в ней папку ru. В нее помещаем изображения, которые будут использоваться при работе мастера. Список файлов можно посмотреть тут

Шаг 4

Переходим к созданию шаблонов. В корневой папке мастера создаем папку site в ней templates.

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

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

Обращаю внимание на следующий важный момент: в случае, если в файлах шаблонов вызываются какие-нибудь компоненты Битрикса, в которых указаны ИД инфоблоков, нужно заменить их на метки следующего вида #ИМЯ_МЕТКИ_ИНФОБЛОКА#. Эти метки в системе именуются макросами.

Например, на сайте, который должен получиться после установки, среди других имеются инфоблоки: Новости (ID=1), Слайдер (ID=5), Отзывы (ID=4). В шаблоне сайта находим ID этих инфоблоков и заменяем их на #NEWS_IBLOCK_ID#, #SLIDER_IBLOCK_ID# и #REVIEWS_IBLOCK_ID#.

Шаг 5

В папке site создаем папку public. В нее копируем все папки и файлы публичной части сайта. Файл index.php (главная страница сайта) переименовываем в _index.php. Если этого не сделать, то при установке на последнем шаге мастер отработает некорректно. Просматриваем все файлы публичной части и заменяем в вызовах компонентов ИД инфоблоков на макросы (#маркеры#). В файлах публичной части заменяем в путях к картинкам / на #SITE_DIR#. Например: src=”#SITE_DIR#images/company.jpg”.

Шаг 6

В корневой папке мастера создаем папку scripts. В нее копируем файлы script.js, utils.php – в них находятся функции, которые используются в других файлах мастера, например, при копировании файлов публичной части или создании шаблона сайта.

Шаг 7

В папке site создаем папку services. В нее добавляем файл .services.php, в котором размещаем массив $arServices с описанием порядка запуска файлов при установке сайта. Массив состоит из 2 массивов, в которых описываются отдельно порядок установки файлов и инфоблоков. В первом $arServices[‘main’][‘STAGES’] перечислены по порядку файлы которые будут запускаться при установке. Эти файлы создают на новом сайте файловую структуру – копируют файлы, создают шаблоны и группы пользователей. Во втором массиве $arServices[‘iblock’][‘STAGES’] перечислены файлы, которые создают типы инфоблоков, сами инфоблоки, а также наполняют из содержимым.

В папке services нужно создать 2 папки для размещения в них файлов, описанных в массиве $arServices. Они будут называться также как элементы массива: main и iblock.

В моем случае папке main находятся следующие файлы:

  • files.php – код копирования файлов публичной части;
  • template.php – код установки шаблона сайта;
  • group.php – код создания групп пользователей сайта – устанавливаются права на файлы и папки публичной части сайта;
  • settings.php – код для установки определенных настроек модулей сайта;

Также в ней еще может располагаться файл theme.php – в случае если на сайте используются цветовые темы в шаблоне.

Вы можете добавлять свои файлы, которые будут запускаться в процессе установки. Например, для создания почтовых событий (events.php) и их шаблонов или для создания HL-блоков. Главное не забыть добавить их в массив $arServices файла .services.php.

Языковые файлы, используемые в указанных выше файлах находятся в папке lang.

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

В моем случае в папке iblock я разместил следующие файлы:

  • types.php – создание типов инфоблоков сайта.

    Копируем соответствующий файл и заменяем элементы массива $arTypes на свои. Например, у меня в массиве элементы с ID content, news, products, vacancies. Так выглядит описание типа инфоблоков «Вакансии»:

    PHP

    $arTypes = Array(
    	Array(
    		"ID" => "vacancies",
    		"SECTIONS" => "Y",
    		"IN_RSS" => "N",
    		"SORT" => 200,
    		"LANG" => Array(),
    	),
    );
    

    Не забудьте создать языкове файлы для файла types.php в папке /site/services/iblock/lang/. Причем необходимо создать их для обоих языков: ru и en. Если не создать языковой файл для английского языка, то в процессе установки все инфоблоки будут размещение в типе инфоблоков 1c_catalog

  • vacancies.php – создание инфоблока «Вакансии».

    Его и остальные файлы из этой папки можно создать на основе какого-либо аналогичного файла из мастера создания корпоративного сайта производственной компании, например, news.php;

    Копируем содержимое файла news.php в vacancies.php и немного редактируем его.

    Во-первых, заменяем значение переменных $iblockXMLFile, $iblockCode и $iblockType в которых хранятся данные об инфоблоке на свои.

    Во-вторых, заменяем значение параметра в вызове метода WizardServices::ImportIBlockFromXML (строка 34) на свой. В моем случае, значением будет "furniture_vacancies".

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

    PHP

    // заменяем макросы в публичной части сайта
    CWizardUtil::ReplaceMacros(WIZARD_SITE_PATH."/include/news.php", array("NEWS_IBLOCK_ID" => $iblockID));
    CWizardUtil::ReplaceMacros(WIZARD_SITE_PATH."/news/index.php", array("NEWS_IBLOCK_ID" => $iblockID));
    
    $bitrixTemplateDir = $_SERVER["DOCUMENT_ROOT"].BX_PERSONAL_ROOT."/templates/";
    // заменяем макросы в файле header.php шаблона main
    CWizardUtil::ReplaceMacros($bitrixTemplateDir."main/header.php", array("NEWS_IBLOCK_ID" => $iblockID));
    

    С остальными файлами проделываем аналогичные действия.

  • news.php – создание инфоблока «Новости»;
  • products.php – создание инфоблока «Каталог»;
  • promos.php – создание инфоблока «Акции»;
  • reviews.php – создание инфоблока «Отзывы»;
  • slider.php – создание инфоблока «Слайдер»;

Для файлов импорта этих инфоблоков нужно создать определенные папки. В текущей папке (iblock) создаем папку xml, а в ней папку ru. В нее копируем файлы импорта инфоблоков в формате xml, которые вам нужно будет создать в админке (Контент→Инфоблоки→Экспорт→XML).

В созданных при экспорте xml-файлах нужно поменять цифровые ID на текстовые. Например, в файле с новостями в разделе <Классификатор> указан <Ид>5</Ид>, его нужно заменить на news. Это нужно сделать также в тегах <Ид></Ид> и <ИдКлассификатора></ИдКлассификатора> раздела <Каталог>.

Это необходимо сделать для того, чтобы при установке решения в случае многосайтовости, не испортились существующие инфоблоки с совпадающими идентификаторами. В процессе установки строковые ID из xml-файла у инфоблоков будут заменены числовыми уникальными идентификаторами.

Шаг 7

Переходим к более детальному рассмотрению файла wizard.php, о котором упоминалось в шаге 2.

Код мастера состоит из шагов. Каждый шаг – это PHP-класс, в котором описаны методы: InitStep(), ShowStep(), OnPostForm().

В самом начале файла wizard.php подключается файл /bitrix/modules/main/install/wizard_sol/wizard.php, в нем находится шаблон стандартного мастера установки. Все классы из нашего wizard.php будут наследоваться от соответствующих классов из стандартного мастера установки.

Свой файл также будем создавать на основе файла wizard.php мастера создания корпоративного сайта производственной компании. Откроем его в редакторе для наглядности.

Первый шаг мастера – выбор сайта (класс SelectSiteStep)

Хочу обратить внимание читателя на то, что этот шаг запускается не всегда. Его можно увидеть, если запустить мастер установки из админки сайта (Настройки→Настройки продукта→Список мастеров).

Код этого шага мастера можно скопировать и изменить в нем только значение $wizard->solutionName на свое (функция InitStep()).

Второй шаг мастера – выбор шаблона сайта (класс SelectTemplateStep).

В мастере создания корпоративного сайта производственной компании этот класс не изменяется – используется код из стандартного мастера установки (wizard_sol).

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

PHP

function InitStep()
  {
	parent::InitStep();
	// следующий шаг - настройки сайта (пропускаем выбор тему - так как ее нет)
	$this->SetNextStep("site_settings");
}

Далее изменяем функцию ShowStep(). Шаблонов сайта у нас несколько, но так как они должны применяться к определенным разделам, нам не нужно показывать их все. Показываем только один – основной (main), который будет «прикреплен» к главной странице сайта.

Копируем код функции из стандартного мастера установки (wizard_sol). Находим в нем строку if (empty($arTemplates)) return; вставляем после нее следующий код:

PHP

// устанавливаем шаблон по-умолчанию
$wizard->SetVar("templateID", "main");

Далее находим цикл foreach ($arTemplates as $templateID => $arTemplate). Первой строкой в нем добавляем следующий код:

PHP

// выводим только один шаблон, выбранный по-умолчанию
// остальные не показываем
if($templateID !== $defaultTemplateID) continue;

Третий шаг мастера – Выбор цветовой схемы шаблона сайта (класс SelectThemeStep).

Этот шаг я пропускаю. Если вам необходимо обеспечить выбор темы в вашем мастере, можно ознакомиться с классом SelectThemeStep в стандартном мастере установки (wizard_sol).

Четвертый шаг мастера – настройки для сайта (класс SiteSettingsStep).

Здесь заменяем пути к файлам, в которых хранятся логотип, слоган и мета-данные сайта. Все это меняется в функции InitStep(). Копируем код функции, находим в нем строку, где определяется путь к логотипу сайта (переменная $siteLogo) и заменяем ее на следующую:

PHP

$siteLogo = "/bitrix/wizards/bitrix/exam_design_integration/site/templates/main/lang/".LANGUAGE_ID."/logo.gif";

Далее изменяем массив в методе $wizard->SetDefaultVars. В моем случае будет следующий код:

PHP

$wizard->SetDefaultVars(
			Array(
				"siteLogo" => $siteLogo,
				"siteSlogan" => $this-> GetFileContent(WIZARD_SITE_PATH."include/company_slogan.php", GetMessage("WIZ_COMPANY_SLOGAN_DEF")),
				"siteCopy" => $this-> GetFileContent(WIZARD_SITE_PATH."include/copyright.php", GetMessage("WIZ_COMPANY_COPY_DEF")),
				"siteMetaDescription" => GetMessage("wiz_site_desc"),
				"siteMetaKeywords" => GetMessage("wiz_keywords"), 
			)
		);

Пятый шаг мастера – Установка демо-данных (класс DataInstallStep).

Код класса DataInstallStep копируем из мастера создания корпоративного сайта производственной компании. Ничего в нем не меняем.

Шестой шаг мастера – заключительный (класс FinishStep).

Также копируем из мастера создания корпоративного сайта производственной компании и ничего не меняем в нем.

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

Напомню, что мастер установки можно запустить 2 способами: с кнопки «Протестировать новое решение» на панели управления в публичной части и в разделе «Настройки» административной части (Настройки→Настройки продукта→Список мастеров).

Прочитано 11861 раз
Мои услуги

Предлагаю следующие услуги:

  • Верстка шаблона сайта из дизайн-макета для CMS «1С-Битрикс Управление сайтом» и CMS “Joomla”
  • Создание форм различной сложности (обратная связь, анкеты и тп) для указанных CMS
  • Настройка и кастомизация компонентов и модулей для указанных CMS
  • Доработка модулей и компонентов для указанных CMS, добавление нестандартного функционала
  • Разработка лендингов (landing-pages)

По все вопросам обращайтесь через форму обратной связи

Скачать

Предлагаю вашему вниманию:

Наверх