2011-04-29 93 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,我只是不知道这是/如果它是,我用这个。

让我知道如果它不明确。