Новости

07.04.2011

Теперь при добавлении товара в скрипте интернет магазина не будет открыватся страница с корзиной.

подробнее...

04.03.2011

Глобальное исправление косяков, перекачайте скрипты.
Положил предварительную версию Quick.Cart

подробнее...

В этом боксе №1 можно что-то написать
A A A

Делаем форму обратной связи с капчей

Очень не хватает в бесплатной версии формы обратной связи, ведь если вы открыты для общения и ваш сайт сделан для посетителей, а не роботов, то рано или поздно кто-то из посетителей захочет с вами связаться. Да и если ваш сайт, сайт организации или фирмы, то вы обязательно рассчитываете на общение со своим посетителем.  А как ему это сделать? Ну не писать, в самом деле, свой E-mail на самом видном месте, да и на всякий случай от спама защитится, не мешает. Вот давайте эту форму обратной связи и сделаем, точнее страницу для контактов, если у вас сайт организации. Как выглядит данная форма, вы можете увидеть на вкладке Контакты этого сайта. А ещё мне не понятно, почему разработчики скрипта зажали эту функцию.  Нет, конечно, я понимаю, что они хотят получить оплату за свою работу, но данная функция, на просторах интернета сто раз уже описана и разжевана. Раньше я вставлял форму в страницу и передавал выполнение на внешний файл, но мне такое решение кажется не очень элегантным.

А так как я вожусь с этим скриптом давно, пришло и решение. Вот почему, прежде чем дать готовое решение я стараюсь с начала написать предпосылки, надеясь, что они приведут вас к освоению данной системы управления сайтом и расширению её функционала.

 

 

В файл соответствующего языка, для русского это lang /ru.php добавим переменные:

 

$lang['Feedback_page']= "Страница обратной связи";
$lang['Website_email']= "Email сайта";
$lang['Email']= "Ваш Email";
$lang['Contents_letter']= "Ваше сообщение";
$lang['Subject']= "Тема";
$lang['Captcha_code']= "Код проверки";
$lang['send']= "Отправить";
$lang['Your_message_is_sent']= "Ваше сообщение отправлено";
$lang['Мessage _send_error'] = "Произошла ошибка при отправке сообщения";

 

После:

 

// plugins

 

 

В файл templates/messages.tpl добавим, что будет выводиться при отправке сообщения или ошибке:

 

<!-- BEGIN FEEDBACK_OK -->
<div class="message" id="ok">
<h3>$lang[Your_message_is_sent]</h3>
</div>
<!-- END FEEDBACK_OK -->
<!-- BEGIN FEEDBACK_NO -->
<div class="message" id="error">
<h3>$lang['Мessage _send_error']<br />
<a href="javascript:history.back();">&laquo; $lang['back']</a>
</h3>
</div>
<!-- END FEEDBACK_NO -->

 

 

Капчу для этого дополнения мы будем использовать с проекта www.captcha.ru, не люблю я велосипеды изобретать.

Поместим папку с нашей капчей в папку plugins скрипта, теперь нам её надо подключить (с настройками самой капчи вы я думаю, разберётесь – там очень всё подробно).

 

Подключить капчу нам надо до старта сессии, для этого в файле index.php поместим следующую строку :

 

require_once DIR_PLUGINS.'kcaptcha/kcaptcha.php';

 

перед:

 

session_start( );

 

Всё капчу мы подключили, теперь пойдём дальше.

 

Переменную, отвечающую за соответствие странице выводимого нами кода, мы будем хранить в файле config/lang_ru.php, а для другого языка в соответствующем файле. Откроем файл и вставим нашу переменную:

 

$config['feedback_page'] = 2;
$config['feedback_email'] = "1@1.ru";

 

Перед:

 

$aMenuTypes[1]

 

Выбор нашей страницы обратной связи из административной части скрипта, будет находиться в установках на вкладке страницы, за отображение установок и вкладок отвечает файл templates/admin/settings.tpl, откроем его и вставим:

<tr>
<td>$lang[Feedback_page]</td>
<td>
<select name="feedback_page">
<option value="">$lang['none']</option>
$sFeedbackPageSelect
</select>
</td>
</tr>

 

Перед:


<!-- tab pages -->

А после:

<!-- pass end -->

Вставим

<!-- feedback start -->
<tr class="l1">
<th>
$lang[Website_email]
</th>
<td>
<input type="text" name="feedback_email" value="$config[feedback_email]" class="input" size="40" alt="feedbackemail" />
</td>
</tr>
<!-- feedback end -->


Откроем файл actions_admin/settings.php и вставим:

 

$sFeedbackPageSelect = $oPage->throwPagesSelectAdmin( $config['feedback_page'] );

После:

$sWysiwygSelect     = throwTrueFalseSelect( $config['wysiwyg'] );


Теперь нам осталось сделать функцию отображения нашей формы обратной связи в клиентской части.

Открываем файл actions_client/p.php и вставляем:

 

if( isset( $config['feedback_page'] ) && is_numeric( $config['feedback_page'] ) && $iContent == $config['feedback_page'] ){
$sFeedback = isset( $_POST['sSend'] ) ? mailFeedbac ( $_POST ): $oTpl->tbHtml( $aData['sTemplate'], 'FEEDBACK' );
}
else{
$sFeedback = null;
}


После:


