2

すべてのフロントエンドテンプレートにSmartyを多用しています。私は次の状況を観察しました:

Smartyテンプレートが次のようになっている場合:

<li>
    {if $a == 'A'}
        {$var1}
    {else}
        {$var2}
    {/if}
    <br><span>SUBTEXT</span>
</li>

ブラウザに配信される最終的なHTMLは次のとおりです。

<li>
                            65
                        <br><span>SUBTEXT</span>
        </li>

私はそれがよりきれいで、次のようなものになることを期待します:

<li>
    65<br><span>SUBTEXT</span>
</li>

以上:

<li>65<br><span>SUBTEXT</span></li>

とにかく、Smarty 3のいくつかの構成設定でこれを行うことができますか?作成された最終的なHTMLをフォーマットしてクリーンアップするための設定はありますか?

ありがとう

4

3 に答える 3

7

{strip}テンプレートの一部で、すべての空白とキャリッジリターンを削除するために使用できます。

http://www.smarty.net/docsv2/en/language.function.strip.tpl

{strip}
<li>
    {if $a == 'A'}
        {$var1}
    {else}
        {$var2}
    {/if}
    <br><span>SUBTEXT</span>
</li>
{/strip}

出力は次のようになります。

<li>65<br><span>SUBTEXT</span></li>

これは不便かもしれませんが、空白と改行はHTML出力に重大な影響/重要性を持ち、それらをグローバルに削除すると意図しない副作用が発生する可能性があることに注意してください。

于 2012-02-09T08:00:19.380 に答える
6

出力フィルタのtrimwhitespaceをロードできます。HTML コメント (ConditionalComments を除く) を削除し、複数の空白を , , 以外のすべての場所で 1 つのスペースに<script>減らし<pre>ます<textarea>

<two> <tags>62 行目を変更することで、フィルターが間のスペースを簡単に削除できます。

'#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1 \2',

'#(:SMARTY@!@|>)\s+(?=@!@SMARTY:|<)#s' => '\1\2',

これで完了です。

出力フィルターは、テンプレートがレンダリングされた後、ブラウザーに送信される前に実行されます。{strip}テンプレートが処理される前に実行されます - これはコンパイル時のことです。したがって、次の

{$some_var = "Hello\nworld"}
{strip}
  -
  {$}
  -
{/strip}

出力します

-hello
world-

outputfilter が返される間

- hello world -
于 2012-02-09T08:23:44.487 に答える
1

すべてのファイルから空白を削除するには、次のように呼び出します。

$oSmarty->loadFilter("output", "trimwhitespace");
$oSmarty->display($display);

詳細については、PHP クラスsmarty_outputfilter_trimwhitespaceとドキュメントをご覧ください: http://www.smarty.net/docs/en/advanced.features.outputfilters.tpl

于 2013-08-08T18:35:54.433 に答える