Николай Ланец
2 июля 2013 г., 22:44

Обзор Discuss 1.1.0-pl

В продолжение радостной новости о выходе новой версии 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.2 настолько же глючна? И какой есть вариант прикрутить форум? Недавно зарегистрировася на одном форуме по модекс, народу пока маловато там, как я понял, потому обсуждение проблемы по форуму для рево довольно вялое. Плюс сам я не программист, многое не могу даже понять в плане, но мысли определенные имеются. Например, создать форум из готовых комонентов. Как разработчик со стажем может подскажете насколько это вообще реально вот тут (не сочтите за ссылочный спам) я свои соображения высказал. Если будет время подсказать что-то для моего дилетансткого уровня буду благодарен, если будут подсказки на профессиональном уровне еще лучше, авось кто-то кто разбирается за это ухватится и по шажочку будет создан родной форум для modx.
Заранее спасибо =)

Добавить комментарий