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

1.1.2 Получить id пользователя

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

Загрузка
  1. Andy

    Andy Местный

    Регистрация:
    17.02.11
    Сообщения:
    12
    Симпатии:
    2
    Версия XF:
    1.1.3
    Извиняюсь, если уже обсуждали этот вопрос, но я не смог найти на форуме. В общем у меня стояла задача добавить под аватар дополнительную инфу о пользователе, которая берется из другой БД. Создал шаблон и событие, в котором вызывается
    PHP:
    class FM_Listener
    {
        public static function 
    templateHook($hookName, &$contents$paramsXenForo_Template_Abstract $template)
        {
            
    $options XenForo_Application::get('options');
            if (
    $options->isFmInfoOn) {
                if (
    $hookName == 'fm_user_info') {
                    
    //Тут нужно получить айди автора поста
                
    }
            }
        }
    }
    Хук fm_user_info располагается в message_user_info. Как мне получить айди пользователя написавшего пост?
     
  2. Pepelac

    Pepelac Продам луц в бутылках

    Регистрация:
    28.09.10
    Сообщения:
    1 794
    Симпатии:
    1 361
    1. В сам хук в шаблоне нужно передать параметр. Это может быть либо полностью массив данных о пользователе, либо только его ID. Что-то типа такого:
    Код:
    <xen:hook name="fm_user_info" params="{xen:array 'user={$user}'}" />
    Потом в пхп в этом случае уже данные будут доступны через $params['user'].

    2. В шаблоне message_user_info уже есть несколько хуков, в которые передаются данные о пользователе (message_user_info_avatar, message_user_info_text, message_user_info_extra, message_user_info_custom_fields). Вам они не подходят?
     
    Andy нравится это.
  3. Andy

    Andy Местный

    Регистрация:
    17.02.11
    Сообщения:
    12
    Симпатии:
    2
    Версия XF:
    1.1.3
    Спасибо, то что нужно.
    А на счет других хуков, то я как-то не задумался даже использовать их. Изначально решил, что для изучения движка лучше с нуля делать.
     
  4. Andy

    Andy Местный

    Регистрация:
    17.02.11
    Сообщения:
    12
    Симпатии:
    2
    Версия XF:
    1.1.3
    Не стал создавать новую тему. Опишу вопрос тут.
    В общем у меня есть один раздел на форуме, в котором нужно отсортировать топики по имени (без возможности сортировки пользователем) и в каждом топике заменить первый пост на нужное мне содержимое. Для воблы в свое время я написал, а тут пока не разобрался. Подскажите в какую строну рыть. Логику в принципе понимаю, нужно создать обработчик, который бы при входе в нужный раздел (определение по айди идет) сам устанавливал сортировку и еще добавить строку в название топика.
    Покажу на всякий случай плагины из того продукта.
    1. Изменяем сортировку и кол-во отображаемых топиков
    расположение forumdisplay_query_threadid
    PHP:
    if($foruminfo['forumid'] == $vbulletin->options['fm_free_fid']) {
        
    $sqlsortfield 'thread.title';
        
    $sqlsortorder 'ASC';
        
    $perpage 50;
    }
    2. Добавляем инфу в названии топика
    расположение threadbit_display
    PHP:
    if($foruminfo['forumid'] == $vbulletin->options['fm_free_fid']){
        require_once (
    DIR '/includes/functions_fm.php');
        
    $thread['threadtitle'] .= get_fm_num_free($thread['threadtitle']);
    }
    3. Парсим первый пост топика в нужном разделе
    расположение postbit_display_complete
    PHP:
    if($this->forum['forumid'] == $this->registry->options['fm_free_fid'] && $this->thread['firstpostid'] == $this->post['postid']){
        
    $this->post['message'] = get_fm_list_free($this->thread['title']);
    }
     
  5. Andy

    Andy Местный

    Регистрация:
    17.02.11
    Сообщения:
    12
    Симпатии:
    2
    Версия XF:
    1.1.3
    В общем оказалось все несложно.
    PHP:
    class FM_Listener extends XenForo_ControllerPublic_Post
    {
        public static function 
    templateHook($hookName, &$contents$paramsXenForo_Template_Abstract $template)
        {
            
    $options XenForo_Application::get('options');
            if (
    $options->isFmFreeTeams){
                if (
    $hookName == 'fm_thread_after_title'){
                    
    $allparams $template->getParams();
                    if (
    $options->FmFreeTeamsFid == $allparams['forum']['node_id']){
                        
    $contents .= XenForo_Model::create('FM_Model_FM')->get_fm_num_free($params['thread']['title']);
                    }
                }
                if (
    $hookName == 'fm_message_change'){
                    
    $allparams $template->getParams();
                    if (
    $options->FmFreeTeamsFid == $allparams['forum']['node_id']){
                        if (
    $params['message']['position'] == 0){
                            
    $contents .= XenForo_Model::create('FM_Model_FM')->get_fm_list_free($params['thread']['title']);
                        }
                        else {
                            
    $contents .= $params['message']['messageHtml'];
                        }
                    }
                }
            }
        }
    }
     

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