Smartyは、Strposを開始し、Strlenを終了するStrposを備えたVARのサブストリングを取得します
質問
Smartyでフォーマット変数を発行しています。私はそれをするための最良の方法は何だろうと思っていました。基本的に、私は "abc | defgh"の文字列を持っています私はsmartyに「defgh」のサブストリングを取得してもらいたいです。
{$var|substr:strpos:"|":strlen}
うまくいきません
解決
VARをPHPに戻すことなく、また組み込みの関数ラッパーを使用してこれを解決しました。
それを仮定する:$ var = "abc | defgh";
{assign var="bar_at" value=$var|strpos:"|"}
<li>{$var}</li>
<li>{$var|substr:0:$bar_at}</li>
<li>{$var|substr:$bar_at+1}</li>
これは印刷されます:
他のヒント
Smarty 3では、Smarty 2ではそうではなく、誰かが同じことを達成したい場合に備えて、Smarty3に関するいくつかの情報:
最初のことは、それを機能させるために括弧を追加する必要があることです。 substr:$bar_at+1
うまくいきませんが substr:($bar_at+1)
動作します。
しかし、実際には、よりシンプルな構文を使用できます。
{assign var="var" value="ABC | DEFGH"}
{$var|substr:($var|strpos:"|"+1)}
これはあなたに与えます DEFGH
最初にスペースがあります(前と |
あなたの質問と私の例ではvar内のスペースです)そしてあなたはスペースなしで文字列を取得したいので、あなたはこの場合に使用する必要があります +2
それ以外の +1
:
{$var|substr:($var|strpos:"|"+2)}
上記のものはSmartyでテストされました 3.1.19
.
また、文字列UTF-8文字にある場合は、以前のバージョン(Smarty 3.1の前)で使用する必要があることも知っておく必要があります。 mb_
関数。
smarty 3.1の場合、場合 mbstring
拡張機能はSmartyが自動的に使用するインストールされています mb_
その場合、UTF-8文字に問題はありません。
詳細を読むことができます Smarty UTF-8エンコーディング
これらの機能はSmartyには存在しません。テンプレートに送信する前に、PHPで分割する必要があります。または、独自の分割関数Smartyプラグインを書くこともできます。または、テンプレートで{PHP}タグを使用しますが、スマートなもの、プレゼンテーションやロジックの分離などを使用する目的に反するため、そのソリューションは避けます。
のようにジムビーを使用する場合:
{$var|substr:$bar_at+1}
括弧または丸いブラケットを追加して機能させます。
{$var|substr:($bar_at+1)}