[QUOTE]
Денис Сон написал:
Видимо, при отправке формы до вашего кода выполняется какой-то другой код. Если это компонент - то сначала выполняется код в компоненте, а потом уже код в шаблоне.
Т.е. может быть так, что сначала выполняется код компонента (может там и отправляется форма если массив $_POST не пуст), а до вашего кода (если он в template.php или result_modifier.php или component_epilog.php) ход так и не доходит.[/QUOTE]
Как я понял обработчик находится прямо в файле шаблона формы обратной связи. Ниже листинг файла zayv_obrm.php уже с включенными фрагментами моего кода и немного яваскрипта для подсказок в форме(подсказки работают.
[CODE]<?
define('STOP_STATISTICS', true);
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
$GLOBALS['APPLICATION']->RestartBuffer();
Include('BEESMS.class.php');
global $APPLICATION, $USER;
$msg = array();
$suc = array();
CModule::IncludeModule('iblock');
if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
!empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&
strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'):
echo "<sc ript>parent.document.getElementById('_out').innerHTML = '";
//Генерируем случайное число
$rnd=rand(10000,99999);
if (isset ($_POST['sendsms'])){
// Проверка корректности введенного номера
if(iconv_strlen($_POST['PHONE'])>=6){
$i=0;
// Открываем "file.txt" в режиме чтения
$fp = fopen("file.txt", "r");
if ($fp){
while (!feof($fp)){
$mytext = fgets($fp);
$array[$i]=trim($mytext);
$i++;
}
}
fclose($fp);
$PHONE = $_POST['PHONE'];
$key = array_search($PHONE, $array);
// Запись номера и кода в файл
if($key===FALSE){
$filename = 'file.txt';
$somecontent = "\n".$_POST["PHONE"]."\n".$rnd;
// Вначале давайте убедимся, что файл существует и доступен для записи.
if (is_writable($filename)){
// В нашем примере мы открываем $filename в режиме "дописать в конец".
// Таким образом, смещение установлено в конец файла и
// наш $somecontent допишется в конец при использовании fwrite().
if (!$handle = fopen($filename, 'a')) {exit;}
// Записываем $somecontent в наш открытый файл.
if (fwrite($handle, $somecontent) === FALSE){exit;}
fclose($handle);
}
// Посылаем запрос на отправку кода подтверждения на введенный пользователем номер
$sms_text='Ваш код:'.' '.$rnd;
$target=$PHONE; //Поле Телефон, заполненное пользователем
$sender_name='Sender name';
$sms= new BEESMS('user','pass');
$result=$sms->post_message($sms_text, $target, $sender_name);
echo $result;
echo "Код подтверждения отправлен на номер ".$_POST["PHONE"];
}
else {echo "На номер уже был отправлен код";}
}else{echo "Короткий номер";}
}
// Проверка кода
if (isset ($_POST['ok'])) {
$i=0;
// Открываем "file.txt" в режиме чтения
$fp = fopen("file.txt", "r");
if ($fp){
while (!feof($fp)){
$mytext = fgets($fp);
$array[$i]=trim($mytext);
$i++;
}
}
$arr=$array;
fclose($fp);
$PHONE = $_POST['PHONE'];
$key = array_search($PHONE, $arr);
$code=$arr[$key+1];
$PHONEex=$arr[$key];
if ($code == $_POST["code"] && $PHONEex==$_POST["PHONE"]){
echo "Номер подтвержден";
// Удаление номера с кодом из файла
$file=file("file.txt");
$fp=fopen("file.txt","w");
for($i=0;$i<sizeof($file);$i++){
if($i==$key){
unset($file[$i]);
unset($file[$i+1]);
}
}
fputs($fp,implode("",$file));
fclose($fp);
}else{echo "Неверный номер или код подтверждения";}
}
echo "'</sc ript>";
if (isset($_REQUEST['NAME'])) {
if (empty($_REQUEST['MAIL']) || strpos($_REQUEST['MAIL'], '@') === false || strpos($_REQUEST['MAIL'], '.') === false) {
$msg["MAIL"] = '- Неверный E-mail';
}
if (empty($_REQUEST['NAME']) || !trim($_REQUEST['NAME'])) {
$msg["NAME"] = '- Не заполнены обязательные поля';
}
if (empty($_REQUEST['PHONE']) || !trim($_REQUEST['PHONE'])) {
$msg["PHONE"] = '- Не заполнены обязательные поля';
}
if (empty($_REQUEST['MESSAGE']) || !trim($_REQUEST['MESSAGE'])) {
$msg["MESSAGE"] = '- Не заполнены обязательные поля';
}
if ( $_REQUEST['personal'] != 'Y' ) {
$msg["personal"] = '- Не заполнены обязательные поля';
}
if(!count($msg)) {
$message = "
Фамилия: ".trim(htmlspecialcharsbx(@$_REQUEST['NAME']))."\n<br/>
Имя: ".trim(htmlspecialcharsbx(@$_REQUEST['NAME2']))."\n<br/>
Отчество: ".trim(htmlspecialcharsbx(@$_REQUEST['NAME3']))."\n<br/>
Адрес: ".trim(htmlspecialcharsbx(@$_REQUEST['ADDR']))."\n<br/>
E-mail: ".trim(htmlspecialcharsbx(@$_REQUEST['MAIL']))."\n<br/>
Телефон: ".trim(htmlspecialcharsbx(@$_REQUEST['PHONE']))."\n<br/>
Текст вопроса: ".trim(htmlspecialcharsbx(@$_REQUEST['MESSAGE']))."\n<br/>
";
$el = new CIBlockElement;
$arData = array(
"IBLOCK_ID" => 17,
"CHECK_PERMISSIONS" => 'N',
"ACTIVE_FROM" => date('d.m.Y H:i:s'),
"IBLOCK_SECTION_ID" => false,
"NAME" => 'Обратная связь',
"DETAIL_TEXT"=> $message,
"PROPERTY_VALUES" => array(
)
);
if($ID = $el->Add($arData)) {
$arSend = array(
'FORM_NAME' => 'Обратная связь',
'FORM_MESSAGE' => $message
);
CEvent::Send('FORM_MESSAGE_SEND_ZAYV_OBRM', 's1', $arSend);
$suc[] = 'Сообщение отправлено!';
$_REQUEST['ADDR'] = '';
$_REQUEST['NAME'] = '';
$_REQUEST['PHONE'] = '';
$_REQUEST['MESSAGE'] = '';
$_REQUEST['MAIL'] = '';
$_REQUEST['personal'] = '';
}
else {
$msg['add'] = "Ошибка";
}
}
}
?>
<fo rm action="" method="post" target="ifr">
<div class="title-box">Обращение</div>
<div class="form-box">
<div class="item">
<a style="color:#ff0000" title="Обязательно для заполнения">*</a>
<input
value="<?=
trim(htmlspecialcharsbx(@$_REQUEST['NAME'])) ?>" <?=(array_key_exists('NAME', $msg) ?
'class="error"' : '')?> id="surname" type="text" name="NAME"
placeholder="Фамилия"/>
</div>
<div class="item">
<a style="color:#ff0000" title="Обязательно для заполнения">*</a>
<input
value="<?=
trim(htmlspecialcharsbx(@$_REQUEST['NAME'])) ?>" <?=(array_key_exists('NAME', $msg) ?
'class="error"' : '')?> id="name" type="text" name="NAME2"
placeholder="Имя"/>
</div>
<div class="item">
<a style="color:#ff0000" title="Обязательно для заполнения">*</a>
<input
value="<?=
trim(htmlspecialcharsbx(@$_REQUEST['NAME'])) ?>" <?=(array_key_exists('NAME', $msg) ?
'class="error"' : '')?> id="patronymic" type="text" name="NAME3"
placeholder="Отчество"/>
<sc ript>
// Замените на свой API-ключ
var token = "my token";
// Инициализирует подсказки по ФИО на указанном элементе
function init($surname, $name, $patronymic) {
var self = {};
self.$surname = $surname;
self.$name = $name;
self.$patronymic = $patronymic;
var fioParts = ["SURNAME", "NAME", "PATRONYMIC"];
$.each([$surname, $name, $patronymic], function(index, $el) {
var sgt = $el.suggestions({
token: token,
type: "NAME",
triggerSelectOnSpace: false,
hint: "",
noCache: true,
params: {
// каждому полю --- соответствующая подсказка
parts: [fioParts[index]]
},
onSearchStart: function(params) {
// если пол известен на основании других полей,
// используем его
var $el = $(this);
params.gender = isGenderKnown.call(self, $el) ? self.gender : "UNKNOWN";
},
onSelect: function(suggestion) {
// определяем пол по выбранной подсказке
self.gender = suggestion.data.gender;
}
});
});
};
// Проверяет, известен ли пол на данный момент
function isGenderKnown($el) {
var self = this;
var surname = self.$surname.val(),
name = self.$name.val(),
patronymic = self.$patronymic.val();
if (($el.attr('id') == self.$surname.attr('id') && !name && !patronymic) ||
($el.attr('id') == self.$name.attr('id') && !surname && !patronymic) ||
($el.attr('id') == self.$patronymic.attr('id') && !surname && !name)) {
return false;
} else {
return true;
}
}
init($("#surname"), $("#name"), $("#patronymic"));
</sc ript>
</div>
<div class="item">
<a style="color:#ff0000" title="Обязательно для заполнения">*</a>
<input
value="<?=
trim(htmlspecialcharsbx(@$_REQUEST['ADDR'])) ?>" <?=(array_key_exists('ADDR', $msg) ?
'class="error"' : '')?> id="address" type="text" name="ADDR"
placeholder="Почтовый адрес"/>
<sc ript>
$("#address").suggestions({
token: token,
type: "ADDRESS",
/* Вызывается, когда пользователь выбирает одну из подсказок */
onSelect: function(suggestion) {
console.log(suggestion);
}
});
</sc ript>
</div>
<div class="item">
<input
value="<?=
trim(htmlspecialcharsbx(@$_REQUEST['MAIL'])) ?>" <?=(array_key_exists('MAIL', $msg) ?
'class="error"' : '')?> type="text" name="MAIL"
placeholder="E-mail"/>
</div>
<div class="item">
<a style="color:#ff0000" title="Обязательно для заполнения">*</a>
<table>
<input
value="<?=
trim(htmlspecialcharsbx(@$_REQUEST['PHONE'])) ?>" <?=(array_key_exists('PHONE', $msg) ?
'class="error"' : '')?> type="text" name="PHONE"
placeholder="Контактный телефон"/>
<input type="submit" name="sendsms" value="Выслать код">
<tr><td><br/>
<tr><td>Код подтверждения<td><input name="code" size="6">
<tr><td>
<tr><td><input type="submit" name="ok" value="Подтвердить"><td colspan="2" id="_out">
</table>
</div>
<div class="item">
<a style="color:#ff0000" title="Обязательно для заполнения">*</a>
<textarea <?=(array_key_exists('MESSAGE', $msg) ?
'class="error"' : '')?> name="MESSAGE"
placeholder="Текст обращения"><?=
trim(htmlspecialcharsbx(@$_REQUEST['MESSAGE'])) ?></textarea>
</div>
<div class="item">
<input
type="checkbox" name="personal"
value="Y" <?if($_REQUEST['personal'] ==
'Y'):?>checked<?endif;?>/> <a
href="/obrabotka-personalnykh-dannykh/">Согласен</a> с обработкой персональных данных <?=(array_key_exists('personal', $msg) ?
'<span st yle="color: #d7252c;">(обязательно)</span>' :
'')?>
</div>
<?if(count($suc)):?>
<div class="success"><?=implode('<br/>', $suc)?></div>
<?endif;?>
<p style="color:#ff0000" >* - поле обязательно к заполнению</p>
<div class="bt">
<button type="submit">отправить</button>
</div>
<div class="cancel">
<a href="" class="button">Отменить</a>
</div>
</div>
</form>
<ifr ame name="ifr" frameborder="0" height="0" width="0" style="visibility:hidden"></iframe>
<?else:
LocalRedirect("/personal/");
endif;
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/epilog_after.php");?>[/CODE]
Это тестовый начальный вариант поэтому все вместе, сейас необходимо получить функционал, потом причешу все это.