1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

1.2.x Участники группы

Тема в разделе "Made in XF-Russia.ru", создана пользователем mad@Max, 12.10.2013.

Загрузка
  1. mad@Max

    mad@Max Местный

    Регистрация:
    04.12.10
    Сообщения:
    22
    Симпатии:
    19
    Версия XF:
    1.2.2
    Пока писал один проект на ксене, к удивлению заметил, что в админке отсутствует выдача списка участников определенной группы. Конечно, этот список можно вывести через поиск пользователей, по критерию группы, но как то не комильфо :)
    Так вот, попутно написался этот модик - решил поделиться.

    После установки, изменения можно заметить в категории "Пользователи", раздел "Список групп" (http://yourfourm/admin.php?user-groups/). Напротив названия каждой группы появится ссылка на участников оных.
     

    Вложения:

    xorex, Consul, martini и 11 другим нравится это.
  2. Aksim

    Aksim Местный

    Регистрация:
    15.09.12
    Сообщения:
    312
    Симпатии:
    89
    Лови лайк, полезная штука. Проверил на 1.2.2 все отлично пашет.
     
  3. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Я позволил себе внести несколько небольших правок в код UserGroup.php для того, чтобы поиск велся в том числе и по вторичной группе. Результирующий код этого класса получился следующим:
    PHP:
    <?php

    class ListGroupUsers_ControllerAdmin_UserGroup extends XFCP_ListGroupUsers_ControllerAdmin_UserGroup
    {
       public function 
    actionList()
       {
         
    $userGroupId $this->_input->filterSingle('user_group_id'XenForo_Input::UINT);
         
    $criteria = array('user_group_id' => $userGroupId);
         
    $criteria2 = array('secondary_group_ids' => $userGroupId);

         
    $order $this->_input->filterSingle('order'XenForo_Input::STRING);
         
    $direction $this->_input->filterSingle('direction'XenForo_Input::STRING);

         
    $page $this->_input->filterSingle('page'XenForo_Input::UINT);
         
    $usersPerPage 20;

         
    $showingAll $this->_input->filterSingle('all'XenForo_Input::UINT);
         if (
    $showingAll)
         {
           
    $page 1;
           
    $usersPerPage 5000;
         }

         
    $fetchOptions = array(
           
    'perPage' => $usersPerPage,
           
    'page' => $page,

           
    'order' => $order,
           
    'direction' => $direction
         
    );

         
    $userModel $this->getModelFromCache('XenForo_Model_User');

         
    $criteriaPrepared $this->_prepareUserSearchCriteria($criteria);
         
    $criteriaPrepared2 $this->_prepareUserSearchCriteria($criteria2);

         
    $totalUsers $userModel->countUsers($criteriaPrepared);
         
    $totalUsers += $userModel->countUsers($criteriaPrepared2);
         if (!
    $totalUsers)
         {
           return 
    $this->responseError(new XenForo_Phrase('no_users_matched_specified_criteria'));
         }

         
    $users1 $userModel->getUsers($criteriaPrepared$fetchOptions);
         
    $users2 $userModel->getUsers($criteriaPrepared2$fetchOptions);
         
    $users array_merge($users1,$users2);

         
    $viewParams = array(
           
    'users' => $users,
           
    'totalUsers' => $totalUsers,
           
    'showingAll' => $showingAll,
           
    'showAll' => (!$showingAll && $totalUsers <= 5000),

           
    'linkParams' => array('user_group_id' => $userGroupId,'order' => $order'direction' => $direction),
           
    'page' => $page,
           
    'usersPerPage' => $usersPerPage,

           
    'filterView' => false,
           
    'filterMore' => false,

           
    'groupTitle' => $this->getModelFromCache('XenForo_Model_UserGroup')->getUserGroupById($userGroupId)
         );

         return 
    $this->responseView('RecSys_ViewAdmin_UserGroup_List''list_group_users'$viewParams);
       }

       protected function 
    _prepareUserSearchCriteria(array $criteria)
       {
         return 
    $this->getHelper('UserCriteria')->prepareUserSearchCriteria($criteria);
       }
    }
    Дело в том, что мне понадобилось выводить список участников группы независимо от первичности или вторичности. Так как некоторые группы у меня вообще всегда только вторичными бывают.

    P.S. И еще одно замечание. Плагин предназначен только для XenForo 1.2 и выше. У меня же форум 1.1.x. Естественно, плагин не заработал сходу. Пришлось его подкорректировать. Теперь он у меня работает и на 1.1.х :)
     
    Mefodian, Aksim, Mirovinger и ещё 1-му нравится это.
  4. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Ах да. Корректировать пришлось шаблон в админке, а также взять от 1.2 файлик UserCriteria.php, который в 1.1 отсутствует вообще.
     
  5. mad@Max

    mad@Max Местный

    Регистрация:
    04.12.10
    Сообщения:
    22
    Симпатии:
    19
    Версия XF:
    1.2.2
    Все таки лучше было бы собрать свой запрос для этого. Хотя, учитывая, что это админка...
     
  6. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Поэтому я и не стал напрягаться. Запросов много там не будет в любом случае. Да и два запроса суммарно будут практически идентичны одному с двумя условиями.
     
  7. mad@Max

    mad@Max Местный

    Регистрация:
    04.12.10
    Сообщения:
    22
    Симпатии:
    19
    Версия XF:
    1.2.2
    Теоретически можно собрать в один запрос. Нужно просто заменить/расширить метод в классе XenForo_Model, где критерии запроса объединяются через AND, а в нашем случае нужен OR.
     
  8. infis

    infis Местный

    Регистрация:
    27.06.11
    Сообщения:
    5 966
    Симпатии:
    3 548
    Версия XF:
    1.5.9
    Я знаю. Просто не вижу смысла.
     
  9. kolala

    kolala Новичок

    Регистрация:
    28.03.15
    Сообщения:
    2
    Симпатии:
    0
    спасибо за плагин. Народ, а есть возможность выводить группу на странице форума? Например в сайтбаре?
     

Поделиться этой страницей