вверх
29/07 2017
назад

Часть 7. Регистрация своих визуальных компонентов

Фактически, код компонентов у нас уже есть – это файлы

«/ix_guestbook/install/templates/ix_guestbook/index.php» и «/ix_guestbook/install/templates/ix_guestbook/edit_record.php»

Осталось только описать их таким образом, чтобы ядро БУС распознавало в них компоненты. Для этого нам надо создать файл

«/ix_guestbook/install/templates/ix_guestbook/.description.php»:

 

<?

IncludeTemplateLangFile(__FILE__);

$sSectionName = GetMessage("T_IX_GB_DESC_NAME");

$arTypes = Array();

if(CModule::IncludeModule("iblock")):

 

$db_iblock_type = CIBlockType::GetList(Array("SORT"=>"ASC"));

while($arRes = $db_iblock_type->Fetch())

        if($arIBType = CIBlockType::GetByIDLang($arRes["ID"], LANG))

                $arTypes[$arRes["ID"]] = $arIBType["NAME"];

 

$arIBlocks=Array();

$db_iblock = CIBlock::GetList(Array("SORT"=>"ASC"), Array("SITE_ID"=>$_REQUEST["site"]));

while($arRes = $db_iblock->Fetch())

        $arIBlocks[$arRes["ID"]] = $arRes["NAME"];

 

$arSorts = Array("ASC"=>GetMessage("T_IX_GB_DESC_ASC"), "DESC"=>GetMessage("T_IX_GB_DESC_DESC"));

$arSortFields = Array(

                "NAME"=>GetMessage("T_IX_GB_DESC_FNAME"),

                "ACTIVE_FROM"=>GetMessage("T_IX_GB_DESC_FACT"),

                "SORT"=>GetMessage("T_IX_GB_DESC_FSORT"),

                "TIMESTAMP_X"=>GetMessage("T_IX_GB_DESC_FTSAMP")

        );

 

$arSectSortFields = Array(

                "NAME"=>GetMessage("T_IX_GB_DESC_FNAME"),

                "SORT"=>GetMessage("T_IX_GB_DESC_FSORT"),

                "TIMESTAMP_X"=>GetMessage("T_IX_GB_DESC_FTSAMP")

        );

 

 

$arTemplateDescription =

  Array(

    ".separator" =>

       Array(

         "NAME"          => GetMessage("T_IX_GB_DESC_GB"),

         "DESCRIPTION"   => "",

         "SEPARATOR"     => "Y",

       ),

    "index.php" =>

       Array(

         "NAME"          => GetMessage("T_IX_GB_DESC_REC_LIST"),

         "DESCRIPTION"   => GetMessage("T_IX_GB_DESC_REC_LIST_DESC"),

         "ICON"          => "/bitrix/images/iblock/comp_list.gif",

         "PARAMS"        =>

            Array(

              "ID" => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBID"), "TYPE"=>"LIST", "VALUES"=>$arIBlocks, "DEFAULT"=>"", "MULTIPLE"=>"N", "ADDITIONAL_VALUES"=>"N"),

              "IBLOCK_TYPE" => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBTYPE"), "TYPE"=>"LIST", "VALUES"=>$arTypes, "DEFAULT"=>"guestbook", "MULTIPLE"=>"N", "ADDITIONAL_VALUES"=>"N"),

              "NEWS_COUNT"  => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBCNT"), "TYPE"=>"STRING", "DEFAULT"=>"5", "COLS"=>"3"),

              "SORT_BY1"    => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBORD1"), "TYPE"=>"LIST", "DEFAULT"=>"ACTIVE_FROM", "VALUES"=>$arSortFields, "ADDITIONAL_VALUES"=>"N"),

              "SORT_ORDER1" => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBBY1"), "TYPE"=>"LIST", "MULTIPLE"=>"N", "DEFAULT"=>"DESC", "VALUES"=>$arSorts, "ADDITIONAL_VALUES"=>"N"),

              "SORT_BY2"    => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBORD2"), "TYPE"=>"LIST", "DEFAULT"=>"SORT", "VALUES"=>$arSortFields, "ADDITIONAL_VALUES"=>"N"),

              "SORT_ORDER2" => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBBY2"), "TYPE"=>"LIST", "DEFAULT"=>"ASC", "VALUES"=>$arSorts, "ADDITIONAL_VALUES"=>"N"),

              "edit_url"    => Array("NAME"=>GetMessage("T_IX_GB_DESC_EDITURL"), "TYPE"=>"STRING", "DEFAULT"=>'={$APPLICATION->GetCurPage()}', "COLS"=>"20"),

              "return_url"  => Array("NAME"=>GetMessage("T_IX_GB_DESC_RETURNURL"), "TYPE"=>"STRING", "DEFAULT"=>'={$APPLICATION->GetCurPage()}', "COLS"=>"20")

            )

       ),

    "edit_record.php" =>

       Array(

         "NAME"          => GetMessage("T_IX_GB_DESC_EDIT"),

         "DESCRIPTION"   => GetMessage("T_IX_GB_DESC_EDIT_DESC"),

         "ICON"          => "/bitrix/images/iblock/comp_detail.gif",

         "PARAMS"        =>

            Array(

              "type" => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBTYPE"), "TYPE"=>"LIST", "VALUES"=>$arTypes, "DEFAULT"=>"guestbook", "MULTIPLE"=>"N", "ADDITIONAL_VALUES"=>"N"),

              "ID" => Array("NAME"=>GetMessage("T_IX_GB_DESC_ID"), "TYPE"=>"STRING", "DEFAULT"=>'={$ID}', "MULTIPLE"=>"N", "ADDITIONAL_VALUES"=>"N"),

              "IBLOCK_ID" => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBID"), "TYPE"=>"LIST", "VALUES"=>$arIBlocks, "DEFAULT"=>"", "MULTIPLE"=>"N", "ADDITIONAL_VALUES"=>"N"),

              "del_id" => Array("NAME"=>GetMessage("T_IX_GB_DESC_DEL_ID"), "TYPE"=>"STRING", "DEFAULT"=>'={$del_id}', "MULTIPLE"=>"N", "ADDITIONAL_VALUES"=>"N"),

              "return_url"  => Array("NAME"=>GetMessage("T_IX_GB_DESC_RETURNURL"), "TYPE"=>"STRING", "DEFAULT"=>'={$APPLICATION->GetCurPage()}', "COLS"=>"20")

            )

       )

  );

 

