2016-09-03 4 views
0

Я создаю способ оплаты, основанный на вопросах/ответах, в которых правильный ответ на случайный вопрос из заданного пула вопросов действителен в качестве оплаты.Перенаправление на домашнюю страницу после неправильного ответа

Желательно, если пользователь дал неправильный ответ после появления сообщения «неправильный ответ», был «перенаправлен» на главной странице.

Это код, который проверяет ответ, если правильно и неправильно:

public function validate() 
{ 
    foreach (Mage::getModel('emme_question/question')->load(1)->getSelectedAnswersCollection() as $answer) 
    { 
    if ($answer->getIsCorrect()) 
    { 
     if ($answer->getId() == $_POST['my_custom_answer']) 
     { 
       Mage::getSingleton('core/session')->addSuccess('Risposta esatta'); 
      } else 
      { 
        Mage::throwException('Risposta sbagliata!'); 
       } 
    } 
    } 
} 

Но в том, что все, что я делать после Mage :: ThrowException не будет работать, потому что исключение прерывает нормальный поток кода. Кроме того, поскольку проверка начинается с вызова AJAX в кассе, я не могу просто эхо html или javascript, но я должен обрабатывать перенаправление непосредственно на стороне клиента.

Я должен скорректировать эту часть кода (скрипт skin/frontend/base/default/js/opcheckout.js, начинающийся с строки 875), чтобы в дополнение к простому предупреждению также обращались к перенаправлению.

Код:

 /* 
     * if there is an error in payment, need to show error message 
     */ 
     if (response.error) { 
      if (response.fields) { 
       var fields = response.fields.split(','); 
       for (var i=0;i<fields.length;i++) { 
        var field = null; 
        if (field = $(fields[i])) { 
         Validation.ajaxError(field, response.error); 
        } 
       } 
       return; 
      } 
      if (typeof(response.message) == 'string') { 
       alert(response.message); 
      } else { 
       alert(response.error); 
      } 
      return; 
     } 

     checkout.setStepResponse(response); 

     //checkout.setPayment(); 
    }, 

    initWhatIsCvvListeners: function(){ 
     $$('.cvv-what-is-this').each(function(element){ 
      Event.observe(element, 'click', toggleToolTip); 
     }); 
    } 
} 

var Review = Class.create(); 
Review.prototype = { 
    initialize: function(saveUrl, successUrl, agreementsForm){ 
     this.saveUrl = saveUrl; 
     this.successUrl = successUrl; 
     this.agreementsForm = agreementsForm; 
     this.onSave = this.nextStep.bindAsEventListener(this); 
     this.onComplete = this.resetLoadWaiting.bindAsEventListener(this); 
    }, 

    save: function(){ 
     if (checkout.loadWaiting!=false) return; 
     checkout.setLoadWaiting('review'); 
     var params = Form.serialize(payment.form); 
     if (this.agreementsForm) { 
      params += '&'+Form.serialize(this.agreementsForm); 
     } 
     params.save = true; 
     var request = new Ajax.Request(
      this.saveUrl, 
      { 
       method:'post', 
       parameters:params, 
       onComplete: this.onComplete, 
       onSuccess: this.onSave, 
       onFailure: checkout.ajaxFailure.bind(checkout) 
      } 
     ); 
    }, 

    resetLoadWaiting: function(transport){ 
     checkout.setLoadWaiting(false, this.isSuccess); 
    }, 

    nextStep: function(transport){ 
     if (transport && transport.responseText) { 
      try{ 
       response = eval('(' + transport.responseText + ')'); 
      } 
      catch (e) { 
       response = {}; 
      } 
      if (response.redirect) { 
       this.isSuccess = true; 
       location.href = response.redirect; 
       return; 
      } 
      if (response.success) { 
       this.isSuccess = true; 
       window.location=this.successUrl; 
      } 
      else{ 
       var msg = response.error_messages; 
       if (typeof(msg)=='object') { 
        msg = msg.join("\n"); 
       } 
       if (msg) { 
        alert(msg); 
       } 
      } 

      if (response.update_section) { 
       $('checkout-'+response.update_section.name+'-load').update(response.update_section.html); 
      } 

      if (response.goto_section) { 
       checkout.gotoSection(response.goto_section, true); 
      } 
     } 
    }, 

    isSuccess: false 
} 

Можете ли вы дать мне руку?

ответ

0

Я решил

if (response.error) { 
    if (response.fields) { 
     var fields = response.fields.split(','); 
     for (var i=0;i<fields.length;i++) { 
      var field = null; 
      if (field = $(fields[i])) { 
       Validation.ajaxError(field, response.error); 
      } 
     } 
     return; 
    } 
    if (typeof(response.message) == 'string') { 
     alert(response.message); 
    } else { 
     alert(response.error); 
window.location = 'http://demo.mmstore.net/index.php/'; 
    } 
    return; 
} 
0

Для перенаправления пользователя на главную страницу:

header('Location: /'); 
exit(); 
+0

Ниже перечислены протестированные решения: 1. эхо « "; 2. header ('refresh: 3; url = index.php'); 3. $ url = 'http://demo.mmstore.net/index.php/'; Mage :: app() -> getFrontController() -> getResponse() -> setRedirect ($ url); 4. return Mage :: getUrl ('ttp: //demo.mmstore.net/index.php/'); 5.