Универсальная форма обратной связи — feedBackForm

Вариант по-умолчанию

Обработчик PHP внизу статьи. Подходит для всех вариантов.

Вариант по-умолчанию — HTML

Содержимое скрыто под спойлер. Показать

Заказать обратный звонок

Имя*:
Номер телефона*:
E-mail:
Цвет:
Вкус:
Комментарий:
Скрыть

Вариант по-умолчанию — CSS

Содержимое скрыто под спойлер. Показать
.feedBackWrapper {
    border: 0;
    margin: 0;
    padding:0 25px;
}
.feedBackWrapper table {
    width:100%;
}
.feedBackWrapper td {
    padding: 0;
    vertical-align: middle;
}
.feedBackWrapper .fbw-title {
    font-size: 16px;
    white-space: nowrap;
    padding-right: 10px;
    width:150px;
}
.feedBackWrapper .form-h3 {
    text-align: center;
    margin-top: 15px;
}
.feedBackWrapper .ajaxgo {
    padding: 5px 40px;
    background: #FFC200;
    background: -moz-linear-gradient(top,  #ffd65e 0%, #ffc200 43%, #fcb400 100%);
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffd65e), color-stop(43%,#ffc200), color-stop(100%,#fcb400));
    background: -webkit-linear-gradient(top,  #ffd65e 0%,#ffc200 43%,#fcb400 100%);
    background: -o-linear-gradient(top,  #ffd65e 0%,#ffc200 43%,#fcb400 100%);
    background: -ms-linear-gradient(top,  #ffd65e 0%,#ffc200 43%,#fcb400 100%);
    background: linear-gradient(to bottom,  #ffd65e 0%,#ffc200 43%,#fcb400 100%);
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffd65e', endColorstr='#fcb400',GradientType=0 );
    font-size: 18px;
    border-radius: 3px;
    cursor:pointer;
    outline: none;
    border:0;
    border-bottom: 3px solid #D3A000;
}
.feedBackWrapper .ajaxgo:focus {
    outline:1px dashed #ccc;
}
.feedBackWrapper .ajaxgo:hover {
    background: #FFC200;
}
.feedBackWrapper .ajaxgo:active {
    border: 0;
    margin-top: 3px;
    outline:none;
}
.feedBackWrapper .ajaxgo-wr{
    height: 38px;
    padding-top:25px;
    text-align:center;
    margin-bottom: 25px;
    position: relative;
}
.feedBackWrapper .fbw-text{
    margin: 6px 0;
    box-sizing: border-box;
    padding: 6px;
    border: 1px solid #ccc;
    outline: none;
    box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
    width:100%;
    font-family:inherit;
}
.feedBackWrapper .fbw-text:focus {
    border-color: #66afe9 !important;
    outline: 0;
    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,1);
    box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,1);
}
.feedBackWrapper .ajax-trigger {
    text-align: center;
    padding: 1px;
}
Скрыть

Вариант по-умолчанию — JS

Содержимое скрыто под спойлер. Показать
$(document).ready(function(){
$(document.body).on("click", ".ajaxgo .ajaxgo_insite", send);

$(document.body).on("focus", "input", function(){$(this).css("border","");});

function send(){
	var wr = $(this).parents(".feedBackWrapper");
	var validate = true;
	wr.find(".isrequired").each(function(){
		if(!$(this).val().length){validate = false; $(this).css("border","1px solid #D22")}
	});
	if (validate){
		var need = {};
		need['header'] = "Контактная информация";
		need['fields'] = [];
		wr.find("input, select, textarea").each(function(){
		    var fieldElement = {};
		    //Checkbox, Radio
		    //Ожидаемая семантика:  / 
		    if($(this).attr('type') == 'checkbox' || $(this).attr('type') == 'radio'){
		        if($(this).prop('checked') == true){
        		    fieldElement['type'] = $(this).attr("type");
        		    fieldElement['title'] = $(this).attr("placeholder");
        		    fieldElement['value'] = $(this).attr("title");
        		    need['fields'][need['fields'].length] = fieldElement;
		        }
                return true;
		    }
		    fieldElement['type'] = $(this).attr("type") || 'text';
		    fieldElement['title'] = $(this).attr("placeholder");
		    fieldElement['value'] = $(this).val();
		    need['fields'][need['fields'].length] = fieldElement;
		});
		output = JSON.stringify(need);
		$.ajax({
			type: "POST",
			data: {data1: output},
			url:'js/mail.php',
			dataType:'json',
			success: function(data){
				wr.find(".ajaxgo.ajaxgo_insite").hide();
				wr.find(".successmsg").html(data.result);
				wr.find(".successmsg").fadeIn(300).css("display","inline-block");
			},
			error: function (xhr, ajaxOptions, thrownError){
				console.log(xhr.responseText);
			}
		});
	}
}
});
Скрыть

Форма с загрузкой по клику

Обработчик PHP внизу статьи. Подходит для всех вариантов.

Содержимое скрыто под спойлер. Показать
Заказать звонок

Скрыть

Форма с загрузкой файлов

Форма с загрузкой файлов — HTML

Содержимое скрыто под спойлер. Показать

Заказать обратный звонок

Имя*:
Комментарий:
Фото*:
Описание ожидаемого файла
Форматы: .jpg .jpeg .png; Размер не более 10 Мб
Еще одно фото
Скрыть

Форма с загрузкой файлов — CSS

Содержимое скрыто под спойлер. Показать
.upload_image_fbw_wr {
    border: 1px solid #ccc;
    padding: 10px;
    border-radius: 3px;
    margin-bottom: 10px;
}
.inputforupload-tip {
    /* padding-top: 5px; */
    /* border-top: 1px solid #ccc; */
    /* margin-top: 5px; */
    display: none;
    font-size: 12px;
}
.inputforupload-tip.inputforupload-error {
    color: #FB0606;
    font-size: 12px;
    display: block;
}
.add_foto_fbw {
    display: inline;
    border-bottom: 1px dashed rgba(0, 0, 0, 0.35);
    font-family: "Roboto Condensed";
    font-size: 16px;
    cursor: pointer;
}
.add_foto_fbw:hover {
    border-bottom: 1px solid rgb(8, 144, 222);
    box-shadow: 0 1px rgb(8, 144, 222);
}
.inputforupload-description {
    padding: 0 0 5px;
}
.feedBackWrapper {
    border: 0;
    margin: 0;
    padding:0 25px;
}
.feedBackWrapper table {
    width:100%;
}
.feedBackWrapper td {
    padding: 0;
    vertical-align: middle;
}
.feedBackWrapper .fbw-title {
    font-size: 16px;
    white-space: nowrap;
    padding-right: 10px;
    width:150px;
}
.feedBackWrapper .form-h3 {
    text-align: center;
    margin-top: 15px;
}
.feedBackWrapper .ajaxgo {
    padding: 5px 40px;
    background: #FFC200;
    background: -moz-linear-gradient(top,  #ffd65e 0%, #ffc200 43%, #fcb400 100%);
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffd65e), color-stop(43%,#ffc200), color-stop(100%,#fcb400));
    background: -webkit-linear-gradient(top,  #ffd65e 0%,#ffc200 43%,#fcb400 100%);
    background: -o-linear-gradient(top,  #ffd65e 0%,#ffc200 43%,#fcb400 100%);
    background: -ms-linear-gradient(top,  #ffd65e 0%,#ffc200 43%,#fcb400 100%);
    background: linear-gradient(to bottom,  #ffd65e 0%,#ffc200 43%,#fcb400 100%);
    filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffd65e', endColorstr='#fcb400',GradientType=0 );
    font-size: 18px;
    border-radius: 3px;
    cursor:pointer;
    outline: none;
    border:0;
    border-bottom: 3px solid #D3A000;
}
.feedBackWrapper .ajaxgo:focus {
    outline:1px dashed #ccc;
}
.feedBackWrapper .ajaxgo:hover {
    background: #FFC200;
}
.feedBackWrapper .ajaxgo:active {
    border: 0;
    margin-top: 3px;
    outline:none;
}
.feedBackWrapper .ajaxgo-wr{
    height: 38px;
    padding-top:25px;
    text-align:center;
    margin-bottom: 25px;
    position: relative;
}
.feedBackWrapper .fbw-text{
    margin: 6px 0;
    box-sizing: border-box;
    padding: 6px;
    border: 1px solid #ccc;
    outline: none;
    box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
    width:100%;
    font-family:inherit;
}
.feedBackWrapper .fbw-text:focus {
    border-color: #66afe9 !important;
    outline: 0;
    -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,1);
    box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,1);
}
.feedBackWrapper .ajax-trigger {
    text-align: center;
    padding: 1px;
}
Скрыть

Форма с загрузкой файлов — JS

Содержимое скрыто под спойлер. Показать
var copyTable = "<tr>"+$(".upload_image_fbw_wr").parents("tr").html()+"</tr>";
$(".add_foto_fbw").click(function(){
    var t = $(this);
    t.parents(".feedBackWrapper").find(".add_foto_fbw_row").before(copyTable);
    var itemnum = $(".upload_image_fbw_wr").length;
    $(".upload_image_fbw_wr").each(function(){
        t.parents("tr").find(".fbw-title").html("Фото "+$(this).index()+1 +":");
        t.find(".fbw-text").attr("placeholder","Фото "+$(this).index()+1 +":");
    });
    $(".upload_image_fbw_wr").last().parents("tr").find(".fbw-title").html("Фото "+itemnum+"<span style='color:red;'>*</span>:");
    $(".upload_image_fbw_wr").last().find(".fbw-text").attr("placeholder","Фото "+itemnum);
});
$(document.body).on("change", ".inputforupload", function(){
    var t = $(this);
    if(t[0].files[0] !== undefined){
		var re = /(\.jpeg|\.jpg|\.png)$/i;
		if(re.exec(t[0].files[0].name) && t[0].files[0].size < 10000000){
			var data = new FormData();
			data.append('file_attach', t[0].files[0]);
			var fileName = t[0].files[0].name;
					
			$.ajax({
				url: 'js/mail.php?files',
				type: 'POST',
				data: data,
				cache: false,
				dataType: 'json',
				processData: false, 
				contentType: false, 
				beforeSend: function(){
					t.siblings(".fa-spinner").removeClass("hidden");
					t.siblings(".inputforupload-tip").html("Форматы: .jpg .jpeg .png; Размер не более 10 Мб");
					t.siblings(".inputforupload-tip").removeClass("inputforupload-error");
				},
				success: function(data, textStatus, jqXHR){
					console.log(data);
					
					if(typeof data.error == 'undefined'){
						// Success so call function to process the form
						t.siblings(".inputforupload-tip").html("Файл загружен успешно!");
						t.siblings(".inputforupload-tip").show();
						t.siblings(".inputforupload-description").remove();
						t.siblings(".inputforupload-tip").removeClass("inputforupload-error");
						t.siblings(".fa-spinner").addClass("hidden");
						t.addClass("hidden");
						t.siblings(".inputforupload-name").html(fileName);
						t.siblings(".fbw-text").val(data.onlyfilename);
						t.siblings(".inputforupload-name").removeClass("hidden");    
						t.siblings(".inputforupload-name").attr("data-filename", data.onlyfilename);
						t.siblings(".inputforupload-name").addClass("extension-"+data.extension);
						t.parents(".upload_image_fbw_wr").css("border","");
					}else{
						// Handle errors here
						t.siblings(".inputforupload-tip").addClass("inputforupload-error");
						
						t.siblings(".fa-spinner").addClass("hidden");
						
						console.log('ERRORS: ' + data.error);
					}
				},
				error: function(xhr, textStatus, errorThrown){
					// Handle errors here
					console.log('ERRORS: ' + textStatus);
					console.log(xhr.responseText);
					// STOP LOADING SPINNER
					//t.siblings(".fa-spinner").hide(300);
					t.siblings(".inputforupload-tip").html("Ошибка:(");
					t.siblings(".inputforupload-tip").addClass("inputforupload-error");
					t.val("");
				}
			});
		}else{
			//console.log(t[0].files[0].size);
			t.siblings(".inputforupload-tip").html("Форматы: .jpg .jpeg .png; Размер не более 10 Мб");
			t.siblings(".inputforupload-tip").addClass("inputforupload-error");
			t.val("");
		}
	}
});

Обработчик PHP внизу статьи. Подходит для всех вариантов.

Скрыть

Обработчик PHP для всех вышеописанных вариантов:

Содержимое скрыто под спойлер. Показать
<?php
$secret_foldername = "form_upload_files_7y3t789h";
$sitename = $_SERVER['HTTP_HOST'];
// Загрузка фйлов на сервер
if(isset($_GET['files'])){
    $data = array();
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randomString = '';
    for ($i = 0; $i < 5; $i++) {
        $randomString .= $characters[rand(0, strlen($characters) - 1)];
    }
	$error = false;
	$files = array();
	$dateForFile = date('Y-m-d-H-i-s');
	$uploaddir = $_SERVER['DOCUMENT_ROOT'].'/'.$secret_foldername.'/';
	
    if (!file_exists($uploaddir)) {
        if(!mkdir($uploaddir, 0755, true)){
            $error = "Ошибка создания папки \"".$uploaddir."\". Код - dir01";
            
        }
    }
    if(!$error){
        foreach($_FILES as $file){
            $path_info = pathinfo($file['name']);
            $onlyfilename = $dateForFile."-".$randomString."-".basename($file['tmp_name'].".".$path_info['extension']);
            $newfilename = $uploaddir.$onlyfilename;
            
        	if(move_uploaded_file($file['tmp_name'], $newfilename)){
        		$files[] = $uploaddir .$file['name'];
        	}
        	else{
        	    switch($file['error']){
        	        case 0: $error = "Произошла ошибка. Код - 0"; break;
        	        case 1: $error = "Ошибка. Превышен лимит размера файла. Код - 1"; break;
        	        case 2: $error = "Ошибка. Превышен лимит размера файла. Код - 2"; break;
        	        case 3: $error = "Произошла ошибка при загрузке файла. Код - 3"; break;
        	        case 4: $error = "Произошла ошибка при загрузке файла. Код - 4"; break;
        	        case 5: $error = "Произошла ошибка при загрузке файла. Код - 5"; break;
        	        case 6: $error = "Произошла ошибка при загрузке файла. Код - 6"; break;
        	        case 7: $error = "Произошла ошибка при загрузке файла. Код - 7"; break;
        	        case 8: $error = "Произошла ошибка при загрузке файла. Код - 8"; break;
        	    }
        	}
        }
    }
	$data = ($error) ? array('error' => $error) : array('files' => $files, 'filename' => $newfilename,'onlyfilename' => $onlyfilename, 'extension' => $path_info['extension']);
	echo json_encode($data);
}


// Обработчик запроса AJAX при отправке формы
if($_SERVER['REQUEST_METHOD'] == 'POST' AND !empty($_POST['data1'])){
    $key = json_decode($_POST['data1'], true);
    if($key){
		$message = "<h1>".strip_tags($key['header'])."</h1>\r\n";
		$message .= "<table><tbody>";
		foreach($key['fields'] as $v){
			if(!$v['title']){
				continue;
			}
			if(stristr($v['title'], 'Файл')){
				if(!empty($v['value'])){
					$message .= "<tr><td><strong>".strip_tags($v['title']).": <strong></td><td><a href='http://".$sitename."/".$secret_foldername."/".strip_tags($v['value'])."'>Скачать файл</a></td></tr>\r\n";
				}
			}else{
				$message .= "<tr><td><strong>".strip_tags($v['title']).":<strong> </td><td>".strip_tags($v['value'])."</td></tr>\r\n";
			}
		}
		$message .= "</tbody></table>";
    }else{
        $message = "<h1>".strip_tags($key['header'])."</h1>\r\n";
        $message .= "<p>На сервере не работает json_decode. Возможно проблема связана с настройкой PHP: MagicQuotes. Необходимо обратиться в техподдержку хостинга.<br>А пока данные в сыром виде:</p>\r\n";
        $message .= $_POST['data1'];
    }
    $to      = 'info@'.$sitename; // Укажите свой почтовый ящик
    $subject = 'Заявка с сайта '.$sitename;
    $subject = '=?utf-8?b?'. base64_encode($subject) .'?=';
    $headers  = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type: text/html; charset=utf-8" . "\r\n";
    $headers .= "From: Wincub informer <info@".$sitename.">". "\r\n";

   if (mail($to, $subject, $message, $headers)){
       echo '{"result":"Спасибо! Ваша заявка принята!"}';
   }
   else{
       echo '{"result":"Ошибка.."}';
   }
}else{
//Генерация формы:

// ПРИМЕР ВЫЗОВА:
// <a href="js/mail.php?formtitle=Заказать%20звонок&formsubmit=Жду%20звонка!&mailtitle=Заказать%20звонок&postfix_class=yoyo" class="call_back_form_trigger">Заказать звонок</a>
// <script>$('.call_back_form_trigger').fancybox({type: 'ajax'});</script>

    // можно отдавать разные варианты формы if($_GET['fbtype'] == 1){}
    //Настройки формы:
    $formtitle = "Заказать обратный звонок";
    $formsubmit = "Отправить";
    $mailtitle = "Контактная информация";
    $postfix_class = "FBajaxloadedform";
    
    if(!empty($_GET['formtitle'])){$formtitle = strip_tags($_GET['formtitle']);}
    if(!empty($_GET['formsubmit'])){$formsubmit = strip_tags($_GET['formsubmit']);}
    if(!empty($_GET['mailtitle'])){$mailtitle = strip_tags($_GET['mailtitle']);}
    if(!empty($_GET['postfix_class'])){$postfix_class = strip_tags($_GET['postfix_class']);}
?>
<style>
.feedBackWrapper.<?php echo $postfix_class; ?> {
border: 0;
margin: 0;
padding:0 25px;
}
.feedBackWrapper.<?php echo $postfix_class; ?> table {
    width:100%;
}
.feedBackWrapper.<?php echo $postfix_class; ?> td {
padding: 0;
vertical-align: middle;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .fbw-title {
font-size: 16px;
white-space: nowrap;
padding-right: 10px;
width:150px;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .form-h3 {
text-align: center;
margin-top: 15px;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .ajaxgo {
padding: 5px 40px;
background: #FFC200;
background: -moz-linear-gradient(top,  #ffd65e 0%, #ffc200 43%, #fcb400 100%); 
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffd65e), color-stop(43%,#ffc200), color-stop(100%,#fcb400));
background: -webkit-linear-gradient(top,  #ffd65e 0%,#ffc200 43%,#fcb400 100%);
background: -o-linear-gradient(top,  #ffd65e 0%,#ffc200 43%,#fcb400 100%);
background: -ms-linear-gradient(top,  #ffd65e 0%,#ffc200 43%,#fcb400 100%);
background: linear-gradient(to bottom,  #ffd65e 0%,#ffc200 43%,#fcb400 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffd65e', endColorstr='#fcb400',GradientType=0 );
font-size: 18px;
border-radius: 3px;
cursor:pointer;
outline: none;
border:0;
border-bottom: 3px solid #D3A000;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .ajaxgo:focus {
outline:1px dashed #ccc;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .ajaxgo:hover {
background: #FFC200;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .ajaxgo:active {
border: 0;
margin-top: 3px;
outline:none;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .ajaxgo-wr{
height: 38px;
padding-top:25px;
text-align:center;
margin-bottom: 25px;
position: relative;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .fbw-text{
margin: 6px 0;
box-sizing: border-box;
padding: 6px;
border: 1px solid #ccc;
outline: none;
box-shadow: inset 0 1px 2px rgba(0,0,0,0.1);
width:100%;
font-family:inherit;
}
.feedBackWrapper.<?php echo $postfix_class; ?> .fbw-text:focus {
border-color: #66afe9 !important;
outline: 0;
-webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,1);
box-shadow: inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,1);
}
.feedBackWrapper.<?php echo $postfix_class; ?> .ajax-trigger {
text-align: center;
padding: 1px;
}
</style>
    <div class="feedBackWrapper <?php echo $postfix_class; ?>">
    	<h3 class="form-h3"><?php echo $formtitle; ?></h3>
    	<table>
    		<tbody>
    			<tr>
    				<td class="fbw-title">Имя<span style="color:red;">*</span>:</td>
    				<td><input type="text" placeholder="Имя" class="isrequired fbw-text form-control"></td>
    			</tr>
    			<tr>
    				<td class="fbw-title">Номер телефона<span style="color:red;">*</span>:</td>
    				<td><input type="text" placeholder="Телефон" class="isrequired fbw-text form-control"></td>
    			</tr>
    			<tr>
    				<td class="fbw-title">E-mail:</td>
    				<td><input type="text" placeholder="E-mail" class="fbw-text form-control"></td>
    			</tr>
    			<?php /*
    			<tr>
    				<td class="fbw-title">Цвет:</td>
    				<td><label><input type="checkbox" placeholder="Цвет" title="Синий">Синий</label><label><input type="checkbox" placeholder="Цвет" title="Зеленый">Зеленый</label><label><input type="checkbox" placeholder="Цвет" title="Красный">Красный</label></td>
    			</tr>
    			<tr>
    				<td class="fbw-title">Вкус:</td>
    				<td><label><input type="radio" name='radio1' placeholder="Вкус" title="Сладкий">Сладкий</label><label><input type="radio" name='radio1' placeholder="Вкус" title="Соленый">Соленый</label><label><input type="radio" name='radio1' placeholder="Вкус" title="Горький">Горький</label></td>
    			</tr>
    			*/ ?>
    			<tr>
    				<td class="fbw-title">Комментарий:</td>
    				<td><textarea placeholder="Комментарий" class="fbw-text form-control"></textarea></td>
    			</tr>
    		</tbody>
    	</table>
    	<div class="ajax-trigger">
    		<button class="ajaxgo <?php echo $postfix_class; ?>"><?php echo $formsubmit; ?></button>
    		<div class="successmsg"></div>
    	</div>
    </div>
    <script type="text/javascript">
    $(document).ready(function(){
    $(document.body).on("click", ".ajaxgo.<?php echo $postfix_class; ?>", send<?php echo $postfix_class; ?>);
    $(document.body).on("focus", "input", function(){$(this).css("border","");});
    function send<?php echo $postfix_class; ?>(){
    	var wr = $(this).parents(".feedBackWrapper.<?php echo $postfix_class; ?>");
    	var validate = true;
    	wr.find(".isrequired").each(function(){
    		if(!$(this).val().length){validate = false; $(this).css("border","1px solid #D22")}
    	});
    	if (validate){
    		var need = {};
    		need['header'] = "<?php echo $mailtitle; ?>";
    		need['fields'] = [];
    		wr.find("input, select, textarea").each(function(){
    		    var fieldElement = {};
    		    //Checkbox, Radio
    		    //Ожидаемая семантика: <input type="checkbox" placeholder="Цвет" title="Синий"> / <input type="radio" name='radio1' placeholder="Вкус" title="Сладкий">
    		    if($(this).attr('type') == 'checkbox' || $(this).attr('type') == 'radio'){
    		        if($(this).prop('checked') == true){
            		    fieldElement['type'] = $(this).attr("type");
            		    fieldElement['title'] = $(this).attr("placeholder");
            		    fieldElement['value'] = $(this).attr("title");
            		    need['fields'][need['fields'].length] = fieldElement;
    		        }
                    return true;
    		    }
    		    fieldElement['type'] = $(this).attr("type") || 'text';
    		    fieldElement['title'] = $(this).attr("placeholder");
    		    fieldElement['value'] = $(this).val();
    		    need['fields'][need['fields'].length] = fieldElement;
    		});
    		output = JSON.stringify(need);
    		$.ajax({
    			type: "POST",
    			data: {data1: output},
    			url:'<?php echo $_SERVER['PHP_SELF']; ?>',
    			dataType:'json',
    			success: function(data){
    				wr.find(".ajaxgo").hide();
    				wr.find(".successmsg").html(data.result);
    				wr.find(".successmsg").fadeIn(300).css("display","inline-block");
    			},
    			error: function (xhr, ajaxOptions, thrownError){
    				console.log(xhr.responseText);
    			}
    		});
    	}
    }
    });
    </script>
<?php
 }
?>
Скрыть
Способ поблагодарить автора сайта:

[MODx] Подсказки по API

[MODx] minishop2 tips

[Code helper] Заготовки для работы

Преобразовать JSON в HTML

[MODX] Загрузка сниппета после загрузки страницы через AjaxSnippet

[MODX, MiniShop2] Отредактировать письмо о заказе - добавить ТВ поле, или что-то еще

[MODX, pdoCrumbs] Вывести список всех родителей в ТВ поле ресурса

[JS] Связать значения инпутов через jQuery (биндинг)

[MODX] Массово обновить ТВ, или другое поле через базу

[miniShop2] Разместить корзину внутри блока с оформлением заказа

[OpenCart 1.5.1] Массово изменить адреса картинок у товаров

Вывести список всех файлов на сервере (и размер файла)

[PHP] Фиксированная сортировка массива на основе хэша

Курсы валют с cbr.ru на PHP, с запасным вариантом и кэшированием

[MODX] pThumb - ресайз изображений. Примеры использования.

Изменить цену на товар, если в корзине лежит товар из особой категории minishop2

Скрыть информацию о том, что сайт работает на MODX

[MODX] Сообщение о том, что сайт использует Cookie

Не работает подгрузка товаров ajax mfilter2 на мобильном

Постраничная навигация — набор параметров и CSS PdoPage

Разбить вывод pdoResources на несколько колонок (блоков)

[MODX] Добавить скрипт перед тегом body

[PHP] Узнать скорость выполнения кода. Простой таймер PHP

Вывести список всех емэйлов miniShop2

[MODX] Создать редирект через autoRedirector API

[MODX, MiniShop2] Отредактировать шаблон письма

[MODX] Кастомный чанк для AdminPanel

[MODX] Оформление и настройка easyComm. Комментарии и отзывы на сайте.

[MODX, MiniShop2] Обязательный чекбокс при оформлении заказа

[JS] Маска для ввода телефона +7(___)___-__-__

[MODX, MiniShop2] Добавить в письмо контактную информацию

[MODX, MiniShop2] Email сделать не обязательным полем

[MODX] Импорт и экспорт в MiniShop2. Реализация 1

[MODX, MiniShop2] Изменить формат номера заказа

Изменить цену на товар в зависимости от количества при добавлении в корзину minishop2

Общая сумма по каждому товару в корзине Minishop2

reCaptcha не через форму (без тега <form>)

Расширение свойств товаров minishop2

pdoPage и getImageList - Постраничная навигация MIGX

[MODX] Соответствие названия классов с названиями таблиц в MySQL

Вывести 404 ошибку по настройки TV MODX

Расширить таблицу site_content (объект modResource) за 5 минут

Передать файл с одного на другой сервер

Создать ресурс процессором $modx->runProcessor('resource/create', $props)

Как включить HTTPS (SSL) в MODX - Подробная инструкция

[MODX, MIGX] Простейшая авторизация

[MIGX] Простая и симпатичная галерея fancybox

[MODX] Узнать размер файла

Красивое адаптивное меню под pdoMenu

pdoResources Заготовки для работы

FontAwesome - часто используемые иконки для шаблонов MODX

[MODX, MIGX] Тип поля "Список ресурсов" (resourcelist) с ограничением по родителю (parents)

[MODX, MIGX] Вывести getImageList только если он не пустой

Bxslider отображение картинок после полной загрузки слайдера

[MODX] Вывести список всех опций MiniShop2

[MODX] Курсы валют с cbr.ru на PHP

[MODX, MIGX] Простой аудио-плеер HTML5

Как контролировать кэш CSS и скриптов

[OpenCart] Вывести на главную все категории с картинками

[PHP] Получить древовидный массив за один запрос к базе

Вырезать кавычки - фильтр MODx

Регулярное выражение

[MODx] Генератор настроек MIGX

[MODx, MIGx] Документация на русском по MIGx

[MODx] Динамическое поле emailSubject в FormIt

[MODx] Установить шаблон по-умолчанию для новых, создаваемых ресурсов

[MODx,MiniShop2] Не приходит почта администратору

[MODx] Баннеры с использованием BannerY

[Opencart] Вернуть английский язык, если вы его удалили

Универсальная форма обратной связи — feedBackForm

[MODx, miniShop2] Генерация YML для выгрузки в маркет

Редиректы

[MODx] pdoPage pagination css

[MODx] Вывести время загрузки (формирования) страницы

[MODx] Создать источник файлов

[MODx, minishop] Фильтрация по TV параметрам в msProducts

Регулярные выражения notepad++ примеры

[MODx] Создать свою страницу в админке

[JS] Заготовочки

[MODx] Поиск на сайте с пакетом SimpleSearch

[MODx, XML] Ответ для сервиса moneta.ru

[MODx] Подключить MODx в стороннем PHP файле

[MODx] Создать пакет с пользовательской таблицей

[PHP] Простое логирование

[OpenCart] Вывести модуль напрямую через контроллер

[MODx, Gallery] Галерея. Вывести обложки альбомов и фотографии

[MODx, MIGX] Примеры использования

[MODx] Сайт на обслуживании (выключить сайт)

[Opencart, FilterPro] Не работает пагинация

[OpenCart] Заготовки для автоматического заполнения товарами магазина 1.5.5.1.2

[PHP] Разные фишки, заготовки

[PHP, JSON] Пример перевода с помощью Yandex Translate API

[MySQL] Примеры запросов

[MODx] Вывод tv-параметров в формате [название TV] - [значение TV]

[MODx] Дата на русском

[MODx] Ускорить установку MODx revo до пары кликов

[Opencart] API tips

[MODx, Quip] Отсортировать ресурсы по количеству комментариев Quip MODx

[PHP] Загрузить файл для постобработки

[Opencart 2] Показывать в категориях

[MODx, Quip] Более рабочий вариант.

[MODx] Получить grandparent. Вывести родитель родителя

[MODx] Вывести все доступные плейсхолдеры.

[MODx] getResources заготовки

[MODx] Счетчик посещений и скачиваний для сортировки ресурсов

[MODx] Как разместить исходный код сниппета на сайте, в документации

Удалить HTML-теги span, и стили из тега br

Полезные ссылки

Все записи