更新:もう少し調査を行った後、この回答を大幅に修正しました。
記録としては、getCanPrintOrder
オブジェクト データを取得するための Magento のマジック メソッドの 1 つです。でその値を設定します。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());
注文状態が前面に表示されている状態の 1 つであるかどうかを確認しています。これらは、最終的config.xml
にコア Magento セールス モジュールのファイルに設定されます。
<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 であるため、それらを変更したり、何かがそれらをオーバーライドしたりしない限り、問題にはなりません。getCanPrintOrder
success.phtmlの値をダンプして、これを再確認します。
ハッキーな回避策は、テンプレート ファイルを上書きして追加することです。
$this->setCanPrintOrder(true);
$this->setCanViewOrder(true);
if 条件より上の任意の場所。または、チェックを完全に削除するだけです。