Я постарался собрать то, что держу в голове по компонентам 2.0 и что не описано или описано мимоходом в документации. Так сказать, личный опыт. Надеюсь, кому-то пригодится.
[spoiler]
Структура папки компонента
Если надо создать подсказки к параметрам компонента:

для этого в папке языка необходимо создать папку help, в ней - файл с названием .tooltips.php

В файле - массив $MESS, в котором ключами являются параметры компонента c добавлением суффикса _TIP, значениями - подсказки. В качестве примера:
Здесь заданы подсказки для параметров компонента IBLOCK_TYPE, IBLOCK_ID и SORT_BY1.
Ряд стандартных параметров (типа CACHE_TIME, AJAX_MODE и прочее) имеет несколько подсказок:
для CACHE_TIME:
В папке images (см. рисунок выше) обычно хранится иконка компонента для визуального редактора.
Файл описания компонента .description.php
Рассмотрим ключ PATH описания компонента. Каждый узел здесь состоит из 3 ключей:
1. ID узла должен быть уникальным в пределах ВСЕГО дерева компонент (включая стандартные). Проблема в том, что если у узлов будут два одинаковых ID (к примеру, взяли для узла ID = "news", а такой ID уже есть для стандартных компонент), то оба не будут открываться.

2. Допустим, в узле есть несколько компонент. Не забудьте в каждом из них указать ключ NAME для всех использованных узлов. ТП отвечает, что достаточно указать NAME лишь в одном из компонент. Ага, сейчас. Во-первых, NAME берется из первого попавшегося компонента в узле. Если его не оказалось либо нет нужной языковой константы - в качестве NAME используется ID. Во-вторых, ради проверки можно открыть дерево стандартных компонент, раздел Служебные и увидеть user вместо Пользователь (на 23.03.2010) До этого был такой же косяк с узлом navigation. Так что внимательно.
Файл параметров компонента .parameters.php
Цитата:
Здесь не указан еще один ключ - SORT, задающий положение групп друг относительно друга. Т.е. правильно так:
Перечень стандартных групп:
ADDITIONAL_SETTINGS (сортировка - 700)
Эта группа появляется, например, при указании параметра SET_TITLE.
CACHE_SETTINGS (сортировка - 600)
Появляется при указании параметра CACHE_TIME.
SEF_MODE (сортировка 500)
Группа для всех параметров, связанных с использованием ЧПУ.
URL_TEMPLATES (сортировка 400)
Шаблоны ссылок
VISUAL (сортировка 300)
Редко используемая группа. Сюда предполагается загонять параметры, отвечающие за внешний вид.
DATA_SOURCE (сортировка 200)
Тип и ID инфоблока и тому подобное.
BASE (сортировка 100)
Основные параметры.
AJAX_SETTINGS (сортировка 550)
Все, что касается ajax.
Примечание.Какую бы сортировку Вы не указали для своих групп параметров, они (группы) все равно будут выведены ПОСЛЕ стандартных. С мест поправляют - сортировка своих групп работает. Да, действительно, на 10.0 работает. С какой версии - не отследил.
Структура описания параметра:
TYPE - тип элемента управления
Значения:
LIST - выбор из списка значений
STRING - текстовое поле ввода
CHECKBOX - да/нет
Для типа LIST ключ VALUES содержит массив значений следующего вида:
Внешний вид списка меняется в зависимости от наличия/отсутствия ключей MULTIPLE и ADDITIONAL_VALUES. Итак, MULTIPLE и ADDITIONAL_VALUES отсутствуют или равны "N":

Выводится просто список, никаких значений в список не добавляется.
ADDITIONAL_VALUES = "Y", MULTIPLE = "N"

В список добавляется значение "другое" и рядом доп.поле для ввода значения ручками.
ADDITIONAL_VALUES = "N", MULTIPLE = "Y"

В список ничего не добавляется, просто появляется возможность выбрать несколько элементов.
И, наконец, ADDITIONAL_VALUES = "Y", MULTIPLE = "Y"

В список добавляется значение "не выбрано" и рядом множественное доп.поле для ввода значения ручками.
Все тесты проводились с COLS = 8. Если этот ключ не указывать, список будет выпадающим, но общая идея останется та же.
Параметр REFRESH позволяет после выбора значения перегружить всю форму с параметрами. Делается это, например, для выбора инфоблока конкретного типа. То есть имеем два параметра - тип инфоблока и код инфоблока. Исходное положение - в первом список всех типов инфоблоков, во втором - список ВСЕХ инфоблоков данного сайта:

