Fi1osof 03 июля 2013 0 1
В продолжение радостной новости о выходе новой версии Discuss, публикую обзор.

Сначала о грустном…

В процессе установки вылезли SQL-ошибки.
Error adding index user to disUserFriend: Array ( [0] => 42S02 [1] => 1146 [2] => 
Table 'discuss_v01.modx_discuss_user_friends' doesn't exist )
Error adding index friend to disUserFriend: Array ( [0] => 42S02 [1] => 1146 [2] => 
Table 'discuss_v01.modx_discuss_user_friends' doesn't exist )
Error adding field disBoard->ltr: No metadata defined
Error adding index ltr to disBoard: No metadata defined
Error adding field disThread->post_last_on: Array ( [0] => 42S02 [1] => 1146 [2] => 
Table 'discuss_v01.modx_discuss_threads' doesn't exist )
Error adding index post_last_on to disThread: Array ( [0] => 42S02 [1] => 1146 [2] => 
Table 'discuss_v01.modx_discuss_threads' doesn't exist )
Error adding field disThread->participants: Array ( [0] => 42S02 [1] => 1146 [2] => 
Table 'discuss_v01.modx_discuss_threads' doesn't exist )
Could not load class: disBanGroup from mysql.disbangroup.
Could not load class: disBanItem from mysql.disbanitem.


Запустил переустановку пакета (из расчета того, что таблицы уже есть и все дело в очередности вызова скриптов). Получил новую порцию ошибок:
Error adding index user to disUserFriend: Array ( [0] => 42000 [1] => 1061 [2] => Duplicate key name 'user' )
Error adding index friend to disUserFriend: Array ( [0] => 42000 [1] => 1061 [2] => Duplicate key name 'friend' )
Error adding field disBoard->ltr: No metadata defined
Error adding index ltr to disBoard: No metadata defined
Error adding field disThread->post_last_on: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'post_last_on' )
Error adding index post_last_on to disThread: Array ( [0] => 42000 [1] => 1061 [2] => Duplicate key name 'post_last_on' )
Error adding field disThread->participants: Array ( [0] => 42S21 [1] => 1060 [2] => Duplicate column name 'participants' )
Could not load class: disBanGroup from mysql.disbangroup.
Could not load class: disBanItem from mysql.disbanitem.

С индексами еще ладно, просто ошибка попытки создать уже существующий индекс, а вот за невозможностью подгрузки класса «disBanItem» надо еще будет последить.

Javascript-ошибки действительно есть, типа этой: «ReferenceError: $LAB is not defined». И видим вот такие неприятные моменты:


Но это мелочи… Самое главное, что бросается в глаза, и хотя еще не изучены последствия, но уже очень грустно становится — это отдельная таблица для пользователей форума, при чем со своими полями username, email и т.п. При чем изменение данных у основного пользователя не влияет на данные пользователя форума, даже если это емейл, или пользователя вообще заблокировали. Это очень и очень грустно…

При попытке входа не выводится никаких ошибок о неправильном логине и пароле (на официальном форуме перебрасывает на самостоятельную страницу авторизации на сам modx.com).

Еще один большой минус — для работы форума требуется куча правил реврайта. Тоже вообще не порадовало.
Кстати, хотя он по умолчанию заточен под адрес /forums/, и создает для себя документ при установке (и, к слову, при переустановке тоже, каждый раз), тем не менее его пути все равно формируются от корня. Это происходит по той причине, что при работе он получает настройку discuss.forums_resource_id и на основе ID этого документа формирует ссылку к корню. Но при этом в момент установки он не ставит id созданного собой же документа в эту переменную. Так что не забывайте вручную установить корневой документ.

Так же сразу видно, что основа закладывалась очень давно, и много просто переходит по наследству, но уже давно не работает. К примеру GET-параметр print должен сигнализировать о том, чтобы вывести версию для печати, и он действительно выводит урезанную версию страницы, да вот только файл print.css отсутствует. В итоге страничка получается вообще не пригодная для чтения.

Система шаблонизации оставляет желать лучшего. Это если мягко выражаться… Куча файлов tpl-ок с огромным количеством плейсхолдеров и т.п. А файл-манифест, описывающий правила для отдельных разделов содержит 500+строк кода и выглядит вот так:
$manifest = array(
    'preview' => 'preview.png',
    'global' => array(
        'js' => array(
            'inline' => 'var DIS = {config: {}}; DIS.url = 
"'.$this->discuss->request->makeUrl().'";DIS.shJsUrl = "'.$this->discuss->config['jsUrl'].'sh/";DIS.config.connector = 
"'.$this->discuss->config['connectorUrl'].'"; DIS.config.forum_url = 
"'.$this->discuss->request->makeUrl().'"',
        ),
        'options' => array(
            'registerJsToScriptTags' => false,
            'showBreadcrumbs' => true,
            'showTitleInBreadcrumbs' => true,
            'showReaders' => true,
            'showModerators' => true,
            'showPaginationIfOnePage' => false,
            'showPrintOption' => false,
        )
    ),
    'print' => array(
        'css' => array(
            'header' => array(
                'print.css',
            ),
        ),
    ),

Все через кучу контроллеров, свои классы-реквестеры и т.п. В общем довольно-таки жутко.

И самое интересное: когда создается пользователь в админке, он не создается в пользователях форума. А регистрацию я так и не проверил, так как для этого еще надо документ создавать (как и для обновления профиля, и для регистрации).

Есть еще куча всяких ошибок, но расписывать их лень. Мой вердикт: все это надо переписывать с нуля. То, как оно сейчас выглядит, развивать перспективы нет.

В общем я сильно разочарован… Реально. Livestreet для MODX (modLivestreet) — это конечно костыль, но зато устанавливается в пару кликов и сразу работает. А тут… Печально:-(

P.S. Плагин, чтобы работало без дополнительных правил в .htaccess и т.п. (вешаем его на событие OnPageNotFound) Может что-то доработать надо, но это можно узнать только в процессе работы.
<?php

if($modx->context->key == 'mgr'){return;}
if(isset($modx->resource) && is_object($modx->resource)){return;}

$base_url =  $modx->getOption('base_url', null);
$url = $_SERVER['REQUEST_URI'];
$forums_resource_id = $modx->getOption('discuss.forums_resource_id', null, $modx->getOption('site_start', null));
$forum_url_prefix = $modx->makeUrl($forums_resource_id, '', '', 'abs');
if(!$forum_url_prefix) $forum_url_prefix = $modx->getOption('base_url', null);

// Check for forums path
if(strpos($url, $forum_url_prefix) !== 0){return;}

$preg = str_replace('/', '\/', $forum_url_prefix);

$url = preg_replace("/^{$preg}/", $base_url, $url);
$_SERVER['REQUEST_URI'] = $url;

// cleare from params
$url = preg_replace('/\?.*/','', $url);
if(!$url){return;}

$params = array();
if(preg_match('/^\/(board|thread|category)\/([0-9]+)\/(.*)$/', $url, $match)){
        $params['action'] = $match[1];
        $params[$match[1]] = $match[2];
}
else if(preg_match('/^\/u\/(.*)$/', $url, $match)){
        $params['action'] = 'user';
        $params['user'] = $match[1];
}
else{ 
    $params['action'] = $url;
}
foreach($params as $k => $v){
    $_GET[$k] = $v;
    $_REQUEST[$k] = $v;
}
$modx->sendForward($forums_resource_id);


P.P.S. До хорошего так и не добрался…
1 комментарий
a
atszenara 16 октября 2015г в 22:46 #
О! довольно печально(( Версия 1.2 настолько же глючна? И какой есть вариант прикрутить форум? Недавно зарегистрировася на одном форуме по модекс, народу пока маловато там, как я понял, потому обсуждение проблемы по форуму для рево довольно вялое. Плюс сам я не программист, многое не могу даже понять в плане, но мысли определенные имеются. Например, создать форум из готовых комонентов. Как разработчик со стажем может подскажете насколько это вообще реально вот тут (не сочтите за ссылочный спам) я свои соображения высказал. Если будет время подсказать что-то для моего дилетансткого уровня буду благодарен, если будут подсказки на профессиональном уровне еще лучше, авось кто-то кто разбирается за это ухватится и по шажочку будет создан родной форум для modx.

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