2

の出力がどこから来ているのかわかりませんでしたgetPaymentHtml()

その定義:

public function getPaymentHtml() { return $this->getChildHtml('payment_info'); }

payment_infoブロックのテンプレートが見つかりませんでした。

基本的に、チェックアウトの進行状況ブロックでクレジットカードの種類とクレジットカード番号を取得できるようにしたいです。

メソッド名を見つけるにはどうすればよいですか?何かのようなもの$this->getCreditCardType()

編集:OK!Magentoは、出力のレンダリングに使用される対応するテンプレートを持つ支払い方法を最初に把握していることを理解しています。しかし、progress.phtmlチェックアウトの場合、var_dump( $this instanceof Mage_Payment_Block_Info_Cc );falseを返すので、現在のコンテキストでそれにアクセスするにはどうすればよいですか?

4

2 に答える 2

3

Progressブロックには、支払い情報用の独自のテンプレートがありません。Mage_Checkout_Block_Onepage_Payment_Infoブロックは、選択したPaymentMethodブロックを使用してhtmlを出力します。Mage_Checkout_Block_Onepage_Payment_Info::_toHtml()メソッドを見てください:

protected function _toHtml()
{
    $html = '';
    if ($block = $this->getChild($this->_getInfoBlockName())) {
        $html = $block->toHtml();
    }
    return $html;
}

使用する特定の支払い方法の実際のテンプレートとブロックを見つけるには、次の手順を実行する必要があります。

  1. 最初に-現在の支払い方法のモデルエイリアスを取得Mage::getStoreConfig('payment/'.$yourMethod.'/model')し、を使用してインスタンス化しますMage::getModel(alias)
  2. 次に、$ model-> getInfoBlockType()を使用してブロックタイプを取得します。これにより、実際のブロックをそのタイプで見つけることができます。

たとえば、ccSave支払い方法の場合、情報ブロックはMage_Payment_Block_Info_Ccsaveであり、そのテンプレートはapp \ design \ frontend \ base \ default \ template \payment \ info\default.phtmlです。それらの中のすべてのデータを見つけることができます。幸運を ;)

完全を期すために、CCタイプとCC番号の最後の4桁をフェッチするための正確な関数は次のとおりです。

echo Mage::getSingleton('checkout/session')->getQuote()->getPayment()->getCcType();
echo Mage::getSingleton('checkout/session')->getQuote()->getPayment()->getCcLast4();
于 2012-09-11T16:47:18.350 に答える
1

ブロッククラスは、レイアウト更新XMLで宣言されています。checkout.xmlの1ページのチェックアウトおよびマルチシッピングディレクティブを参照してください。使用される実際の子ブロックは、使用されている支払いモデルによって異なりますが、オーバーライドされない限り使用される共通のテンプレートがあります。

例:

于 2012-09-11T16:47:29.273 に答える