2012-04-05 111 views
0

我目前正在Magento基於「One Page Checkout」創建一個結帳頁面 - 或者,我清空onepage.phtml並從頭開始。Magento:從結算頁面中刪除JavaScript

訂單被放置和一切,但用戶永遠不會到第三方支付頁面;一些付款方式返回一個空白頁面,而其他返回錯誤代碼「Klarna :: setConfig中的錯誤:缺少配置字段:祕密」

我懷疑涉及到一些缺少的JavaScript,所以我的最終問題是:是否可以在沒有JavaScript的情況下使結賬工作,在這種情況下,如何執行?

如果相關,這裏是我用來創建訂單(放置在onepage.phtml的頂部)的PHP代碼。

<?php 
    $checkout = Mage::getSingleton('checkout/type_onepage'); 

    //STEP(1) 
    $checkout->saveCheckoutMethod('guest'); 

    //STEP(2) 
    $checkout->saveBilling($_POST['billing'], false); 

    //STEP(3) 
    $checkout->saveShipping($_POST, false); 

    //STEP(4) 
    $checkout->saveShippingMethod('flatrate_flatrate'); 

    //STEP(5) 
    $checkout->savePayment($_POST['payment']); 

    //STEP(6) 
    $checkout->saveOrder(); 
?> 

預先感謝您!

+1

這是不可能的。 Magento簽出幾乎完全基於原型,您需要編寫自己的方法來替換他們在JavaScript中執行的步驟以將其刪除。 – 2012-04-05 15:31:09

+0

好的。但是,在結帳過程中,究竟是在JavaScript中做了什麼? – Ivar 2012-04-06 08:17:45

回答

0

是的,你可以下訂單沒有任何JS。對於支持與savePayment方法後,一些重定向URL付款方式,你必須添加此行:

$redirectUrl = $checkout->getQuote() 
    ->getPayment() 
    ->getCheckoutRedirectUrl(); 
if ($redirectUrl) { 
    return $this->getResponse()->setRedirect($redirectUrl); 
} 

和saveOrder後補充一點:

$redirectUrl = $checkout->getRedirectUrl(); 
if ($redirectUrl) { 
    $this->_redirect($redirectUrl); 
} 

你也必須使用try {...}趕上() {...} block for error handling:

try { 
    $checkout = Mage::getSingleton('checkout/type_onepage'); 

    //STEP(1) 
    $checkout->saveCheckoutMethod('guest'); 

    //STEP(2) 
    $checkout->saveBilling($_POST['billing'], false); 

    //STEP(3) 
    $checkout->saveShipping($_POST, false); 

    //STEP(4) 
    $checkout->saveShippingMethod('flatrate_flatrate'); 

    //STEP(5) 
    $checkout->savePayment($_POST['payment']); 

    //STEP(6) 
    $checkout->saveOrder(); 
} catch (Mage_Core_Exception $e) { 
    Mage::getSingleton('checkout/session')->addError($e->getMessage()); 
} catch (Exception $e) { 
    Mage::logException($e); 
    Mage::getSingleton('checkout/session')->addError(Mage::helper('checkout')->__('Unable to process your order. Please try again later')); 
}