0

私は blockspecials モジュールを使用しており、写真でわかるように通貨が表示されています。私の知る限り、ここから通貨記号を削除すると、ショップのどこからでも削除されます。blockspecials からのみ削除する方法はありますか? このままでは良く見えません。

ここに画像の説明を入力

事前に助けてくれてありがとう。

4

1 に答える 1

0

このモジュールは、displayWtPrice (/classes/Tools.php にあります) という名前のカスタム prestashop smarty 関数を呼び出しています。この関数は、数値を通貨に正しくフォーマットします。このフォーマットが必要ない場合は、blockspecials.tpl 内から smarty 関数を削除してください。

デフォルトでは、次のようになります。

{if !$PS_CATALOG_MODE}
    <span class="price-discount">{if !$priceDisplay}{displayWtPrice p=$special.price_without_reduction}{else}{displayWtPrice p=$priceWithoutReduction_tax_excl}{/if}</span>
    <span class="price">{if !$priceDisplay}{displayWtPrice p=$special.price}{else}{displayWtPrice p=$special.price_tax_exc}{/if}</span>
{/if}

smarty タグを削除します。

{if !$PS_CATALOG_MODE}
    <span class="price-discount">{if !$priceDisplay}{$special.price_without_reduction}{else}{$priceWithoutReduction_tax_excl}{/if}</span>
    <span class="price">{if !$priceDisplay}{$special.price}{else}{$special.price_tax_exc}{/if}</span>
{/if}

これにより、フォーマットされていない番号が残ります。

書式設定が必要でシンボルなしで、この 1 つの関数だけに固有のものにする必要がある場合は、prestashop のコアを変更する必要があります。

/classes/Tools.php で、Tools.php をオーバーライド/拡張​​して、displayPrice 関数を複製する必要があります。新しいクラス /overrides/classes/Tools.php を作成します。

<?php

/**
* Tools
*/
class Tools extends ToolsCore
{

    /**
    * Return price with currency sign for a given product
    *
    * @param float $price Product price
    * @param object $currency Current currency (object, id_currency, NULL => context currency)
    * @return string Price correctly formated (sign, decimal separator...)
    */
    public static function displayPrice($price, $currency = null, $no_utf8 = false, Context $context = null, $showSymbol = true)
    {
        if (!is_numeric($price))
            return $price;
        if (!$context)
            $context = Context::getContext();
        if ($currency === null)
            $currency = $context->currency;
        // if you modified this function, don't forget to modify the Javascript function formatCurrency (in tools.js)
        elseif (is_int($currency))
            $currency = Currency::getCurrencyInstance((int)$currency);

        if (is_array($currency))
        {
            $c_char = $currency['sign'];
            $c_format = $currency['format'];
            $c_decimals = (int)$currency['decimals'] * _PS_PRICE_DISPLAY_PRECISION_;
            $c_blank = $currency['blank'];
        }
        elseif (is_object($currency))
        {
            $c_char = $currency->sign;
            $c_format = $currency->format;
            $c_decimals = (int)$currency->decimals * _PS_PRICE_DISPLAY_PRECISION_;
            $c_blank = $currency->blank;
        }
        else
            return false;

        $blank = ($c_blank ? ' ' : '');
        $ret = 0;
        if (($is_negative = ($price < 0)))
            $price *= -1;
        $price = Tools::ps_round($price, $c_decimals);
        switch ($c_format)
        {
            /* X 0,000.00 */
            case 1:
                $ret = (($showSymbol) ? $c_char : '').$blank.number_format($price, $c_decimals, '.', ',');
                break;
            /* 0 000,00 X*/
            case 2:
                $ret = number_format($price, $c_decimals, ',', ' ').$blank.(($showSymbol) ? $c_char : '');
                break;
            /* X 0.000,00 */
            case 3:
                $ret = (($showSymbol) ? $c_char : '').$blank.number_format($price, $c_decimals, ',', '.');
                break;
            /* 0,000.00 X */
            case 4:
                $ret = number_format($price, $c_decimals, '.', ',').$blank.(($showSymbol) ? $c_char : '');
                break;
            /* 0 000.00 X  Added for the switzerland currency */
            case 5:
                $ret = number_format($price, $c_decimals, '.', ' ').$blank.(($showSymbol) ? $c_char : '');
                break;
        }
        if ($is_negative)
            $ret = '-'.$ret;
        if ($no_utf8)
            return str_replace('€', chr(128), $ret);
        return $ret;
    }



}

ここで、Tools で行ったのと同じ方法でオーバーライドする必要がありますが、今回displayWtPriceは Product クラスの関数をオーバーライドします。

この関数を次のようにオーバーライドします。

public static function displayWtPrice($params, &$smarty)
    {
        return Tools::displayPrice($params['p'], Context::getContext()->currency, false, null, (($params['showsymbol'] == false) ? false : true));
    }

提供された場合、smarty から取得される追加の関数パラメーターを指定しました。

blockspecials.tplここで、追加のパラメーターを使用しdisplayWtPriceて変更する必要がありますshowsymbol=false

{if !$PS_CATALOG_MODE}
    <span class="price-discount">{if !$priceDisplay}{displayWtPrice p=$special.price_without_reduction showsymbol=false}{else}{displayWtPrice p=$priceWithoutReduction_tax_excl showsymbol=false}{/if}</span>
    <span class="price">{if !$priceDisplay}{displayWtPrice p=$special.price showsymbol=false}{else}{displayWtPrice p=$special.price_tax_exc showsymbol=false}{/if}</span>
{/if}
于 2013-02-12T14:05:08.943 に答える