Smartyは、Strposを開始し、Strlenを終了するStrposを備えたVARのサブストリングを取得します

StackOverflow https://stackoverflow.com/questions/4389978

  •  10-10-2019
  •  | 
  •  

質問

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>

これは印刷されます:

  • ABC | defgh
  • ABC
  • defgh
  • 他のヒント

    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)}
    
    ライセンス: CC-BY-SA帰属
    所属していません StackOverflow
    scroll top