Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions ua/04_Компоненти/ClientSettings/index.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,25 @@

<img src="https://img.shields.io/badge/PHP-%3E=5.6-green.svg?php=5.6">

Модуль для создания формы пользовательских настроек.
Модуль для створення форми користувацьких налаштувань.

Для начала работы нужно переименовать файлы конфигурации `assets/modules/clientsettings/config/*.php.sample` в `*.php`.
Для початку роботи необхідно перейменувати файли конфігурації `assets/modules/clientsettings/config/*.php.sample` у `*.php`.

Конфигурация полей берется из файлов `*.php` из папки `/assets/modules/clientsettings/config/`. Каждый файл - это отдельная вкладка. Такой способ хранения позволяет легко изменять и переносить конфигурацию.
Конфігурація полів береться з файлів `*.php` у папці `/assets/modules/clientsettings/config/`. Кожен файл — це окрема вкладка. Такий спосіб зберігання дозволяє легко змінювати та переносити конфігурацію.

Пример файла конфигурации:
Приклад файлу конфігурації:
```php
<?php

return [
'caption' => 'Заголовок таба',
'introtext' => 'Описание таба',
'caption' => 'Заголовок вкладки',
'introtext' => 'Опис вкладки',
'settings' => [
'field_text' => [
'caption' => 'Текст',
'type' => 'text',
'note' => 'Это просто текст',
'default_text' => 'Значение по умолчанию',
'note' => 'Це просто текст',
'default_text' => 'Значення за замовчуванням',
],

...
Expand All @@ -29,12 +29,12 @@ return [
];
```

Типы полей описаны <a href="/info/terminology-2/chto_takoe_parametr.html">здесь</a>.
Типи полів описані <a href="[/ua/03_develop/02_elements/06_template_variables.html](/ua/03_develop/02_elements/06_template_variables.html)">тут</a>.

Помимо стандартных полей можно использовать тип `divider` для разделения списка полей на группы:
Окрім стандартних полів можна використовувати тип `divider` для розділення списку полів на групи:
```php
'field_text' => [
'caption' => 'Заголовок группы полей',
'caption' => 'Заголовок групи полів',
'type' => 'divider',
],
```
84 changes: 47 additions & 37 deletions ua/04_Компоненти/cfgTv/index.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,13 @@

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<h3>CfgTv: системные настройки из списка ТВ параметров из указанного документа Создает системные настройки из списка ТВ параметров из указанного документа</h3>
Создает системные настройки из списка ТВ параметров из указанного документа.
<p>Многие любят и активно юзают настройки сайта через <code>[[getField? name=`tv_name` ...]]]</code>, создавая ресурс где все эти настройки в TV лежат. Но вот незадача, каждая такая настройка = 1 запросу, а значит и время генерации больше + неудобно.</p>
<p>А что если делать также, но вызов на странице будет <code>[(cfg_footer_phone)]</code>, <code>[(cfg_icq)]</code> и так далее удобно правда?</p>
<p>Решение: CfgTv</p>
<p>Событие: <code>OnBeforeDocFormSave</code></p>
<pre class="brush: php;">
<h3>CfgTv: системні налаштування зі списку TV параметрів із вказаного документа</h3>
Створює системні налаштування зі списку TV параметрів із вказаного документа.
<p>Багато хто любить і активно використовує налаштування сайту через <code>[[getField? name=`tv_name` ...]]]</code>, створюючи ресурс, де всі ці налаштування зберігаються в TV. Але є проблема: кожне таке налаштування = 1 запит, а це означає більше часу на генерацію + незручно.</p>
<p>А що, якщо робити так само, але виклик на сторінці буде <code>[(cfg_footer_phone)]</code>, <code>[(cfg_icq)]</code> і так далі? Зручно, правда?</p>
<p>Рішення: CfgTv</p>
<p>Подія: <code>OnBeforeDocFormSave</code></p>

```php
/**
* CfgTv 0.1
* Save TV as system setting from some resourse
Expand All @@ -15,39 +16,48 @@
* @category plugin
* @version 1.0.0b
* @author Bumkaka
* @internal @properties &ids=ID ресурсов настроек;text;347 &prefix=Префикс;text;cfg_
* @internal @properties &ids=ID ресурсів налаштувань;text;347 &prefix=Префікс;text;cfg_
* @internal @events OnBeforeDocFormSave
* @internal @modx_category Manager and Admin
*/

$e = &$modx->event;
switch($e->name){
case 'OnBeforeDocFormSave':
$list_id = explode(',',$ids);
if(!in_array($_POST['id'],$list_id)) return;

$SQL = "SELECT * FROM ".$modx->getFullTableName('site_tmplvars').";";
$result = $modx->db->query($SQL);

while($row = $modx->db->getRow($result)){
$TVNAME[$row['id']] = $row['name'];
}

foreach($_POST as $key => $value){
if (substr($key,0,2)!='tv') continue;
$id=substr($key,2,strlen($key));
$name=$prefix.$TVNAME[$id];
$settings[$name]=$value;
$SQL="SELECT * FROM ".$modx->getFullTableName('system_settings')." WHERE `setting_name`='".$name."'";
$count=$modx->db->getRow($modx->db->query($SQL));
if (!empty($count['setting_name'])){
$SQL="UPDATE ".$modx->getFullTableName('system_settings')." SET `setting_value`='".$value."' WHERE `setting_name`='".$name."'";
$modx->db->query($SQL);
} else {
$SQL="INSERT into ".$modx->getFullTableName('system_settings')." SET `setting_name`='".$name."',`setting_value`='".$value."'";
$modx->db->query($SQL);
}
}
<?php

switch (evo()->event->name) {
case 'OnBeforeDocFormSave':
$list_id = explode(',', $ids);
if (!in_array($_POST['id'], $list_id)) {
return;
}

$SQL = "SELECT * FROM " . evo()->getFullTableName('site_tmplvars') . ";";
$result = evo()->db->query($SQL);

while ($row = evo()->db->getRow($result)) {
$TVNAME[$row['id']] = $row['name'];
}

foreach ($_POST as $key => $value) {
if (substr($key, 0, 2) != 'tv') {
continue;
}
$id = substr($key, 2, strlen($key));
$name = $prefix . $TVNAME[$id];
$settings[$name] = $value;
$SQL = "SELECT * FROM " . evo()->getFullTableName('system_settings') . " WHERE `setting_name`='" . $name . "'";
$count = evo()->db->getRow(evo()->db->query($SQL));
if (!empty($count['setting_name'])) {
$SQL = "UPDATE " . evo()->getFullTableName(
'system_settings'
) . " SET `setting_value`='" . $value . "' WHERE `setting_name`='" . $name . "'";
evo()->db->query($SQL);
} else {
$SQL = "INSERT into " . evo()->getFullTableName(
'system_settings'
) . " SET `setting_name`='" . $name . "',`setting_value`='" . $value . "'";
evo()->db->query($SQL);
}
}
break;
}
</pre>
```