【问题标题】:click "checkout with paypal" in magento to open new window在magento中单击“使用贝宝结帐”以打开新窗口
【发布时间】:2012-02-28 22:57:01
【问题描述】:

Paypal 无法在 iframe 中打开,因此我尝试使用 Magento 1.4+ 在按下使用 paypal 结帐按钮时在新窗口或标签中打开 paypal

我想我在某处添加了一个 target="_blank",但我不知道在哪里。

\app\code\core\Mage\Paypal\ 中有大量文件,但我不知道要编辑哪个,adn 宁愿在不使用核心文件的情况下进行编辑

我在 app\code\core\Mage\Paypal\Block\Express\Shortcut.php 中为 paypal express 找到了这个

protected $_startAction = 'paypal/express/start';

如何在新窗口中打开它?

【问题讨论】:

  • 这是个好主意,因为当 Paypal 重定向回您的网站时,您将运行两个实例,这对于客户体验来说并不理想。
  • paypal 未在 iframe 中打开也不适合客户体验。我的意思是使用贝宝根本不理想,但似乎如果你想使用贝宝按钮从 iframe 中使用贝宝快递,打开一个新窗口是一种方式。如果你有另一种方式让 paypal 工作,我会很高兴吗?
  • 我们在不使用 iframe 的情况下使用它,但我们只是告诉他们(5 个尚未使用它的客户)他们将被重定向到 paypal,然后返回。与谷歌结帐相同。如果弹出窗口被阻止,那么如果您尝试一个新窗口,那么您的系统可能无法正常工作。
  • 我需要在 iframe 中使用它。它必须在 iframe 内。我再次需要这个,因为我使用它的功能在 iframe 中。我发现 Paypal Express 无法在 iframe 中打开。我有一个非工作系统。仅当弹出窗口被阻止时才使用非工作系统

标签: magento paypal magento-1.4


【解决方案1】:

要自己解决这个问题,我们首先需要知道按钮在网站上是如何呈现的。

我们首先需要知道使用的是哪个模板,如果我们真的需要深入挖掘,找出使用哪个Block来渲染模板。

Admin > System > Configuration > Advanced > Developer > Debug 中启用Template hints 或下载出色的Advanced Template Hints Module 并为您尝试查看模板提示的URL 添加?ath=1

现在,当您查看带有模板提示的页面时,您应该会看到 PayPal 按钮是使用 frontend/base/default/paypal/express/shortcut.phtml 呈现的。

打开那个文件,开始浏览/yourmagentoinstallation/app/design/,你会在那里找到frontend/文件夹。

现在我们可以看到该模板中发生了什么,我们可以看到该模板添加了一个<a>, <span>, <input> 和一些javascript:

//<![CDATA[
    Event.observe('<?php echo $shortcutHtmlId ?>', 'click', function(event) {
        <?php if ($this->getConfirmationUrl()): ?>
            if (confirm('<?php echo Mage::helper('core')->jsQuoteEscape($this->getConfirmationMessage())?>')) {
                this.href = '<?php echo $this->getConfirmationUrl() ?>';
            }
        <?php endif; ?>
        <?php if ($this->getIsInCatalogProduct()): ?>
            $('pp_checkout_url').value = this.href;
            productAddToCartForm.submit(this);
            event.stop();
        <?php endif; ?>
    });
//]]>

这里我们设置表单的href to post to,因为没有真正的链接我们可以改变,我们需要将表单的目标设置为空白,我们可以用javascript做到这一点:

放:

productAddToCartForm.setAttribute('target', '_blank');

以上:

productAddToCartForm.submit(this);

【讨论】:

  • 感谢提示模块的链接和很好的解释。但进行更改后,它仍然在同一窗口中打开。 1.4 productAddToCartForm.submit()中没有这个;我不知道这是否会产生差异? getIsInCatalogProduct()): ?> $('pp_checkout_url').value = this.href; productAddToCartForm.submit();事件.stop();
【解决方案2】:

感谢 Paul - 我对同一个文件执行了此操作,并且成功了!

更改(我的第 33 行)

<a id="<?php echo $shortcutHtmlId ?>" href="<?php echo $this->getCheckoutUrl()?>">

<a id="<?php echo $shortcutHtmlId ?>" href="<?php echo $this->getCheckoutUrl()?>" target="_blank">

很简单,但如果没有 Paul 的帮助就不会这样做

【讨论】:

    猜你喜欢
    • 2021-10-24
    • 2020-10-11
    • 2014-11-07
    • 2014-09-12
    • 1970-01-01
    • 2021-12-29
    • 2014-03-06
    • 2014-09-06
    • 2013-12-06
    相关资源
    最近更新 更多