Skip to content

Commit

Permalink
Add Alert option
Browse files Browse the repository at this point in the history
  • Loading branch information
Ge1i0N committed Sep 29, 2022
1 parent 5a937b3 commit 8dbb1c6
Show file tree
Hide file tree
Showing 3 changed files with 103 additions and 1 deletion.
26 changes: 26 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@
'Gelion\\BitrixOptions\\TypeInterface' => '/lib/TypeInterface.php',
'Gelion\\BitrixOptions\\TypeBase' => '/lib/TypeBase.php',
'Gelion\\BitrixOptions\\TypeForm' => '/lib/TypeForm.php',
'Gelion\\BitrixOptions\\Types\\Alert' => '/lib/Types/Alert.php',
'Gelion\\BitrixOptions\\Types\\Checkbox' => '/lib/Types/Checkbox.php',
'Gelion\\BitrixOptions\\Types\\Colorpicker' => '/lib/Types/Colorpicker.php',
'Gelion\\BitrixOptions\\Types\\Conditions' => '/lib/Types/Conditions.php',
Expand Down Expand Up @@ -226,6 +227,18 @@ $options = [
],
```

### Сообщения
Эта опция ничего не сохраняет в базу данных, но позволяет выводить информационные сообщения на странице настроек. Опция имеет свои собственные параметры о которых можно прочесть ниже.
```php
'PROP_ID' => [
'SORT' => 100,
'TYPE' => 'ALERT',
'FIELDS' => [
'TITLE' => 'Поле "Сообщения"',
],
],
```

## Модификаторы опций
Для опций категории "Формы" можно передать дополнительные параметры, влияющие на отображение формы на странице. Более подробно о принимаемых параметрах и их значениях можно узнать в [документации Bitrix](https://dev.1c-bitrix.ru/api_d7/bitrix/ui/forms/common.php)
Дополнительно доступные параметры пропасаны в базовом классе.
Expand All @@ -243,6 +256,19 @@ $options = [
],
```

Параметры по умолчанию для опции "Сообщения". О доступных параметрах значениях можно узнать в [документации Bitrix](https://dev.1c-bitrix.ru/api_d7/bitrix/ui/messages/alerts.php).
```php
'PROP_ID' => [
'FIELDS' => [],
'PARAMS' => [
'DISPLAY' => false,
'HEIGHT' => false,
'COLOR' => 'default',
'ICON' => false,
],
],
```

## Дополнительные типы опций
Чтобы создать свой тип опции нужно создать свой класс, унаследовавшись от класса `TypeBase` и с интерфейсом `TypeInterface`.
Затем, где-нибудь перед вызовом генератора зарегистрировать сопоставление названий типов, и классов, которые должны быть инициализированы.
Expand Down
9 changes: 8 additions & 1 deletion src/Form.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
use CAdminTabControl;
use Gelion\BitrixOptions\Types;

UI\Extension::load('ui.alerts');
UI\Extension::load('ui.forms');
UI\Extension::load('ui.buttons');
UI\Extension::load('ui.hint');
Expand All @@ -24,6 +25,7 @@ class Form
private $options = [];

private static $types = [
'ALERT' => Types\Alert::class,
'CHECKBOX' => Types\Checkbox::class,
'COLORPICKER' => Types\Colorpicker::class,
'DROPDOWN' => Types\Dropdown::class,
Expand Down Expand Up @@ -129,8 +131,13 @@ private function getTabsFormated(): array
$note = '<span data-hint="' . htmlspecialchars($property['FIELDS']['NOTES']) . '"></span>';

$properties[$tabId][$groupName]['TITLE'] = $group['TITLE'];
$properties[$tabId][$groupName]['OPTIONS'][] = '<tr><td>' . $property['FIELDS']['TITLE'] . $note . '</td><td nowrap>' . $input . '</td></tr>';
$properties[$tabId][$groupName]['OPTIONS_SORT'][] = $property['SORT'];

if ($property['TYPE'] !== 'ALERT') {
$properties[$tabId][$groupName]['OPTIONS'][] = '<tr><td>' . $property['FIELDS']['TITLE'] . $note . '</td><td nowrap>' . $input . '</td></tr>';
} else {
$properties[$tabId][$groupName]['OPTIONS'][] = '<tr><td colspan="2">' . $input . '</td></tr>';
}
}
}

Expand Down
69 changes: 69 additions & 0 deletions src/Types/Alert.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<?php

namespace Gelion\BitrixOptions\Types;

use Gelion\BitrixOptions\TypeBase;

class Alert extends TypeBase
{
private $display = [
'text-center',
'inline',
];

private $height = [
'xs',
'md',
];

private $color = [
'default',
'active',
'success',
'warning',
'danger',
'disabled',
];

private $icon = [
'warning',
'danger',
'info',
];

public function getHtml(): string
{
$class = $this->getClass();

return <<<HTML
<div class="ui-alert {$class}">
<span class="ui-alert-message">{$this->fields['TITLE']}</span>
</div>
HTML;
}

public function getClass(): string
{
$display = $this->params['DISPLAY'] ? "ui-alert-{$this->params['DISPLAY']}" : '';
$height = $this->params['HEIGHT'] ? "ui-alert-{$this->params['HEIGHT']}" : '';
$color = $this->params['COLOR'] ? "ui-alert-{$this->params['COLOR']}" : '';
$icon = $this->params['ICON'] ? "ui-alert-icon-{$this->params['ICON']}" : '';

return <<<CLASS
{$display}
{$height}
{$color}
{$icon}
CLASS;
}

public function setDefault(): void
{
$this->params = [
'DISPLAY' => false,
'HEIGHT' => false,
'COLOR' => 'default',
'ICON' => false,
];
}
}

0 comments on commit 8dbb1c6

Please sign in to comment.