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

1.1.x Работа с пользователями XenForo в CMS ModX

Тема в разделе "Интеграция XenForo с различными движками", создана пользователем Agel_Nash, 21.03.2012.

Загрузка
  1. Agel_Nash

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

    Регистрация:
    23.01.12
    Сообщения:
    16
    Симпатии:
    7
    Версия XF:
    1.1.2
    Код сниппета modx
    PHP:
    <?php
    $fileDir
    =$modx->config['base_path'].'forum/';
    $startTime microtime(true);
    require (
    $fileDir '/library/XenForo/Autoloader.php');
    XenForo_Autoloader::getInstance()->setupAutoloader($fileDir '/library');
     
    XenForo_Application::modxParserActive(); //Говорим XenForo, что у нас свой обработчик ошибок
    XenForo_Application::initialize($fileDir '/library'$fileDir);
    XenForo_Application::set('page_start_time'$startTime);
     
    XenForo_Session::startPublicSession();
    $xfUser XenForo_Visitor::getInstance();
    $data=array();
     
    if(
    $xfUser->get('user_id')=='0'){
     echo 
    'GUEST';
    }else{
     echo 
    $xfUser->get('user_id'); 

    ?>
    Как вы уже заметили доступна переменная $modx со всеми функциями и данными, а так же функции XenForo. Но, к сожалению, пришлось сделать грязный хак, чтобы заставить эти два движка работать в паре.

    Для этого открываем файл Application.php из папки library/XenForo/ и в класс XenForo_Application дописываем определение новой переменной
    PHP:
    protected static $_modxParser false
    Затем определяем новые функции
    PHP:
    public static function modxParserActive()
    {
        
    self::$_modxParser true;
    }
    public static function 
    GetModxParser()
    {
        return 
    self::$_modxParser;
    }
    И последний штрих. В функции beginApplication оборачиваем код
    PHP:
    @ini_set('output_buffering'false);
     
    // see http://bugs.php.net/bug.php?id=36514
    if (!@ini_get('output_handler')) while (@ob_end_clean());
     
    error_reporting(E_ALL E_STRICT & ~8192);
    set_error_handler(array('XenForo_Application''handlePhpError'));
    set_exception_handler(array('XenForo_Application''handleException'));
    в следующее условие
    PHP:
    if(!self::GetModxParser()){
    ...
    }
    Пока это единственный способ, которым я смог обойти конфликт совместимости modx и XenForo. Дело в том, что modx парсит чанки, сниппеты с использованием именно ob_end_clean; А т. к. эта функция была вызвана ранее modx получает пустой буфер со всеми вытекающими последствиями.

    P.S. Ранее я этот пост публиковал на хабре. Но к сожалению отклика статья не получила. Думаю может тут кто подскажет как избежать костыльности в моем решении.
     
    smubp и Jonikru нравится это.
  2. Yoskaldyr

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

    Регистрация:
    27.09.10
    Сообщения:
    1 921
    Симпатии:
    1 163
    Версия XF:
    1.0.4
    Насколько я вижу - костыльности никак не избежать ибо генерация контента через ob_get_contents - это уже мегакостыльно, а насколько я понял модх именно так и делает. Ксен юзает только для скрытия php-уведомлений и помещения их внутрь получаемого html-кода, но никак для генерации контента.
    Поэтому Ваш вариант наверное самый оптимальный - минимальные правки исходных кодов как мне кажется
     
  3. Witold

    Witold Местный

    Регистрация:
    19.01.12
    Сообщения:
    132
    Симпатии:
    23
    Версия XF:
    1.2.2
    У меня как чайника, у которого задача научить ксен работать с базой модикса.
    Возможно ли научить ксен пользоваться базой пользователей от модикса?
    Хотелось бы что б была возможность попадать на форум ксена исключительно после входа на портале который работает на модикс.
     
  4. Agel_Nash

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

    Регистрация:
    23.01.12
    Сообщения:
    16
    Симпатии:
    7
    Версия XF:
    1.1.2
    Зачем Ксен учить работать с MODX, когда MODX намного проще продружить с ним? Вот другая версия аналогичной интеграции.
     
    vlady и Mirovinger нравится это.
  5. Witold

    Witold Местный

    Регистрация:
    19.01.12
    Сообщения:
    132
    Симпатии:
    23
    Версия XF:
    1.2.2
    Для того что есть готовый портал на MODX и уже к нему прилепить нужно форум на ксене.
     

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