2

次の関数が何をチェックしているのかを把握しようとしています。

  <?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ファイルで、「ここをクリックして印刷」リンクがサンキュー ページに表示されなくなりました。この機能はどこにありますか?

4

1 に答える 1

4

更新:もう少し調査を行った後、この回答を大幅に修正しました。


記録としては、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 であるため、それらを変更したり、何かがそれらをオーバーライドしたりしない限り、問題にはなりません。getCanPrintOrdersuccess.phtmlの値をダンプして、これを再確認します。

ハッキーな回避策は、テンプレート ファイルを上書きして追加することです。

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

if 条件より上の任意の場所。または、チェックを完全に削除するだけです。

于 2013-04-23T20:46:00.670 に答える