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


Примеры подобных настроек для блока фактов (поля компонента: заголовок, подзаголовок, иконка, ссылка):
Значения этих настроек будут доступны в шаблонах компонента в массиве $cc_settings[], а установить их сможет пользователь в диалоге настройки блока.
У некоторых типов настроек есть дополнительные настройки.
Для этого типа можно указать регулярное выражение, проверяющее валидность вводимого текста, а также выводимый текст ошибки в случае несоответствия введенного текста этому регулярному выражению. Также можно указать длину строки ввода.
Дополнительные настройки: использовать wysiwyg-редактора в поле ввода, преобразовывать перенос строки в тег <br/>, высота поля ввода.
Дополнительные настройки: минимальное и максимальное значение.
Дополнительных настроек нет.
Дополнительных настроек нет.
У этого типа есть подтип: вид списка. Список может быть:
Дополнительная настройка: тип сущности: раздел, блок (компонент в разделе), пользователь, компонент. В форме настройки блока пользователю нужно будет выбрать или указать соответствующий раздел, блок, пользователя или компонент. В поле будет храниться ID данной сущности.
Дополнительная настройка: тип файла (произвольный, изображение, иконка). Для изображения также можно указать ширину и/или высоту для авторесайза. При этом, авторесайз будет применен к самому закачанному файлу. Прочитайте о том, как выполнить авторесайз с сохранением исходного файла.
Дополнительных настроек нет.
Декоративный элемент, чтобы отделить в форме одну группу настроек от другой.
Произвольный код, который будет выведен в форме. Например, может быть использован для добавления в форму JavaScript, если нужно обрабатывать взаимные зависимости полей в форме (к пример, должно быть заполнено как минимум одно из двух полей).
Реализуем приведенный в начале статьи пример. Предположим, изначальный шаблон вывода факта в списке выглядит так:
<!-- FormPrefix -->
<?= $f_AdminCommon; ?>
<!-- /FormPrefix -->
<!-- RecordTemplate --><?= $f_AdminButtons; ?>
<div class="fact-item">
<?
if($f_Link)
{
echo "<a href=\"".$f_Link."\">";
}
?>
<div class="fact-icon">
<?= $f_Image->as_icon(); ?>
</div>
<div class="icon-name"><?= $f_Title; ?></div>
<?= $f_Link ? "</a>": NULL; ?>
</div><!-- /RecordTemplate -->
<!-- FormSuffix --><!-- /FormSuffix -->
Добавим пять перечисленных в начале статьи настроек. В виде массива они будут выглядеть так:
$settings_array = array ( 'iconcolor' => array ( 'type' => 'select', 'subtype' => 'static', 'caption' => 'Цвет иконки', 'default_value' => 'red', 'initial_value' => 'red', 'skip_in_form' => '0', 'values' => array ( 'red' => 'красный', 'green' => 'зеленый', 'black' => 'черный', ), ), 'rgb' => array ( 'type' => 'string', 'subtype' => NULL, 'caption' => 'Свой цвет в RGB', 'initial_value' => '', 'skip_in_form' => '0', 'validate_regexp' => '', 'validate_error' => '', 'size' => '', ), 'align' => array ( 'type' => 'select', 'subtype' => 'static', 'caption' => 'Горизонтальное выравнивание', 'initial_value' => 'left', 'skip_in_form' => '0', 'values' => array ( 'left' => 'по левому краю', 'center' => 'по центру', 'right' => 'по правому краю', ), ), 'icondefault' => array ( 'type' => 'file', 'subtype' => 'icon', 'caption' => 'Иконка по умолчанию', 'initial_value' => '', 'skip_in_form' => '0', ), 'blank' => array ( 'type' => 'checkbox', 'subtype' => NULL, 'caption' => 'Открывать в новом окне', 'initial_value' => '', 'skip_in_form' => '0', ), );
Теперь изменим шаблоны префикса и объекта, добавив обработку настроек:
<!-- FormPrefix --><?= $f_AdminCommon; ?>
<?
$rgb="";
$iconcolor="";
if($cc_settings["rgb"])
{
$rgb = $cc_settings["rgb"];
}
else
{
$iconcolor=$cc_settings["iconcolor"];
}
?><!-- /FormPrefix -->
<!-- RecordTemplate -->
<?= $f_AdminButtons; ?>
<div class="fact-item" style="text-align: <?= $cc_settings["align"]; ?>">
<?
if($f_Link)
{
echo "<a href=\"".$f_Link."\"";
if ($cc_settings["blank"])
{
echo "target=\"_blank\"";
}
echo ">";
}
?>
<div class="fact-icon">
<?= (string)$f_Image ? $f_Image->as_icon(array("class" => "color-".$iconcolor, "fill" => $rgb)) : $cc_settings["icondefault"]->as_icon(array("class" => "color-".$iconcolor, "fill" => $rgb)); ?>
</div>
<div class="icon-name"><?= $f_Title; ?></div>
<?= $f_Link ? "</a>": NULL; ?>
</div><!-- /RecordTemplate -->
<!-- FormSuffix --><!-- /FormSuffix -->