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

1.4.8 Получение инфы по user_id

Тема в разделе "Вопросы и ответы по XenForo Framework", создана пользователем Warchiefs, 27.07.2015.

Загрузка
  1. Warchiefs

    Warchiefs Активный пользователь

    Регистрация:
    05.04.13
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.1.3
    Подскажите, как правильно получить message_count и username по user_id. Не могу разобраться с prepareUserConditions и prepareUserFetchOptions.
     
  2. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Подробнее, где именно, хотите получить эти данные?
     
  3. Warchiefs

    Warchiefs Активный пользователь

    Регистрация:
    05.04.13
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.1.3
    В контроллере своего аддона, который делает выборку из БД по message_count
     
  4. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    какие точные условия выборки пользователей по message_count?
    массив $conditions что передается в prepareUserConditions может содержать ключ message_count, который тоже должен быть массивом вида array('>', 10), т.е. первый элемент оператор условия, а второе значение. Т.е. в данном случае будет выборка всех пользователей у кого message_count > 10
    Как это работает и список всех операторов можно глянуть XenForo_Model::getCutOffCondition и XenForo_Model::assertValidCutOffOperator (в самом низу файла)
     
  5. Warchiefs

    Warchiefs Активный пользователь

    Регистрация:
    05.04.13
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.1.3
    О, спасибо, это полезная информация, которая мне была нужна, но не для решения данной задачи.
    Давайте я приведу пример кода моего аддона, и приведу листинг ошибок, чтобы было понятнее:

    [​IMG]

    [​IMG]

    [​IMG]
     
  6. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    У Вас ошибка в шаблоне. Где именно - не подскажу. Т.к. шаблона то нет
     
  7. Warchiefs

    Warchiefs Активный пользователь

    Регистрация:
    05.04.13
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.1.3
    Прошу прощения, вот код шаблона. Полагал, что ошибка в контроллере
    Код:
    <xen:foreach loop="$topPosters" value="$poster">
    
                <li class="leadPoster">
                    <div class="primaryContent">
                        <h3>{$poster.username}</h3>
                        <strong>{xen:number $poster.message_count}</strong></a>
                    </div>
                </li>
    
            </xen:foreach>
    
    
     
  8. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    моя ошибка - смотрел невнимательно код, ошибка не в шаблоне в а в коде,
    ибо этот кусок бред:
    [​IMG]
    просто возвращайте из этого метода $postersResult и будет вам счастье :))))
    --- добавлено : 29 июл 2015 в 13:18 ---
    Если же нужна сортировка то создавайте новый массив пройдясь по $userIds там ужен лежат ид отсортированные по сумме постов.

    Но также не стоит забывать что сумма постов это совсем не одно и то же что и message_count (есть разделы где счетчик постов не увеличивается).
    Поэтому конечный код будет зависеть от того что именно вам надо получить - топ постеров по message_count или топ постеров по общему количеству постов, включая на модерации и мягкоудаленные и посты из разделов где выключен счетчик сообщений.
     
    Последнее редактирование модератором: 06.08.2015
    Warchiefs и Mirovinger нравится это.
  9. Warchiefs

    Warchiefs Активный пользователь

    Регистрация:
    05.04.13
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.1.3
    Именно message_count. Спасибо за объяснение, буду править
     
    Последнее редактирование модератором: 06.08.2015
  10. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    тогда вам изначально надо выбирать пользователей по message_count и это можно сделать используя стандартный getUsers и задав ему правильные conditions и fetchOptions
     
  11. Warchiefs

    Warchiefs Активный пользователь

    Регистрация:
    05.04.13
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.1.3
    Можете привести пример правильного плз, если не трудно
     
  12. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Есть пример в самом коде XenForo
    Ссылка на топ постеров здесь:
    http://www.xf-russia.ru/forum/members/

    это XenForo_ControllerPublic_Member::actionIndex
    откуда вызывается метод
    XenForo_ControllerPublic_Member::_getNotableMembers
    PHP:
      protected function _getNotableMembers($type$limit)
       {
         
    $userModel $this->_getUserModel();

         
    $notableCriteria = array(
           
    'is_banned' => 0
         
    );
         
    $typeMap = array(
           
    'messages' => 'message_count',
           
    'likes' => 'like_count',
           
    'points' => 'trophy_points'
         
    );

         if (!isset(
    $typeMap[$type]))
         {
           return 
    false;
         }

         return array(
    $userModel->getUsers($notableCriteria, array(
           
    'join' => XenForo_Model_User::FETCH_USER_FULL,
           
    'limit' => $limit,
           
    'order' => $typeMap[$type],
           
    'direction' => 'desc'
         
    )), $typeMap[$type]);
       }
    Т.е. в общем случае это будет:
    PHP:
    $this->getModelFromCache('XenForo_Model_User')->getUsers($notableCriteria, array(
           
    'join' => XenForo_Model_User::FETCH_USER_FULL,
           
    'limit' => $limit,
           
    'order' => 'message_count',
           
    'direction' => 'desc'
         
    )
    );
     
    Warchiefs нравится это.
  13. Warchiefs

    Warchiefs Активный пользователь

    Регистрация:
    05.04.13
    Сообщения:
    14
    Симпатии:
    0
    Версия XF:
    1.1.3
    Спасибо, спрошу тут же, есть ли вариант поставить обработчик на регистрацию нового пользователя, то бишь, при регистрации нового юзера, обновляется кастомный столбец бд?
     
  14. Yoskaldyr

    Yoskaldyr Пользователь

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Читайте как писать дополнения и расширяйте XenForo_DataWriter_User
     
    Warchiefs нравится это.

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