2011-04-29 68 views
0

我不確定這是否可能,如果沒有,我歡迎任何替代方法來完成此操作。基本上,我想在用戶選擇一個複選框時設置一個法師結帳會話變量。我目前有工作通過重定向到一個控制器執行工作,然後重定向到變量保存後返回結帳。這需要一段時間,我覺得應該有更好的方式,但我不能得到它的工作。從Javascript訪問Magento模型

這裏是內部methods.phtml輸入複選框聲明:

<input id="p_method_<?php echo $_code ?>" value="1" type="checkbox" name="payment[use_internal_credit]" title="<?php echo $this->htmlEscape($_method->getTitle()) ?>" class="checkbox" 
    onclick="checkout.update({'review': 1}); parent.location='<?php if(Mage::getSingleton('checkout/session')->getUseInternalCredit()): echo Mage::getUrl('customercredit/index/removeCreditUse/redirect/firecheckout'); else: echo Mage::getUrl('customercredit/index/updateCreditPost/redirect/firecheckout'); endif; ?>'" 
    <?php if(Mage::getSingleton('checkout/session')->getUseInternalCredit()): ?> checked="checked"<?php endif; ?> /> 

這工作,但它不是非常人性化,並採取了良好的3-5秒要返回到結帳頁面。有沒有更好的方法來完成這一點?我需要做的是切換useInternalCredit會話變量,然後刷新結賬審閱部分。刷新很簡單......點擊時訪問法師類是個問題。

回答

1

系統API是服務器端的,這意味着客戶端代碼無法在沒有任何額外類型的請求的情況下到達它們。這是一件好事,因爲否則任何客戶都可以在模型級別任意改變事物。

0

以下是一種方式,如果它激發了你的話,我會這樣做。

  1. 從您提供的代碼看來,付款步驟中顯示覆選框。所以我會在模板文件中添加複選框(template/checkout/onepage/payment.phtml)。
  2. 讓觀察者收聽controller_action_postdispatch。這個觀察者的方法將檢查完整的動作名稱是'checkout_onepage_savePaymentMethod'
  3. 如果是肯定的,它會檢查是否設置了密鑰payment[use_internal_credit](又名chekbox的名稱)的後期參數並且值爲1(複選框值,這意味着該複選框已被客戶選中),如果是在一個會話變量添加任何你想:Mage::getSingleton('core/session')->setUniqueName($data['payment[use_internal_credit]']);$data是一個參考$Controller->getRequest()->getPost();

你也許可以讓觀察者聽事件被付款步驟專門拋出,找到它,檢查出Alan's Storm solution,我只是不知道這是/如果它是,我用這個。

讓我知道如果它不明確。