$aData['sDescriptionFull'] = $aData['sDescriptionShort'];



Далее открываем файл templates/pages_default.tpl и вставляем переменную, в которую будет передаваться  форма обратной связи.

$sFeedback

После:

<h3>$aData[sName]</h3>

А так же вставить после:

<!-- END BANNER -->

Форму обратной связи

<!-- BEGIN FEEDBACK -->
<script type="text/javascript" src="$config[dir_core]checkForm.js"></script>
<form action="$aData[sLinkName]" method="post" onsubmit="return checkForm( this );" id="Feedback">
<fieldset>
<input type="hidden" name="sSend" value="" />
<label for="contactName">$lang[Name]:</label><br>
<input type="text" name="sName" class="input" alt="simple" /><br><br />
<label for="contactEmail">$lang[Email]:</label><br>
<input type="text" name="sMailer" class="input" alt="email" /><br> <br />
<label for="contactTopic">$lang[Subject]:</label><br>
<input type="text" name="sSubject" class="input" alt="simple" /><br><br />
<label for="contactContent">$lang[Contents_letter]:</label><br>
<textarea cols="25" rows="8" name="sContentsLetter" title="simple" /></textarea><br><br />
<img src="plugins/kcaptcha? $session_name=$session_id"/> <br /><br />
<label for="contactContent">$lang[Captcha_code]:</label><br />
<input type="text" name="keystring"  class="input" alt="simple" id="keystring" /> <br /><br /><br />
<input type="submit" value="$lang[send]" class="submit" id="submitt" />
</fieldset>
</form>
<!-- END FEEDBACK -->

 

Теперь нам остаётся вставить в файл core/common.php практически стандартную функцию обратной связи (проверка заполнения формы, правильность написания Email, проверка капчи и формирование заголовка письма) :

 

 

/**mailFeedbac
* Функция проверки написания мыла
* Функция отправки мыла
*/
function mailFeedbac ( $aForm, $sFile = 'messages.tpl', $sFeedbackmail = null ){
extract( $aForm );
$oTpl =& TplParser::getInstance( );
if( !empty( $sSubject ) && !empty( $sContentsLetter )  && checkEmail( $sMailer ) === 1 ){
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] ==  $_POST['keystring']){
if( !isset( $sFeedbackmail ) )
$sFeedbackmail = $GLOBALS['config']['feedback_email'];
$sName  = "=?".$GLOBALS['config']['charset']."?B?".base64_encode( $sName )."?=";
$headers  = "MIME-Version: 1.0rn";
$headers .= "Content-Type: text/plain; charset=".$GLOBALS['config']['charset']."rn";
$headers .= "Date: ".date('r', time())."rn";
$headers .= "From: "".$sName."" <".$sMailer.">rn";
$headers .= "X-Mailer: Quick.Cms.Lite Send E-mailrn";

mail($sFeedbackmail,$sSubject,$sContentsLetter,$headers);
unset($_SESSION['captcha_keystring']);
return $oTpl->tbHtml( $sFile, 'FEEDBACK_OK' );
}
else{
return $oTpl->tbHtml( $sFile, 'FEEDBACK_NO' );
}
}
}

function checkEmail( $sEmail ){
return preg_match( "/^[a-z0-9_.-]+([_.-][a-z0-9]+)*@([a-z0-9_.-]+([.][a-z]{2,4}))+$/i", $sEmail );
}
// Конец функции обратной связи

 

Вставляем после:

 

// end function displayDate

 

 

Теперь можем заняться оформлением нашей формы обратной связи, для этого в файл стилей templates/plugins.css после:

 

/*

Quick.Cms default plugins stylesheet

/*/

Вставим:

 

 

#Feedback{float: left;width:195px;margin: 0px 15px 10px 5px;}
#Feedback .input,#Feedback textarea{width:180px;font-size:1em;
padding: 5px;
border: solid 1px #E5E5E5;
outline: 0;
background: #FFFFFF url('bg_form.png') left top repeat-x;
background: -webkit-gradient(linear, left top, left 25, from(#FFFFFF), color-stop(4%, #EEEEEE), to(#FFFFFF));
background: -moz-linear-gradient(top, #FFFFFF, #EEEEEE 1px, #FFFFFF 25px);
box-shadow: rgba(0,0,0, 0.1) 0px 0px 8px;
-moz-box-shadow: rgba(0,0,0, 0.1) 0px 0px 8px;
-webkit-box-shadow: rgba(0,0,0, 0.1) 0px 0px 8px;
}
#Feedback .input:focus, #contactPanel textarea:focus {border-color: #C9C9C9;-webkit-box-shadow: rgba(0, 0, 0, 0.15) 0px 0px 8px; }
#Feedback .submit  {width: auto;padding: 9px 15px;background: #586c89;border: 0;font-size: 14px;color: #FFFFFF;-moz-border-radius: 5px;-webkit-border-radius: 5px;}

Теперь можно ждать послания от ваших посетителей
  • icomail.txt, Страница с кодом в текстовом формате

Комментарии

Пётр
2011-04-08 21:04
спасибо, инфа пригодилась. Нужно теперь плагин новестей полноценных написать. С арховом и последними новостями.
Вообще я над этим работаю - тем более что вывод новостей поляки сделали(какой никакой) осталось сделать архив.