0

Magentoでは、バックエンド/ショッピングカートの実際の数値を変更せずに、カスタムPHP関数をフロントエンドの価格の表示に適用したいと思います。

具体的には、価格にセントがない場合の表示価格の小数を削除したいと思います。たとえば、$19.00は$19と表示されますが、$19.99は$19.99と表示されます。

PHP.netで、この変更を実行するPHP関数を見つけました。

// formats money to a whole number or with 2 decimals; includes a dollar sign in front
    function formatMoney($number, $cents = 1) { // cents: 0=never, 1=if needed, 2=always
      if (is_numeric($number)) { // a number
        if (!$number) { // zero
          $money = ($cents == 2 ? '0.00' : '0'); // output zero
        } else { // value
          if (floor($number) == $number) { // whole number
            $money = number_format($number, ($cents == 2 ? 2 : 0)); // format
          } else { // cents
            $money = number_format(round($number, 2), ($cents == 0 ? 0 : 2)); // format
          } // integer or decimal
        } // value
        return $money;
      } // numeric
    } // formatMoney

価格はいたるところに表示されるため、この機能を適用するためにMagentoテンプレートを変更する必要はありません。すべてのテンプレートを更新するのは悪夢です。

この関数を使用して価格の表示をグローバルにフォーマットし、1つの場所からすべての価格の表示に影響を与えることができる場所があるかどうかを知りたいです。

すでに、次のようなさまざまなMagentoファイルを数時間かけて調べました。

app / code / core / Mage / Directory / Model / Currency.php

public function format <-この関数は、価格の表示ではなく、実際の価格を変更します。

app / code / core / Mage / Catalog / Model / Product.php:

public function getFormatedPrice <-この関数は有望に見えましたが、私には何もしませんでした。

私はまた、明白な場所として何も飛び出さずにこれらのファイルを見ました:

app / code / core / Mage / Catalog / Block / Product.php

app / code / core / Mage / Catalog / Block / Product / Price.php

app / code / core / Mage / Catalog / Block / Product / View.php

カスタムPHP関数を価格の表示に適用するためにハッキングできるMagentoの場所を1つ見つけることができると思いますか(ショッピングカートの実際の数値ではありません)。

4

2 に答える 2

0

catalog_product_get_final_priceが希望どおりに機能するかどうかわからないため、私が提案する別の解決策はformatTxtMage_Directory_Model_Currency

その関数では、価格に小数が含まれているかどうかを確認し、その価格に小数$options['precision']=0;を含まないようにする場合はオプションを設定できます(xx.00など)。

例えば:

public function formatTxt($price, $options=array())
{
  if(is_numeric( $price ) && floor( $price ) == $price){
     $options['precision']=0;
  }
  return parent::formatTxt($price, $options);
}
于 2013-01-18T20:22:49.143 に答える
0

そのためにオブザーバーを使用できますcatalog_product_get_final_price

config.xml:

<config>
    <frontend>
        <events>
            <catalog_product_get_final_price>
                <observers>
                    <catalogrule>
                        <class>myextension/observer</class>
                        <method>processFrontFinalPrice</method>
                    </catalogrule>
                </observers>
            </catalog_product_get_final_price>
        </events>
    </frontend>
</config>

あなたのオブザーバークラスで:

<?php
public function processFrontFinalPrice($observer)
{
    $product    = $observer->getEvent()->getProduct();
    $finalPrice = 123.45;   //modify your price here
    return $this;
} 
?>
于 2013-01-18T19:54:33.247 に答える