ИМХО, вещь довольно удобная, т.к. это своеобразный feedback, с помощью которого можно получать письма от посетителей сайта не открывая свой имейл. Также в настройках такие сообщения можно запретить совсем, или запретить незарегистрированным пользователям.
Использовать эту форму или нет, решать конечно же, вам. Ну а в этой статье будет разобран небольшой хак этой самой формы отправки писем для незарегистрированных пользователей.
В первую очередь, если вы хотите использовать функцию отправки писем, вам необходимо ее включить.
Идем в админку - Основные настройки (global settings) - Настройки мемберов (Member Settings), ставим Да для Разрешить мембер-ту-мембер сообщения и Разрешить не-мемберам посылать сообщения (Allow Member-2-Member Service и Allow non-members to send messages).
Теперь о том что мы будем делать, и что для этого нам понадобится. В форме membermailform-notloggedin мы добавим дополнительное поле URL, а также приведем к должному виду письма, которые будут приходить при заполнении этой формы.
Редактированию будут подвержены следующие файлы:
1. ../nucleus/forms/membermailform-notloggedin.template (а также можно и membermailform-loggedin.template чтобы привести все к единому стилю).
2. ../nucleus/libs/ACTION.php
Если вы собираетесь редактировать файлы непосредственно с вашего веб-хостинга, то обязательно сделайте резервные версии файлов. Мало ли что

Значит так, переходим теперь к редактированию.
Открываем membermailform-notloggedin.template любым текстовым редактором (советую Crimson Editor) и заменяем все что там есть на:
<div class="my" id="margin">
<form method="post" action="<%formdata(actionurl)%>">
<input type="hidden" name="memberid" value="<%formdata(memberid)%>">
<input type="hidden" name="action" value="sendmessage">
<input type="hidden" name="url" value="<%formdata(url)%>">
Ваше имя: <br><input id="but" class="formfield" style="width:150px" type="text" name="user"><br>
Ваш и-мейл: <br><input id="but" class="formfield" style="width:150px" type="text" name="frommail">
<br>
Ваш сайт: <br><input id="but" class="formfield" style="width:150px" type="text" name="site">
<br><br>
Сообщение<br>
<textarea class="formfield" name="message" rows="<%formdata(rows)%>" cols="<%formdata(cols)%>"></textarea><br><input class="formbutton" type="submit" value="<%text(_MEMBERMAIL_SUBMIT)%>">
</form>
</div>
Примечание: все использованные стили будут указаны в конце.
Сохраняем и закрываем membermailform-notloggedin.template. Открываем ACTION.php, ищем (примерно строка 98 )
function sendMessage() {
global $CONF, $member;
$error = $this->validateMessage();
if ($error != '')
return array('message' => $error);
if (!$member->isLoggedIn()) {
$fromMail = postVar('frommail');
$fromName = _MMAIL_FROMANON;
} else {
$fromMail = $member->getEmail();
$fromName = $member->getDisplayName();
}
$tomem = new MEMBER();
$tomem->readFromId(postVar('memberid'));
$message = _MMAIL_MSG . ' ' . $fromName . "\n"
. '(' . _MMAIL_FROMNUC. ' ' . $CONF['IndexURL'] .") \n\n"
. _MMAIL_MAIL . " \n\n"
. postVar('message');
$message .= getMailFooter();
$title = _MMAIL_TITLE . ' ' . $fromName;
mail($tomem->getEmail(), $title, $message, 'From: '. $fromMail);
if (postVar('url')) {
redirect(postVar('url'));
} else {
$CONF['MemberURL'] = $CONF['IndexURL'];
if ($CONF['URLMode'] == 'pathinfo')
$url = createMemberLink($tomem->getID());
else
$url = $CONF['IndexURL'] . createMemberLink($tomem->getID());
redirect($url);
}
exit;
Меняем на:
function sendMessage() {
global $CONF, $member;
$error = $this->validateMessage();
if ($error != '')
return array('message' => $error);
if (!$member->isLoggedIn()) {
$fromMail = postVar('frommail');
if (!isValidMailAddress($fromMail))
doError(_ERROR_BADMAILADDRESS);
$fromName = postVar('user');
$fromSite = postVar('site');
} else {
$fromMail = $member->getEmail();
$fromName = $member->getDisplayName();
$fromSite = $member->getURL();
}
$tomem = new MEMBER();
$tomem->readFromId(postVar('memberid'));
$message = _MMAIL_MSG . ' ' . $fromName . "\n"
. '[' . $fromSite . "]\n\n"
. _MMAIL_MAIL . " \n\n"
. postVar('message');
$message .= getMailFooter();
$title = _MMAIL_TITLE . ' ' . $fromName;
mail($tomem->getEmail(), $title, $message, 'From: '. $fromMail);
if (postVar('url')) {
redirect(postVar('url'));
} else {
$CONF['MemberURL'] = $CONF['IndexURL'];
if ($CONF['URLMode'] == 'pathinfo')
$url = createMemberLink($tomem->getID());
else
$url = $CONF['IndexURL'] . createMemberLink($tomem->getID());
redirect($url);
}
exit;
Сохраняем и заливаем все на сервер.
Для того чтобы, как упоминалось выше, все соответствовало стилю, можно отредактировать и membermailform-loggedin.template (хотя действие хака на него не распространяется). У меня содержимое membermailform-loggedin.template следующее:
<div class="my" id="margin">
<form method="post" action="<%formdata(actionurl)%>">
<input type="hidden" name="memberid" value="<%formdata(memberid)%>">
<input type="hidden" name="action" value="sendmessage">
<input class="formfield" type="hidden" name="url" value="<%formdata(url)%>">
Сообщение: <br>
<textarea class="formfield" name="message" rows="<%formdata(rows)%>" cols="<%formdata(cols)% >"></textarea>
<br>
<input class="formbutton" type="submit" value="<%text(_MEMBERMAIL_SUBMIT)%>">
</form></div>
Что же все эти операции дают?
Во-первых, в форме отправлений сообщений появляется новая графа “URL”, во вторых письма которые приходят вам на имейл выглядят лучше (см. скриншот 1), в третьих, для зарегистрированных пользователей автоматически выставляется сайт, указанный при регистрации (см. скриншот 2).
Увидеть данную форму в действии можно ЗДЕСЬ
Использованные стили: (для использования таких же стилей, которые указаны в примере, добавьте следующие строки в свой .css файл)
.my {font-size:10px; font-family:verdana;}
#margin {margin-left:40px;}
#but {font-size:10px;}
.formbutton {width:90px; font-size:10px; font-family:Verdana; background-color:#bfbfbf; border:1px solid #a9a9a9; color:#353535;}
.formbutton:hover {background-color:#fbc44f; border:1px solid #000000; color:#000000;}
.formfield {font-family:Verdana; background-color:#f4f4f4; border:1px solid #9f9f9f; color:#4a4a4a; margin:1px;}
.formfield:focus {background-color:#ffffff; border:1px solid #000000;}
Скриншот 1:

Скриншот 2:

Желаю удачи.
По всем вопросам, обращайтесь
Скачать все необходимые файлы в архиве можно здесь (19 KB)
Этеншен! Файлы для версии 3.21! На 3.22 не проверялось.
13:02:47 - Просмотров:
41623x - Категория: Nucleus Хак - Posted by: Suvoroff
--------------------------