Озадачился я интеграцией форума Vanilla в MODx, но все что находил (в том числе и для других CMS) это только использование форумом внешней таблицы пользователей, что уже хорошо, но недостаточно.
Решения содания темы для форума похожей на сайт или встраивания через iframe меня не устраивали. Решил дальше покопать тему и поделится результами, может кому пригодится.
Итак, для интеграции нужно:
1. Сначала интегрировать базу пользователей
http://modxcms.com/forums/index.php/topic,14109.msg99816.html#msg99816
2. В MODx создать документ, в котором будет отображаться форум. Создать плагин, который будет вызываться на событии OnWebPageInit и для определенной страницы вызывать форум черех include
<?php
$forum_path = 'vanilla/';
$forum_docid = 47;
$e = &$modx->Event;
global $vanilla_result;
$vanilla_result = array();
global $Head;
$vanilla_path = MODX_BASE_PATH.$forum_path;
if ($e->name == 'OnWebPageInit' && $modx->documentIdentifier==$forum_docid) {
ob_start();
$vanillaentry = isset($_GET['vanillapage'])?$_GET['vanillapage'].'.php':'index.php';
include($vanilla_path.$vanillaentry);
ob_clean();
foreach($Head->Scripts as $script) {
$modx->regClientStartupScript($script);
}
foreach($Head->StyleSheets as $style) {
$modx->regClientCSS($style['Sheet'],$style['Media']);
}
}
?>
В нем $forum_path - путь к установленной vanilla, $forum_docid - идентификатор документа, в котором будет отображаться форум.
$vanilla_result это массив, которому в теме vanilla будет присваиваться результат в виде части форума. $vanilla_result[’Content’] - сожержимое, $vanilla_result[’Menu’] - меню форума, $vanilla_result[’Panel’] - панель, итд.
3. Создать тему для vanilla, где в каждом файле вместо вывода html кода присваивать его в $vanilla_result. Например для списка тем файл discussions.php
<?php
// Note: This file is included from the library/Vanilla/Vanilla.Control.DiscussionGrid.php class.
global $vanilla_result;
ob_start();
.....
$vanilla_result['Content'] = ob_get_clean();
?>
В файлах panel.php,menu.php присваивать нужно $vanilla_result[’Panel’], $vanilla_result[’Menu’] итд
Мою тему можно скачать
http://rapidshare.com/files/244048540/vanilla.zip
В настройках указать эту тему по-умолчанию
4. Создать сниппет VanillaControl выводящий часть форума:
<?php
$control = isset($control)?$control:'Content';
global $vanilla_result;
return isset($vanilla_result[$control])?$vanilla_result[$control]:'';
?>
Вызывать [!VanillaControl? &control=`Content`!] для вставки содержимого, [!VanillaControl? &control=`Panel`!] для вставки панели, итд
5. Направить вызов vanilla через MODx, для этого нужно отредактировать .htaccess
Если vanilla не использует ЧПУ, то
RewriteCond %{REQUEST_URI} !.*ajax.*
RewriteRule vanilla/(.*)\.php index.php?vanillapage=$1&q=vanilla [L,QSA]
q=vanilla это alias страницы в MODx
Скриншоты: