我试图找出以下函数正在检查的内容:
<?php if ($this->getCanViewOrder() && $this->getCanPrintOrder()) :?>
<?php echo $this->__('<strong><a href="%s" onclick="this.target=\'_blank\'">Click here to print</a></strong> an invoice or a copy of your order confirmation.', $this->getPrintUrl()) ?>
在Magento的success.phtml
文件中,感谢页面上不再显示“点击此处打印”链接。这个功能在哪里?
答案 0 :(得分:4)
更新:在做了一些研究之后,我对此答案进行了大量修改。
对于记录,看起来getCanPrintOrder
是Magento获取对象数据的神奇方法之一。您已使用setCanPrintOrder
设置其值,如果之前未调用过,getCanPrintOrder
将返回null
。您也可以通过调用setData('can_print_order')
来设置它。
看起来它所设置的唯一地方是Mage_Checkout_Block_Onepage_Success
方法中的单页结帐成功区块_prepareLastOrder
:
protected function _prepareLastOrder()
{
$orderId = Mage::getSingleton('checkout/session')->getLastOrderId();
if ($orderId) {
$order = Mage::getModel('sales/order')->load($orderId);
if ($order->getId()) {
$isVisible = !in_array($order->getState(),
Mage::getSingleton('sales/order_config')->getInvisibleOnFrontStates());
$this->addData(array(
'is_order_visible' => $isVisible,
'view_order_id' => $this->getUrl('sales/order/view/', array('order_id' => $orderId)),
'print_url' => $this->getUrl('sales/order/print', array('order_id'=> $orderId)),
'can_print_order' => $isVisible,
'can_view_order' => Mage::getSingleton('customer/session')->isLoggedIn() && $isVisible,
'order_id' => $order->getIncrementId(),
));
}
}
}
从_beforeToHtml
方法调用,该方法将在呈现该页面时调用。
将字符串拉得更远,我们看到can_print_order
由$isVisible
变量确定,并且由此行设置:
$isVisible = !in_array($order->getState(),
Mage::getSingleton('sales/order_config')->getInvisibleOnFrontStates());
检查订单状态是否是前面可见的状态之一。这些最终设置在核心Magento销售模块的config.xml
文件中。
<config>
<global>
<sales>
<order>
<states>
<new translate="label">
<label>New</label>
<statuses>
<pending default="1"/>
</statuses>
<visible_on_front>1</visible_on_front>
</new>
...
</states>
</order>
</sales>
</global>
</config>
默认情况下,所有状态都是visible_on_front,因此,除非您更改了它们,或者某些内容已被覆盖,否则这不应该是您的问题。我通过在success.phtml中转储getCanPrintOrder
的值来仔细检查这个。
一个hacky解决方法是覆盖模板文件并添加
$this->setCanPrintOrder(true);
$this->setCanViewOrder(true);
if条件之上的任何地方。或者只是完全删除支票。