> For the complete documentation index, see [llms.txt](https://docs.johncms.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.johncms.com/polzovateli/rabota-s-polzovatelyami-v-primerakh.md).

# Работа с пользователями в примерах

В предыдущей статье мы рассмотрели список [полей пользователя.](https://johncms.com/documentation/user_fields/)\
Теперь давайте рассмотрим несколько примеров получения данных.\
Во всех примерах **$user** позволяет получить доступ ко всем полям, которые описаны в [предыдущей статье](https://johncms.com/documentation/user_fields/).

Модель пользователя уже имеет некоторые предустановленные условия для выборки (заготовки запросов).\
Например для получения подтвержденных пользователей, вы можете просто вызвать метод **approved()**, а для получения пользователей, которые сейчас находятся на сайте можно вызвать метод **online()**.

**Как это работает?**\
В моделях можно создавать свои заготовки частей запросов.\
Например сейчас есть заготовка, которая вызывается методом **approved()**.\
Эта заготовка по своей сути равнозначна обычному вызову **where('preg', '=', 1)**\
Это достаточно простой вариант, но есть вариант немного сложнее.\
Например чтобы получить пользователей онлайн нам нужно ограничить выборку по времени.\
Чтобы каждый раз не писать **where('lastdate', '>', (time() - 300))** мы можем вызвать заготовку **online()**.\
Теперь предположим, что у нас есть 10 страниц, на которых выводятся различные пользователи онлайн.\
Если бы мы не использовали заготовки запросов, нам бы пришлось везде писать условие для выборки **where('lastdate', '>', (time() - 300))** и если бы мы захотели изменить время, в течение которого мы считаем пользователя онлайн, то нам бы пришлось менять его во всех 10 страницах. С заготовкой же нам достаточно изменить время в одном месте и это изменение применится для всех страниц.

**А теперь перейдем к примерам:**

Получим последних 10 зарегистрированных и подтвержденных пользователей и выведем их идентификаторы и логины:

```php
$users = (new \Johncms\Users\User())->approved()->orderBy('id', 'desc')->limit(10)->get();
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . '<br>';
}
```

Получим 10 последних пользователей онлайн:

```php
$users = (new \Johncms\Users\User())->online()->orderBy('lastdate', 'desc')->limit(10)->get();
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . '<br>';
}
```

Получим всех модераторов, администраторов, супервизоров и дополнительно выведем должность:

```php
$users = (new \Johncms\Users\User())->online()->where('rights', '>', 0)->orderBy('lastdate', 'desc')->get();
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . ' -  ' . $user->rights_name . '<br>';
}
```

Получим 10 пользователей мужского пола:

```php
$users = (new \Johncms\Users\User())->where('sex', '=', 'm')->orderBy('id')->limit(10)->get();
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . '<br>';
}
```

Получим 10 пользователей женского пола:

```php
$users = (new \Johncms\Users\User())->where('sex', '=', 'zh')->orderBy('id')->limit(10)->get();
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . '<br>';
}
```

Получим 10 пользователей, у которых больше 100 постов на форуме:

```php
$users = (new \Johncms\Users\User())->where('postforum', '>', 100)->orderBy('id')->limit(10)->get();
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . '<br>';
}
```

Усложним задачу и получим всех пользователей у которых больше 100 постов и разобьём выборку страницы (15 пользователей на страницу):

```php
$users = (new \Johncms\Users\User())->where('postforum', '>', 100)->orderBy('id')->paginate(15);
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . '<br>';
}
echo $users->render();
```

Как видите, всё достаточно просто. Мы заменили **get()** на **paginate()** убрали **limit(10)** и в **paginate** передали количество пользователей, которое мы хотим видеть на одной странице.\
А дальше с помощью строки **echo $users->render();** отрисовали список страниц.

Ну и давайте рассмотрим ещё 1 пример. Получим список пользователей, у которых поле статус не пустое и так же разобьём на страницы и выведем текст статуса.

```php
$users = (new \Johncms\Users\User())->where('status', '!=', '')->orderBy('id')->paginate(15);
foreach ($users as $user) {
    echo $user->id . ' - ' . $user->name . ' - ' . $user->status . '<br>';
}
echo $users->render();
```

На этом всё, если у вас остались вопросы, задайте их на форуме.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.johncms.com/polzovateli/rabota-s-polzovatelyami-v-primerakh.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
