рдирдорд╕реНрдХрд╛рд░, рдкрд╣рд▓реЗ рд╕реЗ рд╣реА MODx рдХреНрд░рд╛рдВрддрд┐ рдореЗрдВ рдПрдХ рд╕рд╛рдЗрдЯ рдХреЗ рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рдкрд░ ajax рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдХреБрдЫ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдХрдИ
рддреИрдпрд╛рд░ рдРрдб-рдСрди рднреА рд╣реИрдВ ред
рдмрджрд▓реЗ рдореЗрдВ, рдореИрдВ MODx рдХреНрд░рд╛рдВрддрд┐ рдореЗрдВ ajax рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдмрд╣реБрдд рд╕рд░рд▓ рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде ajaxReqeust рдирд╛рдордХ рдПрдХ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдПрдВ:
<?php if ($modx->event->name == 'OnLoadWebDocument') { if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { $modx->resource->set('cacheable', 0); $modx->resource->set('template', 0); } }
рдкреНрд▓рдЧрдЗрди рдХреЛ OnLoadWebDocument рд╕рд┐рд╕реНрдЯрдо рдИрд╡реЗрдВрдЯ рдкрд░ рдлрд╛рдпрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдпрд╣ рдкреНрд▓рдЧрдЗрди рд╣рдореЗрдВ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдмрд┐рдирд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреЗрд╡рд▓ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред
рд╣рдо рд╕рднреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрд╕рд╛рдзрди рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рд╡рд╛рдВрдЫрд┐рдд рд╕реНрдирд┐рдкреЗрдЯ рдпрд╛ рдЪрдВрдХ рдХреЛ рд╕рд╣реЗрдЬрдирд╛ рд╣реИред
рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдмрдорд┐рдЯ рдХрд┐рдП рдЧрдП рдлреЙрд░реНрдо рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред
рд╕рд╛рдордЧреНрд░реА рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рд╕рдВрд╕рд╛рдзрди рдмрдирд╛рдПрдБ,
рдлреЙрд░реНрдо рдЗрдЯ рд╕реНрдирд┐рдкреЗрдЯ рдХреЗ рдорд╛рдирдХ рдХреЙрд▓ рдХреЛ рджрд░реНрдЬ рдХрд░реЗрдВ:
<div id="feedback_form"> <h2> </h2> [[!request? &k=`success` &toPlaceholder=`success`]] [[+success:is=``:then=` [[!FormIt? &hooks=`email,redirect` &redirectTo=`[[*id]]` &redirectParams=`{"success":"1"}` &emailTpl=`feedbackEmailTpl` &emailSubject=` [[++site_name]]` &emailTo=`info@unicontent-studio.ru` &emailFrom=`noreply@unicontent-studio.ru` &emailFromName=`[[++site_name]]` &validate=` name:required:stripTags, email:email:required, message:required:stripTags ` &clearFieldsOnSuccess=`1` &validationErrorMessage=` .` ]] <form data-target="#feedback_form" class="ajax-form" action="[[~[[*id]]]]" method="POST"> <div> <label>:</label> <input type="text" value="[[!+fi.name]]" name="name" /> [[!+fi.error.name]] </div> <div> <label>E-mail:</label> <input type="text" value="[[!+fi.email]]" name="email" /> [[!+fi.error.email]] </div> <div> <label>:</label> <textarea name="message">[[!+fi.message]]</textarea> [[!+fi.error.message]] </div> <input type="submit" name="submit" value="" /> </form> `:else=` <p> .</p> `]] </div>
рдЖрдЗрдП рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рд╕реНрдирд┐рдкреЗрдЯ рдмрдирд╛рдПрдВ, рдЬреЛ рд╣рдореЗрдВ рдлрд╝реЙрд░реНрдо рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдкрд░ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛:
<?php $result = isset($_REQUEST[$k])? strip_tags($_REQUEST[$k]) : ''; if (!empty($toPlaceholder)) { $modx->toPlaceholder($toPlaceholder, $result); } else { return $result; }
рд╡рд╣ рд╕рдм рдЬреЛ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд░рдирд╛ рд╣реИ, рд╡рд╣ рдЙрд╕ рдкреГрд╖реНрда рдкрд░ рдПрдХ рдЫреЛрдЯрд╛ jQuery рдХреЛрдб рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдлреЙрд░реНрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдлрд╝реЙрд░реНрдо рдЬрдорд╛ рдХрд░рддреА рд╣реИ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреА рд╣реИ:
$(document).ready(function() { $('body').on('submit', '.ajax-form', function(e) { e.preventDefault(); var target = this; if ($(this).data('target') != undefined) { target = $(this).data('target'); } values = $(this).serializeArray(); $(this).find('input[type="submit"]').attr('disabled', 'disabled'); $.ajax({ type: 'POST', dataType: 'html', url: $(this).attr('action'), data: values, success: function(data) { $(target).replaceWith(data); } }); }); });
рд╢рд╛рдпрдж рдпрд╣реА рд╕рдм рд╣реИ, рдмрд╕ рдирд╣реАрдВ рд╣реИ?
рдЖрдкрдХреЛ рдХреБрдЫ рдФрд░ рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рдХрд┐рд╕реА рднреА рдЕрддрд┐рд░рд┐рдХреНрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ, рдХрдиреЗрдХреНрдЯрд░ рдФрд░ рдкреНрд░реЛрд╕реЗрд╕рд░, рдмрд╕ рдПрдХ рдЫреЛрдЯрд╛ рдкреНрд▓рдЧ-рдЗрди рдФрд░ MODx рдмрд╛рдХреА рдХрд╛ рдзреНрдпрд╛рди рд░рдЦреЗрдЧрд╛ред
рдЪрдВрдХреНрд╕ рдФрд░ рд╕реНрдирд┐рдкреЗрдЯреНрд╕ рдХреЛ рдирд┐рдпрдорд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рдЙрд╕реА рддрд░рд╣ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЕрд░реНрдерд╛рдд, рдореЛрдбреЗрдХреНрд╕ рдЯреИрдЧ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рд╣реИрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЙрддреНрддрд░ рдкрд╛рд░реНрд╕рд░ рджреНрд╡рд╛рд░рд╛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдпрд╣ рд╕рдм, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдореЗрд░рд╛ рдЫреЛрдЯрд╛ рд▓реЗрдЦ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдХреЛ рдереЛрдбрд╝рд╛ рдЖрд╕рд╛рди рдмрдирд╛ рджреЗрдЧрд╛ред
рд╕рднреА рдХреЛ рд╢реБрднрдХрд╛рдордирд╛рдПрдБ рдФрд░ рдЬрд▓реНрдж рд╣реА рдЖрдкрдХреЛ рджреЗрдЦреЗрдВред