点击";使用paypal“结账”;在magento中打开新窗口

点击";使用paypal“结账”;在magento中打开新窗口,magento,paypal,magento-1.4,Magento,Paypal,Magento 1.4,Paypal不会在iframe中打开,因此我尝试使用Magento 1.4在按下“使用Paypal结账”按钮时在新窗口或选项卡中打开Paypal+ 我想我在某处添加了一个target=“\u blank”,但我不知道在哪里 \app\code\core\Mage\Paypal\中有大量文件,但我不知道该编辑哪个,adn更愿意不使用核心文件来编辑 我在app\code\core\Mage\paypal\Block\express\Shortcut.php中为paypal express找到了这个

Paypal不会在iframe中打开,因此我尝试使用Magento 1.4在按下“使用Paypal结账”按钮时在新窗口或选项卡中打开Paypal+

我想我在某处添加了一个target=“\u blank”,但我不知道在哪里

\app\code\core\Mage\Paypal\中有大量文件,但我不知道该编辑哪个,adn更愿意不使用核心文件来编辑

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

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

我怎样才能在新窗口中打开它?

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

我们首先需要知道使用了哪个模板,如果我们真的需要深入挖掘,那么就要找出哪个块用于渲染模板

Admin>System>Configuration>Advanced>Developer>Debug
中启用
模板提示
,或者下载优秀的,只需为您试图查看模板提示的URL添加
?ath=1

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

打开该文件,开始浏览
/yourmagentoinstallation/app/design/
,您将在那里找到
前端/
文件夹

现在我们可以看到该模板中发生了什么,我们可以看到该模板添加了
和一些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; ?>
    });
//]]>
//getConfirmationUrl()):?>
如果(确认(“”)){
this.href='';
}
$('pp\u checkout\u url')。value=this.href;
productAddToCartForm.提交(本);
事件停止();
});
//]]>
在这里,我们将表单的href设置为post to,因为没有可以更改的实际链接,我们需要将表单的目标设置为blank,我们可以使用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; ?>
    });
//]]>
付诸表决:

productAddToCartForm.setAttribute('target','u blank')

以上:


productAddToCartForm.submit(此)

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

更改(我的第33行)


这是个好主意吗,因为当Paypal重定向回您的站点时,您将有两个实例在运行,这对客户体验不理想。Paypal不在iframe中打开也不适合客户体验。我的意思是使用paypal根本不理想,但如果您想从iframe使用paypal按钮来使用paypal express,打开一个新窗口是最好的选择。如果你有另一种方法让paypal工作,我会很高兴。我们使用它而不使用iframe,但我们只是告诉他们(5个还没有使用它的客户)他们将被重定向到paypal,然后返回。谷歌结账也一样。如果弹出窗口被阻止,那么如果您尝试一个新窗口,您可能会有一个不工作的系统。我需要在iframe中使用它。它必须在iframe中。我再次需要它,因为我使用它的函数在iframe中。我没有发现贝宝Express可以在iframe中打开的方法。我有一个不工作的系统。只有当弹出窗口被阻止时,非工作系统才是首选。感谢链接到提示模块&非常好的解释。但在进行更改后,它仍然在同一窗口中打开。1.4在productAddToCartForm.submit()中没有此项;我不知道这是否有区别$('pp_checkout_url')。value=this.href;productAddToCartForm.submit();事件停止();
<a id="<?php echo $shortcutHtmlId ?>" href="<?php echo $this->getCheckoutUrl()?>" target="_blank">