Привет, интернет =)

На одном из проектов, заказчик хотел что-то на подобии форума, где пользователи могли бы создать свою тему с вопросом и ждать ответы (комментарии). Сказано — сделано =)
Все новые темы, в админке MODX — отображаются в виде ресурсов.

Проект где реализован данный форум — prodush.by

Компоненты которые потребуются:
— MODX Evolution
— eForm
— Ditto
— JoCo & JotX

Приступаем к работе:
1. Создаем новый ресурс (страницу), назовем его «Форум». Данный ресурс будет контейнером и в нем у нас будут создаваться темы форума.
2.Создаем новый шаблон для ресурса «Форум» (с аналогичным названием) и в нем прописываем вызовы сниппетов (не имейте привычку писать вызовы сниппетов в контенте ресурса — их может удалить пользователь):
<div class="page__content">
	 <div class="forum">
		<table>
			 <tr>
			    	 <th class="th_l"><strong>Темы</strong></th>
				 <th><strong>Комментарии</strong></th>
				 <th class="th_r"><strong>Дата</strong></th>
			</tr>
			<tr>
				<td colspan="3" class="td_emp"></td>
			</tr>
			[!Ditto? &tpl=`forumRow`  &extenders=`jotcount` &display=`all`!]
		</table>
	</div>
<!-- Сниппет содержит функцию создания нового ресурса -->
	[!NewArticleEvent!]

	[!eForm? 
		&report=`forumReport`
		&to=`[[DocInfo? &docid=`[*id*]` &field=`forum-email`]]`
		&gotoid=`[*id*]`
		&vericode=`0`
		&formid=`newArticle`
		&subject=`Посетители прислали новый топик на форуме` 
		&tpl=`new-topic`				   
                &eFormOnBeforeMailSent=`CreateNewArticle`!]

<!-- Запуск редактора TinyMCE для всех полей типа <textarea> -->
<script language="javascript" type="text/javascript" src="assets/plugins/tinymce/tiny_mce/tiny_mce.js"></script>
<script language="javascript" type="text/javascript">
		tinyMCE.init({
		// Общие настройки
		language : 'ru',
		mode : "textareas",
		theme : "advanced",
		plugins : "emotions,preview,searchreplace,contextmenu,paste,fullscreen,visualchars",
		// Настройки темы
		theme_advanced_buttons1 : "code,|,undo,redo,|,bold,italic,underline,strikethrough,|,removeformat,cut,copy,paste,|,bullist,numlist,|,link,unlink,|,image,|,sub,sup,|,charmap,formatselect",
		theme_advanced_buttons2 : "",
		theme_advanced_toolbar_location : "top",
		theme_advanced_toolbar_align : "left",
		theme_advanced_statusbar_location : "bottom",
	        theme_advanced_resizing : true,
		// Подключение нужного CSS стиля
		content_css : "assest/templates/me_template/style.css"
	});
</script>


3. Создаем сниппет NewArticleEvent и чанки с шаблонами

NewArticleEvent
<?php
function CreateNewArticle(&$fields){
// Массив $fields будет содержать данные всех полей формы
// Создания документа с описанием.
require_once('assets/libs/document.class.inc.php');
$doc = new Document(); // создаем документ
$doc->Set('parent',35); // определяем в какую папку положить
$doc->Set('template','Тема форума'); // задаем шаблон
$doc->Set('content',$fields['content']); // основное содержимое
$doc->Set('pagetitle',$fields['pagetitle']);
$doc->Set('tvavtor',$fields['avtor']); // автор
$doc->Set('tvemail_tc',$fields['email']); // e-mail
$doc->Set('published',0);

$doc->Save(); // сохраняем
return true;
}
?>


Чанк new-topic (шаблон формы)
<div class="wform__submit" style="text-align: center; font-size: 20px; padding: 7px 0; margin-top: 20px;" onclick="$(this).next().slideDown();$(this).hide();">Создать новую тему</div>
<div style="display:none;">
	<h2>Создание новой темы</h2>
<p class="error">[+validationmessage+]</p>
<form action="[~[*id*]~]" method="post" enctype="multipart/form-data">
	<div style="width:45%; float:left;"> 
	<input type="hidden" name="formid" value="newArticle">
		<p><label>Автор *</label></p>
		 <p><input class="field" type="text" style="width:100%; height:32px;" name="avtor"  eform=" Имя автора :string:1"></p> 
		<p><label>Email *</label></p>
		<p><input class="field" type="text" name="email" size="40" style="width:100%; height:32px;" eform=" Адрес почты :email:1"></p>   
		<p><label>Название темы *</label></p>
     <p><input name="pagetitle" type="text" style="width:100%; height:32px;" eform=" Название темы :string:1">
   
	</div>
	<div style="width:45%;  margin-left:5%;float:left;">
		<p> Текст темы *</p>
     <textarea name="content" cols="40" rows="10" eform=" Текст темы :string:1"></textarea>

     <p><input type="submit" name="frmGo" class="wform__submit" value="Опубликовать"></p>
	</div>
	<div style="clear:both;"></div>
 </form>
</div>


чанк forumRow вывод тем формуа
<tr>
	<td class="td_l">
	<a href="[~[+id+]~]" class="theme">[+pagetitle+]</a>
	</td>
	<td>[+jotcount+]</td>
	<td>[[DateFormat? &create=`[*createdon*]`]]</td>
</tr><tr>


4. Теперь создаем шаблон для страницы с темой «Тема форума», на ней у нас должен быть вывод контента страницы и вызов JotX
<p><b>Автор:</b> <a href="mailto:[*email_tc*]">[*avtor*]</a></p>
                <div class="page__content">
			 [*content*]
			[!JotX? 
				&config=`tree` 
				&subscribe=`1` 
				&moderated=`1` 
				&Emails=`[[DocInfo? &docid=`1` &tv=`1` &field=`forum-email`]]`  
				&Author=`1`
			!]
		</div>


5. Не забудьте создать соответствующие TV поля

6. Готово.
Спасибо Алексею Либеру за помощь в реализации идеи.

Вопросы, дополнения, пожелания пишите в комментариях.