endif;

?>

Необходимые файлы со строковыми константами находятся в файле «/ix_guestbook/install/templates/lang/ru/ix_guestbook/.description.php»:

<?

$MESS ['T_IX_GB_DESC_NAME'] = "Гостевые книги";

$MESS ['T_IX_GB_DESC_ASC'] = "По возрастанию";

$MESS ['T_IX_GB_DESC_DESC'] = "По убыванию";

$MESS ['T_IX_GB_DESC_FNAME'] = "Название";

$MESS ['T_IX_GB_DESC_FACT'] = "Дата начала активности";

$MESS ['T_IX_GB_DESC_FSORT'] = "Сортировка";

$MESS ['T_IX_GB_DESC_FTSAMP'] = "Дата последнего изменения";

$MESS ['T_IX_GB_DESC_GB'] = "Гостевые книги";

$MESS ['T_IX_GB_DESC_REC_LIST'] = "Список записей";

$MESS ['T_IX_GB_DESC_REC_LIST_DESC'] = "Показывает список записей книги";

$MESS ['T_IX_GB_DESC_IBID'] = "Идентификатор информационного блока";

$MESS ['T_IX_GB_DESC_EDITURL'] = "URL для формы редактирования записи";

$MESS ['T_IX_GB_DESC_SAVEURL'] = "URL страницы для сохранения записи";

$MESS ['T_IX_GB_DESC_RETURNURL'] = "URL для возвращения к списку записей";

$MESS ['T_IX_GB_DESC_IBTYPE'] = "Тип информационных блоков";

$MESS ['T_IX_GB_DESC_IBSORT'] = "Поле для cортировки информационных блоков";

$MESS ['T_IX_GB_DESC_SORT'] = "Cортировка";

$MESS ['T_IX_GB_DESC_ID'] = "Идентификатор";

$MESS ['T_IX_GB_DESC_IBSORTBY'] = "Направление для сортировки информационных блоков";

$MESS ['T_IX_GB_DESC_IBCNT'] = "Количество записей на странице";

$MESS ['T_IX_GB_DESC_IBORD1'] = "Поле для первой сортировки записей";

$MESS ['T_IX_GB_DESC_IBBY1'] = "Направление для первой сортировки записей";

$MESS ['T_IX_GB_DESC_IBORD2'] = "Поле для второй сортировки записей";

$MESS ['T_IX_GB_DESC_IBBY2'] = "Направление для второй сортировки записей";

$MESS ['T_IX_GB_DESC_EDIT'] = "Добавить/Редактировать";

$MESS ['T_IX_GB_DESC_EDIT_DESC'] = "Форма для добавления или редактирования записи";

$MESS ['T_IX_GB_DESC_SAVE'] = "Сохранить/Удалить";

$MESS ['T_IX_GB_DESC_SAVE_DESC'] = "Страница для сохранения/удаления записи";

$MESS ['T_IX_GB_DESC_DEL_ID'] = "Идентификатор записи для удаления";

?>

