0

私は Smarty の基本的な使用法を少し超えようとしていますが、デフォルトの「capitalize」修飾子を使用して小さな問題に遭遇しました。この演算子を使用するために明示的な呼び出しを行う必要がないという前提で操作しているため、テンプレートには次のものがあります。

{* Smarty Part: Add-ins *}

<div class="control-group form-inline">
<label class="control-label">Add-ins:</label>
  <div class="controls ">
    {foreach $add_ins as $add_in}
    <label class="checkbox inline"><input type="checkbox" cf-change="toggle-field::#{$add_in}-add-in"> {$add_in|capitalize}</label>
    {/foreach}
  </div>
</div>

私が置き換えるとしたら:

{$add_in|capitalize}

{$add_in}

正常に動作しますが、修飾子を追加すると次のエラーが発生します。

PHP Fatal error: Uncaught exception 'SmartyCompilerException' with message 'Syntax Error in template [FILE_PATH] on line 7 "<label class="checkbox inline"><input type="checkbox" cf-change=" toggle-field::#{$add_in}-add-in"> {$add_in|capitalize}</label>" 不明な修飾子「大文字にする」'

どんな助けでも大歓迎です。

4

3 に答える 3

1

Smarty ディレクトリには、通常の修飾子を含むすべてのデフォルト プラグインを含む plugins ディレクトリが必要です。

この問題を解決できない場合は、任意の PHP 関数を修飾子として使用できることを覚えておいてください。したがって、この場合は次を使用できますucfirst()

{$add_in|ucfirst}

$securityただし、これは の状態の対象となります。詳細については、ドキュメントを参照してください。

于 2012-10-30T23:02:07.543 に答える
0

ken の上記のコードを使用する場合は、/より適切に使用することもできます

$object->addPluginsDir(LG_FE_DIR . '/templates/plugins_dir');

そして、デフォルトのものを気にする必要はありません。

于 2014-01-09T10:38:25.210 に答える
0

この問題は、独自のプラグイン用のディレクトリを登録し、デフォルト ディレクトリへの参照を保持していないことに起因します。たとえば、次のようなもので初期化をスマートに使用しました。

 public static function init () {
    $object = new Smarty();
    $object->setTemplateDir ( LG_FE_DIR . '/templates/uncompiled' );
    $object->setCompileDir ( LG_FE_DIR . '/templates/compiled'  );
    $object->setCacheDir ( LG_FE_DIR . '/templates/cache' );
    $object->setConfigDir ( LG_FE_DIR . '/templates/configs' );

    return $object;
}

この時点で、Smarty のデフォルトの修飾子を問題なく使用できました。次に、プラグインの独自のディレクトリが必要であると判断し、次の行を init() メソッドに追加しました。

$object->setPluginsDir ( LG_FE_DIR . '/templates/plugins_dir');

自分のプラグインを呼び出せるようになったという意味ではうまく機能しましたが、デフォルトのプラグイン (および修飾子) も壊れました。なんで?プラグインディレクトリについて明示するとすぐに、デフォルトのディレクトリが範囲外になるため、両方を指定する必要があると思います。幸いなことに、それは簡単です...含めたいさまざまなディレクトリを配列に貼り付けるだけです。私にとっては、次のように見えました。

$object->setPluginsDir ( array(LG_FE_DIR . '/templates/plugins_dir', LG_FE_DIR . '/externals/Smarty/libs/plugins') );
于 2012-11-06T16:28:45.093 に答える