从Javascript访问Magento模型


Accessing Magento Models from Javascript

我不确定这是否可能,所以如果不可能,我欢迎任何替代方法来完成此任务。基本上,我想在用户选择复选框时设置一个Mage签出会话变量。我目前有这个工作通过重定向到一个控制器,做的工作,然后重定向回签后,变量已保存。这需要一段时间,我觉得应该有一个更好的方法,但我不能让它工作。

下面是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会话变量,然后刷新结帐审查部分。刷新很容易……

系统api位于服务器端,这意味着客户端代码不可能在没有任何额外请求的情况下访问它们。这是一件好事,否则任何客户都可以在模型级别任意更改内容。

如果它能激励你,我有一种方法。

  1. 从您提供的代码中,看起来复选框出现在支付步骤中。所以我会在模板文件(template/checkout/onepage/payment.phtml)中添加复选框。
  2. 安排观察者收听controller_action_postdispatch。此观察者的方法将检查完整的操作名称为"checkout_onepage_savePaymentMethod"
  3. 在肯定的情况下,它会检查是否post参数与关键payment[use_internal_credit] (aka,复选框的名称)设置并具有1的值(复选框值,意味着复选框已被客户选中),如果是这样,添加任何你想在会话变量:Mage::getSingleton('core/session')->setUniqueName($data['payment[use_internal_credit]']); ($data是对$Controller->getRequest()->getPost();的引用)

你也许可以让观察者听支付步骤抛出的事件,找到它,检查Alan的Storm解决方案,我只是不知道它是哪个/如果,我已经习惯了这个。