а после выбора нужного типа инфоблока параметры компонента перегружаются и мы видим только инфоблоки нужного типа:

Внешне этот ключ проявляется как кнопка с надписью ОК возле параметра (см. скриншоты выше), НО! Только для параметров типа LIST. Для параметров типа CHECKBOX ничего не отображается (по-моему, с версии 7.x), хотя отлично работает.
Если нужно, чтобы некий параметр появлялся или нет в зависимости от другого, делается это так. Пусть нам необходимо показать список свойств инфоблока. Предположим, что ID инфоблока содержится в параметре компонента IBLOCK_ID, а параметр, где будет список свойств назовем PROP_LIST. У параметра IBLOCK_ID должен быть выставлен ключ REFRESH = 'Y'. Код:
Массив $arCurrentValues содержит текущие значения параметров компонента.
Продолжение следует...
[spoiler]
Структура папки компонента
Если надо создать подсказки к параметрам компонента:

для этого в папке языка необходимо создать папку help, в ней - файл с названием .tooltips.php

В файле - массив $MESS, в котором ключами являются параметры компонента c добавлением суффикса _TIP, значениями - подсказки. В качестве примера:
$MESS["IBLOCK_TYPE_TIP"] = "Это подсказка для типа инфоблока"; $MESS["IBLOCK_ID_TIP"] = "Это подсказка для ID инфоблока"; $MESS["SORT_BY1_TIP"] = "Это подсказка для первой сортировки"; |
Здесь заданы подсказки для параметров компонента IBLOCK_TYPE, IBLOCK_ID и SORT_BY1.
Ряд стандартных параметров (типа CACHE_TIME, AJAX_MODE и прочее) имеет несколько подсказок:
для CACHE_TIME:
- CACHE_TIME_TIP - время кеширования
- CACHE_TYPE_TIP - тип кеширования
- DISPLAY_TOP_PAGER_TIP - показывать постраничку над списком
- DISPLAY_BOTTOM_PAGER_TIP - показывать постраничку под списком
- PAGER_TITLE_TIP - название элементов в постраничке
- PAGER_SHOW_ALWAYS_TIP - показывать постраничку всегда
- PAGER_TEMPLATE_TIP - имя шаблона постранички
- PAGER_DESC_NUMBERING_TIP - обратная адресация
- PAGER_DESC_NUMBERING_CACHE_TIME_TIP - время кеширования обратной адресации
- AJAX_MODE_TIP
- AJAX_OPTION_SHADOW_TIP
- AJAX_OPTION_JUMP_TIP
- AJAX_OPTION_STYLE_TIP
- AJAX_OPTION_HISTORY_TIP
В папке images (см. рисунок выше) обычно хранится иконка компонента для визуального редактора.
Файл описания компонента .description.php
Рассмотрим ключ PATH описания компонента. Каждый узел здесь состоит из 3 ключей:
'PATH' => array( 'ID' => "ID узла", 'NAME' => "название узла", 'SORT' => "индекс сортировки", 'CHILD' => array( // тут подузел, аналогичный по структуре узлу ), ), |
1. ID узла должен быть уникальным в пределах ВСЕГО дерева компонент (включая стандартные). Проблема в том, что если у узлов будут два одинаковых ID (к примеру, взяли для узла ID = "news", а такой ID уже есть для стандартных компонент), то оба не будут открываться.

2. Допустим, в узле есть несколько компонент. Не забудьте в каждом из них указать ключ NAME для всех использованных узлов. ТП отвечает, что достаточно указать NAME лишь в одном из компонент. Ага, сейчас. Во-первых, NAME берется из первого попавшегося компонента в узле. Если его не оказалось либо нет нужной языковой константы - в качестве NAME используется ID. Во-вторых, ради проверки можно открыть дерево стандартных компонент, раздел Служебные и увидеть user вместо Пользователь (на 23.03.2010) До этого был такой же косяк с узлом navigation. Так что внимательно.
Файл параметров компонента .parameters.php
Цитата:
"GROUPS" - значением этого ключа является массив групп параметров компонента. Параметры в визуальных средствах среды БУС (например, в визуальном редакторе) группируются. Группы в среде БУС располагаются в том порядке, в котором заданы в файле. Массив групп параметров компонента состоит из элементов следующего вида "код группы" => array( "NAME" => "название группы на текущем языке" ) |
"код группы" => array( "NAME" => "название группы на текущем языке", "SORT" => "сортировка", ) |
Перечень стандартных групп:
ADDITIONAL_SETTINGS (сортировка - 700)
Эта группа появляется, например, при указании параметра SET_TITLE.
CACHE_SETTINGS (сортировка - 600)
Появляется при указании параметра CACHE_TIME.
SEF_MODE (сортировка 500)
Группа для всех параметров, связанных с использованием ЧПУ.
URL_TEMPLATES (сортировка 400)
Шаблоны ссылок
VISUAL (сортировка 300)
Редко используемая группа. Сюда предполагается загонять параметры, отвечающие за внешний вид.
DATA_SOURCE (сортировка 200)
Тип и ID инфоблока и тому подобное.
BASE (сортировка 100)
Основные параметры.
AJAX_SETTINGS (сортировка 550)
Все, что касается ajax.
Примечание.
Структура описания параметра:
"код параметра" => array( "PARENT" => "код группы", // если нет - ставится ADDITIONAL_SETTINGS "NAME" => "название параметра на текущем языке", "TYPE" => "тип элемента управления, в котором будет устанавливаться параметр", "REFRESH" => "перегружать настройки или нет после выбора (N/Y)", "MULTIPLE" => "одиночное/множественное значение (N/Y)", "VALUES" => "массив значений для списка (TYPE = LIST)", "ADDITIONAL_VALUES" => "показывать поле для значений, вводимых вручную (Y/N)", "SIZE" => "число строк для списка (если нужен не выпадающий список)", "DEFAULT" => "значение по умолчанию", "COLS" => "ширина поля в символах", ), |
TYPE - тип элемента управления
Значения:
LIST - выбор из списка значений
STRING - текстовое поле ввода
CHECKBOX - да/нет
Для типа LIST ключ VALUES содержит массив значений следующего вида:
VALUES => array( "ID или код, сохраняемый в настройках компонента" => "языкозависимое описание", ), |
Внешний вид списка меняется в зависимости от наличия/отсутствия ключей MULTIPLE и ADDITIONAL_VALUES. Итак, MULTIPLE и ADDITIONAL_VALUES отсутствуют или равны "N":

Выводится просто список, никаких значений в список не добавляется.
ADDITIONAL_VALUES = "Y", MULTIPLE = "N"

В список добавляется значение "другое" и рядом доп.поле для ввода значения ручками.
ADDITIONAL_VALUES = "N", MULTIPLE = "Y"

В список ничего не добавляется, просто появляется возможность выбрать несколько элементов.
И, наконец, ADDITIONAL_VALUES = "Y", MULTIPLE = "Y"

В список добавляется значение "не выбрано" и рядом множественное доп.поле для ввода значения ручками.
Все тесты проводились с COLS = 8. Если этот ключ не указывать, список будет выпадающим, но общая идея останется та же.
Параметр REFRESH позволяет после выбора значения перегружить всю форму с параметрами. Делается это, например, для выбора инфоблока конкретного типа. То есть имеем два параметра - тип инфоблока и код инфоблока. Исходное положение - в первом список всех типов инфоблоков, во втором - список ВСЕХ инфоблоков данного сайта:
а после выбора нужного типа инфоблока параметры компонента перегружаются и мы видим только инфоблоки нужного типа:
Внешне этот ключ проявляется как кнопка с надписью ОК возле параметра (см. скриншоты выше), НО! Только для параметров типа LIST. Для параметров типа CHECKBOX ничего не отображается (по-моему, с версии 7.x), хотя отлично работает.
Если нужно, чтобы некий параметр появлялся или нет в зависимости от другого, делается это так. Пусть нам необходимо показать список свойств инфоблока. Предположим, что ID инфоблока содержится в параметре компонента IBLOCK_ID, а параметр, где будет список свойств назовем PROP_LIST. У параметра IBLOCK_ID должен быть выставлен ключ REFRESH = 'Y'. Код:
if (0 < intval($arCurrentValues['IBLOCK_ID'])
{
$arPropList = array();
$rsProps = CIBlockProperty::GetList(array(),array('IBLOCK_ID' => $arCurrentValues['IBLOCK_ID']));
while ($arProp = $rsProps->Fetch())
{
$arPropList[$arProp['ID']] = $arProp['NAME'];
}
$arComponentParameters['PARAMETERS']['PROP_LIST'] => array(
'NAME' => 'название параметра',
'TYPE' => 'LIST'
'VALUES' => $arPropList,
);
}
|
Массив $arCurrentValues содержит текущие значения параметров компонента.
Продолжение следует...