2017 16 января

Список пользователей сайта и их материалы !J3

На форуме всплыл вопрос, решил оформить более развернутый ответ, может самому понадобится.

Задача - на сайте получить список пользователей и возможность посмотреть созданные ими статьи (если, конечно, такой функционал на сайте предусмотрен).
Дополнительно этот же функционал будет показывать на специальной страницы материалы пользователя после его авторизации на фронте.

Рабочий демо пример

Действовать будем штатными средствами с некоторыми модификациями

Шаг 1 - Создадим два файла

\modules\mod_custom\tmpl\userarticle.php с кодом
1
23
45
67
89
1011
1213
1415
1617
1819
2021
2223
2425
2627
2829
3031
3233
3435
3637
3839
4041
4243
4445
46
<?php
 // если пришли с страницы списка пользователей
$jinput = JFactory::getApplication()->input;$userIDlist = $jinput->get('userid', '', '');
 require_once JPATH_SITE.'/components/com_content/helpers/route.php';
$db             = JFactory::getDBO();if (!$userIDlist) {
        $userId         = JFactory::getUser()->get('id');} else {
        $userId = $userIDlist;}
 $html   = '';
$query = '                select a.id as aid, a.catid as catid, u.username, a.alias as aailas, a.title as atitle, a.introtext as atext, c.alias as catalias, c.title as ctitle
                from #__content as a                join #__categories as c on c.id = a.catid
                join #__users as u on u.id = a.created_by                where a.state = 1 and a.created_by = "'.$userId.'"
        '; 
$db->setQuery($query);$rows = $db->loadObjectList();
 $html .= '<h3>Материалы пользователя '.$rows['0']->username.'</h3>';
$html .= '<ul class="userarticle">'; 
foreach ($rows as $row){
        $rowslug = $row->aid.':'.$row->aailas;        $rowcatslug = $row->catid.':'.$row->catalias;
    $link = JRoute::_(ContentHelperRoute::getArticleRoute($rowslug, $rowcatslug));        $html .= '<li><a href="'.$link.'">'.$row->atitle.'</a></li>';
} 
$html .= '</ul>'; 
if (!$userId) {        $html = 'Данная информация доступна только после авторизации';
} 
echo $html; 
?>
и файл \modules\mod_users_latest\tmpl\userlist.php с кодом
1
23
45
67
89
1011
12
<?php
defined('_JEXEC') or die;?>
<?php if (!empty($names)) : ?>        <ul class="latestusers<?php echo $moduleclass_sfx ?>" >
        <?php foreach ($names as $name) : ?>                <li>
                        <a href="/userarticles?userid=<?php echo $name->id; ?>"><?php echo $name->username; ?></a>                </li>
        <?php endforeach;  ?>        </ul>
<?php endif; ?>

Шаг 2 - в менеджере модулей создаем два модуля:

  • 1 - модуль "Новые пользователи" на любой неиспользуемой позиции и в доп. настройках указываем макет userlist, количество отображаемых можно поставить любое
  • 2 - модуль "HTML-код" на любой неиспользуемой позиции и в доп. настройках указываем макет userarticle

Шаг 3 - создаем два материала

Обычные материалы с произвольным текстом или без него, но обязательно в каждый из них вставляем созданные модули, в каждый по одному.
Один материал будет называться "список пользователей" и в него вставляем модуль 2.1, второй материал "материалы пользователя" и в него соответственно модуль 2.2

Шаг 4 и последний - создаем пункты в меню

  • 1 - ссылка на материал "список пользователей" с любым алиасом (к примеру userlist)
  • 2 - ссылка на материал "материалы пользователя" с алиасом userarticles (если будет другой алиас - соответственно изменить ссылку в \modules\mod_users_latest\tmpl\userlist.php

Все, теперь при переходе по ссылке /userlist мы увидим список пользователей, отсортированных по дате регистрации (хотите изменить - смотрим хелпер модуля mod_users_latest), по клику на ник попадаем на страницу /userarticles?userid=XX с списком статей, написанных данным автором.

Если же сделать прямой переход на страницу /userarticles то будет два варианта: я не авторизован - увижу заглушку, я авторизован - увижу список своих статей.

Конечно, есть специализированные расширения для подобного и более расширенного функционала, но зачастую большего и не требуется, тащить мегабайты непонятного кода я не вижу смысла. А так каркас есть, дальше можно наводить красивости, добавлять условия в выборку материалов, сортировки и тд

Комментарии

Оставить коммент

Защитный код
Обновить