Собственно регистрация компонентов заключается в заполнении массива $arTemplateDescription. Первый элемент массива служит в качестве разделителя, остальные представляют собой описания компонентов. Рассмотрим подробнее компонент «список записей книги»:

    "index.php" =>

       Array(

         "NAME"          => GetMessage("T_IX_GB_DESC_REC_LIST"),

         "DESCRIPTION"   => GetMessage("T_IX_GB_DESC_REC_LIST_DESC"),

         "ICON"          => "/bitrix/images/iblock/comp_list.gif",

         "PARAMS"        =>

            Array(

              "ID" => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBID"), "TYPE"=>"LIST", "VALUES"=>$arIBlocks, "DEFAULT"=>"", "MULTIPLE"=>"N", "ADDITIONAL_VALUES"=>"N"),

              "IBLOCK_TYPE" => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBTYPE"), "TYPE"=>"LIST", "VALUES"=>$arTypes, "DEFAULT"=>"guestbook", "MULTIPLE"=>"N", "ADDITIONAL_VALUES"=>"N"),

              "NEWS_COUNT"  => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBCNT"), "TYPE"=>"STRING", "DEFAULT"=>"5", "COLS"=>"3"),

              "SORT_BY1"    => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBORD1"), "TYPE"=>"LIST", "DEFAULT"=>"ACTIVE_FROM", "VALUES"=>$arSortFields, "ADDITIONAL_VALUES"=>"N"),

              "SORT_ORDER1" => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBBY1"), "TYPE"=>"LIST", "MULTIPLE"=>"N", "DEFAULT"=>"DESC", "VALUES"=>$arSorts, "ADDITIONAL_VALUES"=>"N"),

              "SORT_BY2"    => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBORD2"), "TYPE"=>"LIST", "DEFAULT"=>"SORT", "VALUES"=>$arSortFields, "ADDITIONAL_VALUES"=>"N"),

              "SORT_ORDER2" => Array("NAME"=>GetMessage("T_IX_GB_DESC_IBBY2"), "TYPE"=>"LIST", "DEFAULT"=>"ASC", "VALUES"=>$arSorts, "ADDITIONAL_VALUES"=>"N"),

              "edit_url"    => Array("NAME"=>GetMessage("T_IX_GB_DESC_EDITURL"), "TYPE"=>"STRING", "DEFAULT"=>'={$APPLICATION->GetCurPage()}', "COLS"=>"20"),

              "return_url"  => Array("NAME"=>GetMessage("T_IX_GB_DESC_RETURNURL"), "TYPE"=>"STRING", "DEFAULT"=>'={$APPLICATION->GetCurPage()}', "COLS"=>"20")

            )

       ),

Первые три параметра служат для описания компонента в HTML-редакторе. Последний параметр - массив PARAMS - описывает синтаксис вызова компонента и привязывает к свойствам компонента визуальные элементы, в которых пользователь сможет вводить значения.

Например, свойство $ID с идентификатором инфоблока гостевой книги, описывается как список ("TYPE"=>"LIST"), который заполняется названиями доступных инфоблоков ("VALUES"=>$arIBlocks) с запретом множественного выбора ("MULTIPLE"=>"N"). Обратите внимание на синтаксис вызова PHP кода в качестве значения параметра по умолчанию ("DEFAULT"):

"edit_url"    => Array("NAME"=>GetMessage("T_IX_GB_DESC_EDITURL"), "TYPE"=>"STRING", "DEFAULT"=>'={$APPLICATION->GetCurPage()}', "COLS"=>"20")

Мы можем добавлять неограниченное количество своих компонентов в данном файле, описывая их параметры, указывая их тип, значения и элементы редактирования. В результате HTML-редактор позволит нам вставлять при помощи механизма drag&drop код, аналогичный следующему:

<P><?$APPLICATION->IncludeFile("ix_guestbook/index.php", Array(

            "ID"     =>       "11",                                        // Идентификатор информационного блока

            "IBLOCK_TYPE"       =>       "guestbook",                            // Тип информационных блоков

            "NEWS_COUNT"      =>       "5",                              // Количество записей на странице

            "SORT_BY1"  =>       "ACTIVE_FROM",                // Поле для первой сортировки записей

            "SORT_ORDER1"      =>       "DESC",                                  // Направление для первой сортировки записей

            "SORT_BY2"  =>       "SORT",                                  // Поле для второй сортировки записей

            "SORT_ORDER2"      =>       "ASC",                        // Направление для второй сортировки записей

            "edit_url"          =>       $APPLICATION->GetCurPage(),     // URL для формы редактирования записи

            "return_url"       =>       $APPLICATION->GetCurPage(),// URL для возвращения к списку записей

            )

);?></P>

Иными словами, чтобы сделать компонент для своего модуля БУС мы должны:

  1. Создать файл с некоторым кодом компонента;
  2. Продумать параметры, которые будут управлять нашим компонентом;
  3. Описать вызов компонента и его параметры в соответствующем файле .description.php.

Рис. 5. HTML-редактор с компонентами гостевой книги

Доставка полезной информации от экспертов по Битрикс24!

Подпишитесь, и раз в неделю у вас на почте будет подборка полезных советов и обзоров про Битрикс24

Выберите рассылку

Created by potrace 1.13, written by Peter Selinger 2001-2015

Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов: