По просьбе и участии сообщника KiR. А также, используя советы сообщника Andchir, собрал и оформил сниппет который используя функциональность eForm и modx API отправляет сообщение всем менеджерам сайта.
Решение:
Сниппет alertToManagers
<?php
function alertToManagers( &$fields ){
global $modx;
foreach ($fields as &$value){
$value = str_replace("\n",'<br />',$value);
}
$reportTpl = $fields['reportTpl'];
$txt = $modx->parseChunk($reportTpl, $fields, '[+', '+]');
$txt = str_replace("\n",'',$txt);
$txt = $modx->db->escape($txt);
$table = $modx->getFullTableName("manager_users");
$managers = $modx->db->select('id', $table);
$managers = $modx->db->getColumn('id', $managers);
for($i=0; $i<count($managers); $i++){
$modx->sendAlert('alert',$managers[$i],1, 'Message to All!', $txt,1);
}
return true;
}
?>
Делаем на странице следующий
вызов eForm.
[!eForm? &runSnippet=`alertToManagers` &protectSubmit=`0` &debug=`1` &noemail=`1` &formid=`ContactForm` &tpl=`form` &report=`report` &subject=`Сообщение` &eFormOnBeforeMailSent=`alertToManagers`!]
Здесь &protectSubmit=`0` &debug=`1` необходимо поставить в противоположные значения
на боевом сайте, или вообще убрать. Если нужно вдобавок отправлять письмо, то нужно убрать &noemail=`1` и сделать соответствующие настройки адресов.
Для примера привожу
чанки form и report, чтобы вы могли протестировать сниппет.
form:
[+validationmessage+]
<form id="ContactForm" method="post" action="">
<p>
Обязательные к<br />заполнению поля
</p>
<p>
<label for="name">Ф.И.О.</label><br />
<input type="text" id="name" name="name" eform="Ф.И.О.:string:1" />
</p>
<p>
<label for="message">Сообщение</label><br />
<textarea id="message" name="message" eform="Сообщение:string:1"></textarea>
<br />
<input type="submit" name="submit" id="submit" value="Отправить" />
</p>
<input type="hidden" name="reportTpl" value="report" />
</form>
Обратите внимание на атрибут id тега form, он должен совпадать с параметром &formid, а также на скрытое поле, в котором нужно указать название чанка report.
report:
<div style="font-family: Tahoma, Arial, sans-serif;">
<h1>Сообщение всем-всем-всем</h1>
<strong>Ф.И.О.:</strong> [+name+]<br />
<strong>Сообщение:</strong><br />
[+message+]
</div>
Тестировал на modx 0.9.6.3, eform 1.4.4.5.
Примечания:
1. Чтобы отправлять сообщение только админу необходимо изменить сниппет следующим образом
<?php
function alertToManagers( &$fields ){
global $modx;
$reportTpl = $fields['reportTpl'];
$txt = $modx->parseChunk($reportTpl, $fields, '[+', '+]');
$txt = str_replace("\n","",$txt);
$txt = $modx->db->escape($txt);
$modx->sendAlert('alert',1,1, 'Message to Admin only', $txt,1);
return true;
}
?>
Первая единица в вызове senAlert определяет id пользователя, которому будет послано сообщение. Допускается писать там username, но это влечет за собой лишний запрос к базе данных.
2. Большая часть кода здесь нужна для работы eForm. Если требуется просто послать алерт всем менеджерам из сниппета, достаточно будет следующих строк:
global $modx;
$subject = 'Тема сообщения'
$txt = 'Текст сообщения'
$table = $modx->getFullTableName("manager_users");
$managers = $modx->db->select('id', $table);
$managers = $modx->db->getColumn('id', $managers);
for($i=0; $i<count($managers); $i++){
$modx->sendAlert('alert',$managers[$i],1, $subject, $txt,1);
}
Буду рад предложениям и пожеланиям.