Количество статей у пользователя

Как получить список пользователей и получить информацию, сколько статей у каждого из них опубликовано (page_state = 0).

Вот как это можно сделать:

Код:

// Получение всех пользователей
$sql_users = "SELECT user_id, user_name FROM " . $db_users; // Извлекаем ID и имя пользователей
$users = $db->query($sql_users)->fetchAll(PDO::FETCH_ASSOC);

// Создаём XTemplate для вывода
$xtpl = new XTemplate(cot_tplfile('example', 'module'));

foreach ($users as $user) {
    $userId = $user['user_id']; // ID пользователя
    $userName = $user['user_name']; // Имя пользователя

    // Подсчёт опубликованных статей пользователя
    $sql_count = "SELECT COUNT(*) AS total
                  FROM " . $db_pages . "
                  WHERE page_state = 0 AND page_ownerid = ?";
    $totalArticles = (int) $db->query($sql_count, [$userId])->fetchColumn();

    // Передача данных в шаблон
    $xtpl->assign(array(
        'USER_ID' => $userId,
        'USER_NAME' => $userName,
        'TOTAL_ARTICLES' => $totalArticles,
    ));
    $xtpl->parse('MAIN.USER_ROW'); // Обрабатываем блок USER_ROW
}

// Парсим и выводим основной блок
$xtpl->parse('MAIN');
$xtpl->out('MAIN');

 

Шаблон (example.tpl):

<table>
    <tr>
        <th>ID пользователя</th>
        <th>Имя пользователя</th>
        <th>Количество статей</th>
    </tr>
    <!-- BEGIN: USER_ROW -->
    <tr>
        <td>{USER_ID}</td>
        <td>{USER_NAME}</td>
        <td>{TOTAL_ARTICLES}</td>
    </tr>
    <!-- END: USER_ROW -->
</table>


Объяснение:
Получение данных из users:

SQL-запрос

"SELECT user_id, user_name FROM " . $db_users

извлекает ID и имя всех пользователей.


Данные сохраняются в массив $users.


Подсчёт статей для каждого пользователя:

Для каждого пользователя выполняется отдельный запрос: подсчитывается количество статей (page_state = 0) с помощью фильтрации по page_ownerid.


XTemplate:

Используется цикл foreach для обработки каждого пользователя.

В шаблон передаются переменные: USER_ID, USER_NAME, TOTAL_ARTICLES.
Для каждого пользователя используется блок USER_ROW.

Вывод в шаблон:

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

 

Количество статей на странице пользователя

Чтобы адаптировать функционал для страницы публичного профиля пользователя, и показать количество опубликованных статей, владельцем, которых он является нам нужно:

  1. Получить ID текущего пользователя, чей профиль просматривается. В Cotonti CMF это обычно переменная $urr['user_id'].
  2. Извлечь из таблицы pages количество статей, которые принадлежат этому пользователю (page_ownerid = $urr['user_id']) и имеют статус page_state = 0.
  3. Передать результат в шаблон users.details.tpl.

Код для адаптации:

// Получаем ID текущего пользователя из массива $urr
$userId = $urr['user_id'];

// Проверяем, что ID пользователя корректен
if ($userId > 0) {
    // Подсчёт количества статей пользователя
    $sql_count = "SELECT COUNT(*) AS total 
                  FROM " . $db_pages . " 
                  WHERE page_state = 0 AND page_ownerid = ?";
    $totalArticles = (int) $db->query($sql_count, [$userId])->fetchColumn();

    // Передача результата в шаблон
    $t->assign(array(
        'USER_DETAILS_TOTAL_ARTICLES' => $totalArticles, // Количество статей
    ));
}

Адаптация в шаблоне users.details.tpl:

Добавьте место для отображения количества статей, например:

<p>Количество опубликованных статей: {USER_DETAILS_TOTAL_ARTICLES}</p>

 

Объяснение:

  1. Получение ID пользователя:

    • В Cotonti на странице профиля пользователя данные берутся из массива $urr. Переменная $urr['user_id'] содержит ID пользователя, чей профиль отображается.
  2. SQL-запрос:

    • Мы используем запрос COUNT(*) для подсчёта статей, принадлежащих пользователю с ID из $urr['user_id'] и статусом page_state = 0.
  3. Передача в шаблон:

    • Передаём результат подсчёта в шаблон с помощью метода $t->assign. В шаблоне доступна переменная {USER_DETAILS_TOTAL_ARTICLES}.
  4. Вывод в шаблоне:

    • В шаблоне users.details.tpl добавляется вывод переменной {USER_DETAILS_TOTAL_ARTICLES} в удобном для вас формате.

Примечание:

Если у вас есть дополнительные данные, которые нужно связать с этой функциональностью, например, ссылки на сами статьи, можно дополнительно реализовать выборку данных через отдельный SQL-запрос.

 

3 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 28.01.2025 14:52
  • Последнее обновление: 28.01.2025 15:00

Похожие страницы

Создание дополнительных полей для профиля пользователя
1 Создание дополнительных полей для профиля пользователя Очень часто при работе с сайтом на Cotonti возникает задача
Настройка регистрации с выбором группы пользователя
2 Для начала определим какие основные группы пользователей будут доступны при регистрации пользователей на вашем
Документация по переменным пользователя и владельца контента в Cotonti 0.9.26
3 Документация по переменным пользователя и владельца контента в Cotonti 0.9.26ВведениеCotonti предоставляет глобальные
Премиум-аккаунт «PRO». Пакет преимуществ и приоритетного статуса пользователя.
4 Премиум-аккаунт «PRO». Пакет преимуществ и приоритетного статуса пользователя. Премиум аккаунт и базовый, различия и
Разный визуальный редактор для админа и пользователя
5 CKEditor - Визуальный (WYSIWYG) редактор HTML-контента. Минимальный, обычный и расширенный визуальный редактор -