партнер компании 1с-битрикс
сайт фрилансера Сергея Эстрина
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
Универсальная галерея - модуль для битрикс
Это форум по решению для битрикс «Модуль Быстрый заказ (архив)».
Страницы: 1
Ответить
RSS
Съезжает верстка
 
При подключении компонента grain:fastorder в AJAX режиме (передавая на вход компоненту AJAX_MODE => "Y" ;)  - перестают корректно срабатывать отложенные функции ($APPLICATION->GetTitle()) - происходит излишняя буферизация - так, имея код <h1><?$APPLICATION->GetTitle(false);?></h1>
<div>
...
...
</div>

в заголовок (h1) - попадает содержимое блока <div> - едет верстка страницы. Если отключить AJAX_MODE или же не производить вызова отложенных функций (убрать вызов GetTitle) - верстка находится в порядке.
 
Алексей, здравствуйте! А данная проблема наблюдается конкретно с этим компонентом, не со всеми вообще, т.е. ее нет со стандартными компонентами битрикс?
 
Да, проблема конкретно с этим компонентом.
 
Алексей, может быть дело в этой строке в шаблоне компонента?
Код

if($arResult["SUCCESS"]) {

   
LocalRedirect($APPLICATION->GetCurPageParam("success=".$arResult["HASH"], Array("success")));
} elseif(
$_REQUEST["success"] == $arResult["HASH"]) {
   echo 
$arParams["OK_TEXT"];
}
Т.е. при использовании стандартного аякс механизма, может стоит не использовать переадресацию через LocalRedirect при успешном добавлении заказа?

Хотя не знаю, каким образом здесь может быть замешан $APPLICATION->GetTitle().

Также вы можете не использовать стандартный механизм аякс, а сделать свой обработчик, вот пример на jquery для шаблона данного компонента.

Код

<?

if(!
defined("B_PROLOG_INCLUDED")||B_PROLOG_INCLUDED!==true)die();

if(
$arParams["ONLY_SHOW_FORM"]!="Y") {

   if(
$_REQUEST["ajax_fastorder"]=="Y") {
   
      
$APPLICATION->RestartBuffer();

      if(
$arResult["SUCCESS"]) {
   
         echo 
json_encode(Array("result"=>"success","message"=>"<i class=\"icon-check\"></i>".$arParams["OK_TEXT"]));
   
      } elseif(!empty(
$arResult["ERROR_MESSAGE"])) {

         echo 
json_encode(Array("result"=>"error","message"=>implode("<br />",$arResult["ERROR_MESSAGE"])));

      }

      die();
   
   } else {
   
      if(
$arResult["SUCCESS"]) {
      
         echo 
$arParams["OK_TEXT"];
      
      } elseif(!empty(
$arResult["ERROR_MESSAGE"])) {
      
         foreach(
$arResult["ERROR_MESSAGE"] as $v)
            
ShowError($v);
            
      }
   
   }

}

if(
$arParams["ONLY_PROCESSING"]=="Y") return;

?>

<div class="popup-done" id="grain_fast_order_success" style="display: none"></div>

<form action="<?=$APPLICATION->GetCurPage()?>" method="POST" class="grain-fast-order-order" id="grain_fast_order">

   <span class="grain-fast-order-error" id="grain_fast_order_error" style="display: none"></span>

   <span class="caption"><?=GetMessage("GRAIN_FO_HEADER")?>:</span>
   <?if(in_array("NAME",$arParams["SHOW_FIELDS"])):?>
      <input type="text" name="user_name" placeholder="<?=GetMessage("GRAIN_FO_NAME")?>" value="<?=$arResult["AUTHOR_NAME"]?>" class="input-gray"/>
   <?endif?>
   <?if(in_array("EMAIL",$arParams["SHOW_FIELDS"])):?>
      <input type="text" name="user_email" placeholder="<?=GetMessage("GRAIN_FO_EMAIL")?>" value="<?=$arResult["AUTHOR_EMAIL"]?>" class="input-gray"/>
   <?endif?>
   <?if(in_array("PHONE",$arParams["SHOW_FIELDS"])):?>
      <input type="text" name="user_phone" placeholder="<?=GetMessage("GRAIN_FO_PHONE")?>" value="<?=$arResult["AUTHOR_PHONE"]?>" class="input-gray phone-input"/>
   <?endif?>

   <?if($arParams["USE_CAPTCHA"] == "Y"):?>
   <div class="grain-fo-captcha">
      <div class="grain-fo-text"><?=GetMessage("GRAIN_FO_CAPTCHA")?></div>
      <input type="hidden" name="captcha_sid" value="<?=$arResult["capCode"]?>">
      <img src="/bitrix/tools/captcha.php?captcha_sid=<?=$arResult["capCode"]?>" width="180" height="40" alt="CAPTCHA">
      <div class="grain-fo-text"><?=GetMessage("GRAIN_FO_CAPTCHA_CODE")?><span class="grain-fo-req">*</span></div>
      <input type="text" name="captcha_word" size="30" maxlength="50" value="">
   </div>
   <?endif;?>
   <input type="hidden" name="HASH" value="<?=$arResult["HASH"]?>">
   <input type="hidden" name="ajax_fastorder" value="Y">
   <input type="hidden" name="submit" value="Y">
      
   <input type="submit" value="<?=GetMessage("GRAIN_FO_SUBMIT")?>" class="btn btn-green">
</form>

<?

$().ready(function(){

   $(
"#grain_fast_order").submit(function(){ 
   
      $.
post($(this).attr("action"),$(this).serialize(),false,"json")

          .
done($.proxy(function(data) {

             if(
data.result=="success") {
          
                $(
"#grain_fast_order_success").html(data.message).show();
                $(
this).hide();
             
             } else if(
data.result=="error") {
             
                $(
"#grain_fast_order_error").html(data.message).show();
             
             }

          },
this))

          .
fail($.proxy(function(data) {

             
//alert("error");

          
},this));

      return 
false;

   });

});

Страницы: 1
Ответить
Читают тему
Форма ответов
Текст сообщения*
Перетащите файлы
Ничего не найдено
Файл
Загрузить картинки