Merge pull request #8720 from vchenin/docs_uk

📖 docs/*uk add tutorial-console.md + some corrections [skip ci]
This commit is contained in:
Alexander Makarov
2015-06-12 13:12:58 +02:00
13 changed files with 241 additions and 25 deletions

View File

@ -143,9 +143,9 @@ All Rights Reserved.
Інструменти розробника
----------------------
* **TBD** [Панель налагодження та відладчик](https://github.com/yiisoft/yii2-debug/blob/master/docs/guide-uk/README.md)
* **TBD** [Генерація коду з Gii](https://github.com/yiisoft/yii2-gii/blob/master/docs/guide-uk/README.md)
* [Генератор документації API (en)](https://github.com/yiisoft/yii2-apidoc)
* [Панель налагодження та налагоджувач](https://github.com/yiisoft/yii2-debug/blob/master/docs/guide-uk/README.md)
* [Генерація коду за допомогою Gii](https://github.com/yiisoft/yii2-gii/blob/master/docs/guide-uk/README.md)
* **TBD** [Генерація документації API](https://github.com/yiisoft/yii2-apidoc)
Тестування
@ -164,11 +164,11 @@ All Rights Reserved.
* **TBD** [Розширений шаблон проекту](https://github.com/yiisoft/yii2-app-advanced/blob/master/docs/guide-uk/README.md)
* **TBD** [Створення додатка з нуля](tutorial-start-from-scratch.md)
* **TBD** [Консольні команди](tutorial-console.md)
* [Консольні додатки](tutorial-console.md)
* **TBD** [Основні валідатори](tutorial-core-validators.md)
* **TBD** [Інтернаціоналізація](tutorial-i18n.md)
* **TBD** [Робота з поштою](tutorial-mailing.md)
* **TBD** [Вдосконалення продуктивності](tutorial-performance-tuning.md)
* **TBD** [Покращення швидкодії](tutorial-performance-tuning.md)
* **TBD** [Робота на віртуальному хостингу](tutorial-shared-hosting.md)
* **TBD** [Шаблонізатори](tutorial-template-engines.md)
* [Робота із стороннім кодом](tutorial-yii-integration.md)

Binary file not shown.

After

Width:  |  Height:  |  Size: 150 KiB

View File

@ -28,7 +28,7 @@ Yii це універсальний фреймворк і може бути
багаторівневе кешування та інші.
- Yii надзвичайно розширюваний. Ви можете налаштувати або замінити практично будь-яку частину основного коду.
Завдяки надійній архітектурі розширень Yii, досить легко використовувати або розробляти поширюванні розширення.
- Висока продуктивність завжди є головною ціллю Yii.
- Висока швидкодія завжди є головною ціллю Yii.
Yii — не проект однієї людини. Він підтримується і розвивається [сильною командою][about_yii] і великою спільнотою розробників,
які їй допомагають. Команда розробників фреймворку Yii стежать за тенденціями веб-розробки і розвитком інших проектів.

View File

@ -16,8 +16,8 @@
Ви можете використовувати два стовпці в таблиці user для зберігання кількості дозволених запитів та час останньої перевірки.
У методах `loadAllowance()` та `saveAllowance()` можна реалізувати зчитування та зберігання значень цих стовбців відповідно
до даних поточного аутентифікованого користувача. Для підвищення продуктивності можна спробувати зберігати цю
інформацію в кеші чи NoSQL сховищі.
до даних поточного аутентифікованого користувача. Для покращення швидкодії можна спробувати зберігати цю
інформацію в кеш чи NoSQL-сховищі.
Як тільки відповідний інтерфейс буде реалізований у класі identity, Yii почне автоматично перевіряти обмеження
частоти запитів за допомогою фільтра дій [[yii\filters\RateLimiter]] для [[yii\rest\Controller]]. При перевищенні

View File

@ -2,7 +2,7 @@
================
В даному розділі буде описано як створити нову сторінку з формою для отримання даних від користувачів.
На сторінці буде розміщена форма з полями, де можна буде вказати ім’я та e-mail.
На сторінці буде розміщена форма з полями, де можна буде вказати ім’я та адресу електронної пошти.
Після отримання цих двох фрагментів інформації від користувача, сторінка відобразить введені значення знову для підтвердження.
Для досягнення даної цілі, крім створення [дії](structure-controllers.md) і
@ -56,7 +56,7 @@ class EntryForm extends Model
правил перевірки даних. Правила перевірки, оголошені у вищезазначеному коді означають наступне:
* поля `name` і `email` обов’язкові для заповнення;
* поле `email` повинно містити правильну адресу e-mail.
* поле `email` повинно містити правильну адресу електронної пошти.
Якщо об’єкт `EntryForm` заповнений даними користувача, то для їх перевірки ви можете викликати метод
цього об’єкту [[yii\base\Model::validate()|validate()]]. У випадку
@ -139,7 +139,7 @@ HTML-формою та повідомленнями про присутні по
На завершення, створюємо два файли представлення з іменами `entry-confirm` і `entry`, котрі зображаються дією `entry`
з минулого підрозділу.
Представлення `entry-confirm` просто зображає ім’я та e-mail. Воно мусить бути збережене у файлі `views/site/entry-confirm.php`.
Представлення `entry-confirm` просто зображає ім’я та адресу електронної пошти. Воно мусить бути збережене у файлі `views/site/entry-confirm.php`.
```php
<?php
@ -149,7 +149,7 @@ use yii\helpers\Html;
<ul>
<li><label>Ім’я</label>: <?= Html::encode($model->name) ?></li>
<li><label>E-mail</label>: <?= Html::encode($model->email) ?></li>
<li><label>Адреса електронної пошти</label>: <?= Html::encode($model->email) ?></li>
</ul>
```
@ -191,7 +191,7 @@ http://hostname/index.php?r=site/entry
```
Ви побачите сторінку з формою і двома полями для заповнення. Перед кожним полем є надпис, який вказує, яку саме
інформацію слід вказувати. Якщо ви натиснете на кнопку відправлення даних без самих даних або якщо вкажете e-mail в невірному
інформацію слід вказувати. Якщо ви натиснете на кнопку відправлення даних без самих даних або якщо вкажете адресу електронної пошти в невірному
форматі, то ви побачите повідомлення про помилку біля кожного проблемного поля.
![Форма з помилками перевірки](images/start-form-validation.png)
@ -224,7 +224,7 @@ http://hostname/index.php?r=site/entry
```php
<?= $form->field($model, 'name')->label('Ваше ім’я') ?>
<?= $form->field($model, 'email')->label('Ваш e-mail') ?>
<?= $form->field($model, 'email')->label('Ваша адреса електронної пошти') ?>
```
> Інформація: У Yii є велика кількість віджетів, які дозволяють швидко будувати складні та динамічні представлення.

View File

@ -18,7 +18,7 @@
* домашня сторінка, відображається при переході по URL `http://hostname/index.php`;
* сторінка "About" ("Про нас");
* сторінка "Contact", що відображає форму зворотнього зв’язку, за допомогою якої користувач може звернутися до розробника по e-mail;
* сторінка "Contact", що відображає форму зворотнього зв’язку, через яку користувач може звернутися до розробника за допомогою електронної пошти;
* сторінка "Login", на якій відображається форма для аутентифікації користувачів. Спробуйте увійти з логіном/паролем
"admin/admin". Зверніть увагу на зміну пункту "Login" в головному меню на "Logout".
@ -27,7 +27,7 @@
У нижній частині вікна ви зможете бачити системні повідомлення Yii - налагоджувальну інформацію,
повідомлення про помилки, запити до бази даних і т. п. Відображенням даної інформацію керує
[вбудований відладчик](https://github.com/yiisoft/yii2-debug/blob/master/docs/guide-uk/README.md), він записує і відображає інформацію про хід виконання додатку.
[вбудований налагоджувач](https://github.com/yiisoft/yii2-debug/blob/master/docs/guide-uk/README.md), він записує і відображає інформацію про хід виконання додатку.
Крім веб-додатка, існує консольний скрипт `yii`, що розташований в базовій директорії додатка.
Цей скрипт може бути використаний для виконання фонових завдань або завдань обслуговування додатка.

View File

@ -168,7 +168,7 @@ if (YII_ENV_DEV) {
}
```
> Примітка: Якщо вказувати велику кількість компонентів у `bootstrap` - це негативно позначиться на продуктивності
> Примітка: Якщо вказувати велику кількість компонентів у `bootstrap` - це негативно позначиться на швидкодії
додатка, оскільки для кожного запиту буде виконуватись один й той самий набір компонентів. Таким чином, потрібно
розсудливо використовувати компоненти початкового завантаження.

View File

@ -230,7 +230,7 @@ class User extends ActiveRecord
Дані для моделі, які отримуються від кінцевих користувачів, повинні пройти перевірку, щоб пересвідчитись, що вони задовольняють
певні правила (названі *правилами перевірки*, також відомі як *бізнес-правила*). Наприклад, дано модель `ContactForm`,
ви, можливо, хочете пересвідчитись, що всі атрибути заповнені та атрибут `email` містить коректну адресу e-mail.
ви, можливо, хочете пересвідчитись, що всі атрибути заповнені та атрибут `email` містить коректну адресу електронної пошти.
Якщо значення для деяких атрибутів не задовольняють відповідні бізнес-правила, то будуть відображенні належні
повідомлення про помилки, щоб допомогти користувачу виправити їх.
@ -265,7 +265,7 @@ public function rules()
// атрибути name, email, subject і body є обов’язковими
[['name', 'email', 'subject', 'body'], 'required'],
// атрибут email повинен бути коректною адресою e-mail
// атрибут email повинен бути коректною адресою електронної пошти
['email', 'email'],
];
}

View File

@ -0,0 +1,208 @@
Консольні додатки
=================
Окрім багатьох можливостей для побудови веб-додатків, Yii також має повноцінну підтримку консольних додатків,
які в основному використовуються для реалізації фонових або супроводжувальних задач, які необхідно виконати для веб-сайту.
Структура консольного додатка дуже подібна до структури веб-додатка Yii. Він складається з одного
або декількох класів [[yii\console\Controller]], які у середовищі консолі часто називають "командами".
Кожний контролер може також мати одну або декілька дій, так само як і веб-контролери.
Обидва шаблони проекту вже мають консольний додаток у комплекті.
Ви можете запустити його, викликавши скрипт `yii`, який розміщений у базовій директорії додатка.
Це дасть вам перелік доступних команд, коли ви запускаєте його без будь-яких додаткових параметрів:
![Виконання команди ./yii для відображення довідки](images/tutorial-console-help.png)
Як видно на знімку екрану, Yii має вже визначений набір команд, які є доступними "з коробки":
- [[yii\console\controllers\AssetController|AssetController]] - Дозволяє вам комбінувати та стискати ваші файли JavaScript і CSS.
Ви можете дізнатись більше про цю команду у розділі [Ресурси](structure-assets.md#using-the-asset-command).
- [[yii\console\controllers\CacheController|CacheController]] - Дозволяє вам оновити кеш додатка.
- [[yii\console\controllers\FixtureController|FixtureController]] - Керує завантаженням та вивантаженням даних фікстур для цілей тестування.
Ця команда описана більш детально у [розділі тестування про фікстури](test-fixtures.md#managing-fixtures).
- [[yii\console\controllers\HelpController|HelpController]] - Надає довідкову інформацію про консольні команди, ця команда використовується за замовчуванням
та виводить те, що ви побачили у вищенаведеному виводі.
- [[yii\console\controllers\MessageController|MessageController]] - Здобуває повідомлення для перекладу з файлів коду.
Щоб дізнатись більше про цю команду, будь ласка, зверніться до розділу [Інтернаціоналізація](tutorial-i18n.md#message-command).
- [[yii\console\controllers\MigrateController|MigrateController]] - Управляє міграціями додатка.
Міграції баз даних описані більш детально у розділі про [міграції баз даних](db-migrations.md).
Використання <span id="usage"></span>
------------
Для виконання дії консольного контролера використовуйте наступний синтаксис:
```
yii <route> [--option1=value1 --option2=value2 ... argument1 argument2 ...]
```
У вищенаведеному прикладі, `<route>` означає маршрут до дії контролера. Опції будуть заповнювати
властивості класу, а аргументи є параметрами для методу дії.
Наприклад, дія [[yii\console\controllers\MigrateController::actionUp()|MigrateController::actionUp()]]
з властивістю [[yii\console\controllers\MigrateController::$migrationTable|MigrateController::$migrationTable]], що має значення `migrations`,
та обмеженням у 5 міграцій може бути викликана так:
```
yii migrate/up 5 --migrationTable=migrations
```
> **Примітка**: Коли використовуєте символ `*` в консолі, не забувайте замикати його в лапки, як `"*"`, для запобігання його інтерпретування як
> спецсимволу shell-оболонки, який заміщується іменами файлів поточної директорії.
Вхідний скрипт <span id="entry-script"></span>
--------------
Вхідний скрипт консольного додатку є еквівалентним до файлу початкового завантаження `index.php` для веб-додатків.
Консольний вхідний скрипт, як правило, називається `yii`, та розміщений у базовій директорії вашого додатку.
Він містить код подібний до наступного:
```php
#!/usr/bin/env php
<?php
/**
* Yii console bootstrap file.
*/
defined('YII_DEBUG') or define('YII_DEBUG', true);
// fcgi doesn't have STDIN and STDOUT defined by default
defined('STDIN') or define('STDIN', fopen('php://stdin', 'r'));
defined('STDOUT') or define('STDOUT', fopen('php://stdout', 'w'));
require(__DIR__ . '/vendor/autoload.php');
require(__DIR__ . '/vendor/yiisoft/yii2/Yii.php');
$config = require(__DIR__ . '/config/console.php');
$application = new yii\console\Application($config);
$exitCode = $application->run();
exit($exitCode);
```
Цей скрипт буде створено як частину вашого додатку; ви можете вільно змінювати його для відповідності вашим потребам. Значення константи `YII_DEBUG` може бути встановлено у `false`,
якщо ви не хочете бачити стек трасування при помилці, і/або якщо ви хочете підвищити загальну швидкодію. І в базовому, і в розширеному шаблонах
проекту у вхідному скрипті консольного додатку за замовчуванням включено режим налагодження для забезпечення більш дружнього до розробника середовища.
Конфігурація <span id="configuration"></span>
------------
Як видно у вищенаведеному коді, консольний додаток використовує свій власний файл конфігурації з іменем `console.php`. У цьому файлі
ви можете налаштовувати різні [компоненти додатка](structure-application-components.md) та властивості для консольного додатка зокрема.
Якщо ваш веб-додаток та консольний додаток мають багато спільних параметрів конфігурації з однаковими значеннями, ви можете відокремити
спільні частини в окремий файл та включити цей файл до обох конфігурацій додатків (веб- та консольного).
Ви можете побачити приклад цього у "розширеному" шаблоні проекту.
> Підказка: Іноді, існує необхідність виконувати консольну команду, використовуючи конфігурацію додатка, яка
> відрізняється від заданої у вхідному скрипті. Наприклад, якщо ви хочете використати команду `yii migrate` для
> оновлення ваших тестових баз даних, які налаштовані кожна в окремому наборі тестів. Для динамічної зміни
> конфігурації просто вкажіть потрібний файл конфігурації додатка
> за допомогою опції `appconfig`, коли виконуєте команду:
>
> ```
> yii <route> --appconfig=path/to/config.php ...
> ```
Створення власних консольних команд <span id="create-command"></span>
-----------------------------------
### Консольні контролер та дія
Консольна команда визначена класом контролера успадкованого від [[yii\console\Controller]]. У класі контролера
визначаються одна або більше дій, які відповідають під-командам контролера. Всередині кожної дії міститься код, який реалізує відповідні завдання для окремої під-команди.
При виконанні команди необхідно вказати маршрут до дії контролера. Наприклад,
маршрут `migrate/create` викликає під-команду, яка відповідає методу дії
[[yii\console\controllers\MigrateController::actionCreate()|MigrateController::actionCreate()]].
Якщо маршрут, запропонований при виконанні, не містить ідентифікатора дії, то буде виконана стандартна дія (так само як у веб-контролері).
### Опції
Через перевизначення методу [[yii\console\Controller::options()]] ви можете визначити опції, які будуть доступними
для консольної команди (controller/actionID). Метод повинен повертати перелік публічних властивостей класу контролера.
При виконанні команди можна задати значення опції, використовуючи синтаксис `--OptionName=OptionValue`.
Це призначить значення `OptionValue` властивості `OptionName` класу контролера.
Якщо значення за замовчуванням для опції є масивом і ви задаєте цю опцію під час виконання команди,
то значення опції буде перетворене у масив розділенням вхідного текстового рядка за комами.
### Аргументи
Окрім опцій, команда також може приймати аргументи. Аргументи будуть передані як параметри до методу дії
відповідно до запитуваної під-команди. Перший аргумент відповідає першому параметру, другий
відповідає другому і т. д. Якщо при виклику команди надано не достатньо аргументів, то відповідним параметрам
будуть призначені типові значення, якщо попередньо визначені. Якщо типове значення не визначено і не передано значення під час виконання, то команда буде завершена з помилкою.
Ви можете використовувати вказівку типу `array` для позначення аргументу, з яким потрібно обходитись як з масивом.
Масив буде згенерований розділенням вхідного текстового рядку за комами.
Наступний приклад показує як оголошувати аргументи:
```php
class ExampleController extends \yii\console\Controller
{
// Команда "yii example/create test" викличе "actionCreate('test')"
public function actionCreate($name) { ... }
// Команда "yii example/index city" викличе "actionIndex('city', 'name')"
// Команда "yii example/index city id" викличе "actionIndex('city', 'id')"
public function actionIndex($category, $order = 'name') { ... }
// Команда "yii example/add test" викличе "actionAdd(['test'])"
// Команда "yii example/add test1,test2" викличе "actionAdd(['test1', 'test2'])"
public function actionAdd(array $name) { ... }
}
```
### Код виходу
Використання кодів виходу є найкращою практикою для розробки консольного додатку. Прийнято, якщо команда повертає `0`, це означає, що
все добре. Якщо команда повертає число більше за нуль, це вважається показником помилки. Повернуте число буде кодом
помилки, яке потенційно може використовуватись для пошуку деталей про помилку.
Наприклад, число `1`, як правило, може означати невідому помилку, а усі коди вище можуть бути зарезервовані для специфічних випадків: помилки вводу, відсутні файли і так далі.
Для того, щоб ваша консольна команда повертала код виходу, просто поверніть ціле число з методу дії
контролера:
```php
public function actionIndex()
{
if (/* деяка проблема */) {
echo "A problem occured!\n";
return 1;
}
// щось виконується
return 0;
}
```
Є декілька попередньо визначених констант, які ви можете використовувати:
- `Controller::EXIT_CODE_NORMAL` зі значенням `0`;
- `Controller::EXIT_CODE_ERROR` зі значенням `1`.
Хорошою практикою є визначення значущих констант для вашого контролера у випадку, якщо ви маєте більше типів помилок.
### Форматування та кольори
Консоль Yii підтримує форматований вивід, який автоматично стане не форматованим, якщо він не підтримується
терміналом, в якому виконується команда.
Виводити форматовані текстові рядки просто. Ось як вивести деякий жирний текст:
```php
$this->stdout("Hello?\n", Console::BOLD);
```
Якщо необхідно побудувати текстовий рядок, динамічно комбінуючи декілька стилів, то найкраще використовувати `ansiFormat`:
```php
$name = $this->ansiFormat('Alex', Console::FG_YELLOW);
echo "Hello, my name is $name.";
```

View File

@ -10,7 +10,7 @@
у конфігураціях дуже зручно. В інших випадках, потрібно обмежувати підтримку псевдонімів шляху.
2. **Коли перекладати повідомлення?**
Повідомлення повинні перекладатись, якщо вони показуються кінцевому користувачу та мають для нього значення. Повідомлення статусу HTTP,
виключення і т.п. не повинні перекладатись. Повідомлення консолі завжди англійською мовою, через труднощі обробки кодування
виключення і т. п. не повинні перекладатись. Повідомлення консолі завжди англійською мовою, через труднощі обробки кодування
та кодової сторінки.
3. **[Додавання підтримки нового клієнту аутентифікації](https://github.com/yiisoft/yii2/issues/1652)**
Для кращого супроводу, ніякі додаткові клієнти аутентифікації не будуть додаватись до базового розширення. Вони

View File

@ -4,7 +4,7 @@
Будь ласка, дотримуйтесь рекомендацій, зазначених нижче, при створенні питання, щоб прискорити його вирішення:
* Подавайте інформацію, включаючи: версію PHP та Yii, тип операційної системи та веб-сервера, тип та версію браузера.
* Додавайте **повний** вивід про помилку, якщо є. Скріншот, що пояснює проблему, дуже вітається.
* Додавайте **повний** вивід про помилку, якщо є. Знімок екрану, що пояснює проблему, дуже вітається.
* Опишіть кроки, які призводять до помилки. Було б ще краще, надати код для відтворення проблеми.
* Якщо можливо створіть модульний тест, навіть провальний, та [надішліть його як "pull request"](git-workflow.md).

View File

@ -73,6 +73,8 @@ php build translation "../docs/guide" "../docs/guide-uk" "Ukrainian guide transl
### Список термінів
[Англійсько-українські словники](http://e2u.org.ua)
- action — дія;
- active record — (не перекладається);
- Advanced/Basic Project Template — Розширений/Базовий шаблон проекту;
@ -86,6 +88,7 @@ php build translation "../docs/guide" "../docs/guide-uk" "Ukrainian guide transl
- authorization — авторизація/уповноваження;
- autoloader — автозавантажувач;
- back-end — (не перекладається);
- backward compatibility / BC — зворотна сумісність;
- bootstrap, bootstrapping — початкове завантаження;
- branch — гілка;
- browser — браузер;
@ -102,14 +105,14 @@ php build translation "../docs/guide" "../docs/guide-uk" "Ukrainian guide transl
- cookies — кукі;
- customization — (тонке) налаштування;
- debug mode — режим налагодження (див. production mode);
- debugger — відладчик;
- debugger — налагоджувач;
- (function) declaration — оголошення (функції);
- definition — визначення;
- design pattern — шаблон проектування;
- development mode — режим розробки;
- (root) directory — (коренева) директорія;
- eager loading — жадібне завантаження (див. lazy loading);
- email address — адреса e-mail;
- email address — адреса електронної пошти;
- environment — середовище;
- exception — виключення;
- existing — наявний/присутній; // перекладати як "існуючий" не вірно
@ -144,15 +147,18 @@ php build translation "../docs/guide" "../docs/guide-uk" "Ukrainian guide transl
- merge — поєднання;
- Model-View-Controller (MVC) — Модель-Представлення-Контролер (MVC);
- namespace — простір імен;
- out of the box — "з коробки";
- package — пакунок;
- pagination — розділення на сторінки;
- parameter — параметр;
- to parse — обробляти;
- (application) performance — швидкодія (додатка);
- placeholder — заповнювач;
- plugin — плагін;
- postprocessing — після-обробка;
- predefined — попередньо визначений;
- production mode — робочий режим (див. debug mode);
- profiling — профілювання;
- property — властивість (обʼєкта);
- pull request — (не перекладається);
- query builder — конструктор запитів;
@ -164,6 +170,7 @@ php build translation "../docs/guide" "../docs/guide-uk" "Ukrainian guide transl
- resolve request — попередня обробка запиту;
- route, routing — маршрут, маршрутизація;
- row (of the table) — рядок (таблиці);
- screenshot — знімок екрану;
- Service Locator — Локатор служб;
- setter — сеттер;
- shared hosting — віртуальний хостинг;
@ -178,6 +185,7 @@ php build translation "../docs/guide" "../docs/guide-uk" "Ukrainian guide transl
- theming — темізація;
- third party — сторонній;
- thumbnail — мініатюра;
- tracing — трасування;
- trait — трейт;
- Twitter — Твіттер;
- Unicode — (не перекладається);

View File

@ -23,12 +23,12 @@ use yii\widgets\ActiveForm;
// Призначення властивостей контексту, виклики їх сеттерів, інші речі.
$this->title = 'Posts';
?>
<!-- Для foreach, for, if, і т.п. краще використовувати роздільні блоки PHP. -->
<!-- Для foreach, for, if, і т. п. краще використовувати роздільні блоки PHP. -->
<?php foreach ($posts as $post): ?>
<!-- Тут зверніть увагу на відступи. -->
<h2><?= Html::encode($post['title']) ?></h2>
<p><?= Html::encode($post['shortDescription']) ?></p>
<!-- `endforeach;`, `endfor;`, `endif;`, і т.п. потрібно використовувати замість `}` у випадку використання багатьох блоків PHP -->
<!-- `endforeach;`, `endfor;`, `endif;`, і т. п. потрібно використовувати замість `}` у випадку використання багатьох блоків PHP -->
<?php endforeach; ?>
<!-- При декларуванні віджету код може міститись як на одному так і на багатьох рядках. -->