2013-04-23 19 views
2

我试图找出下列功能检查是这 - 的$> getCanViewOrder()函数中success.phtml:什么在Magento

<?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()) ?> 

success.phtml文件在Magento的“点击这里打印“链接不再显示在感谢页面上。这个功能在哪里?

回答

4

更新:我做了一些更多的研究后大大修改了这个答案。


为了记录在案,它看起来像getCanPrintOrder是Magento的魔术方法获取对象的数据之一。您可以使用setCanPrintOrder来设置它的值,如果您之前没有调用该值,getCanPrintOrder将仅返回null。您也可以拨打电话setData('can_print_order')进行设置。

它看起来像是被设置在Onepage结账成功块,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销售模块的​​3210文件中。

<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的值来仔细检查此问题。

哈克解决办法将是压倒一切的模板文件并添加

$this->setCanPrintOrder(true); 
$this->setCanViewOrder(true); 

任何地方所if条件。或者完全删除检查。