1

何年も前に作成した古い Web サイトを書き直し、テンプレート システムを使用することにしました。私は Latte を PHP ファイルの生成に使用することにしました。これにより、毎回 tpl を解析するシステムと比較して非常に高速になります。しかし、ラテで関数を呼び出してその結果を取得する方法を理解できませんでした。

私はカスタム会社の TPL システムに慣れています。このシステムは、任意の関数を呼び出すことができ、関数定数を呼び出す{function_name.param}か、関数定数を使用するだけでパラメーターを渡すことさえできます{function::param}

このようなことは純粋に Latte で可能ですか (私は Nette や他のフレームワークを使用していません)? PHP のすべての関数を呼び出して、TPL が自由に使用できるパラメーターの配列に追加したくはありません。それは単に遅くなります(そうです、そこでifを使用してからTPLでifを使用できることは知っていますが、それは無駄なコードの複製でもあります)。

TPL (またはその親クラスの OFC) をレンダリングするクラス内の関数を呼び出し、必要なときに (必要な場合でも) その出力を返すことができるようにしたいので、初期化時に関数への不要な呼び出しを避けることができます。 TPL 解析用のパラメーター。

かなりグーグルで検索しようとしましたが、役立つものは何も見つかりませんでした。

また、自動テスト用の Tracy と Tester を使用した Latte を除いて、フレームワークをまったく使用しないことにも言及する必要があります。サイトはそれほど大きくなく、フレームワーク全体を使用すると必要以上に複雑になるため、Nette や Symfony 2 などは使用したくありません。

ありがとう。

.

追伸: だれか Latte のタグを作ってくれませんか?

4

2 に答える 2

2

この方法で任意の php 関数を簡単に呼び出すことができます。

{? echo 'hello'}

またはLatteの新しいバージョンでは:

{php echo 'hello'}

また、直接レンダリングされるNette\Utils \Html (フレームワークから分離された小さなライブラリ、小さなアプリでも優れたツールが満載) のインスタンスを渡すことができます。

または、独自のクラス レンダリング出力を直接使用する場合は、インターフェイス__toString()を使用して関数を実装するだけです。IHtmlString

class MyOwnClassRenderableByLatte implements \Latte\Runtime\IHtmlString
{
    function __toString()
    {
        return 'Hi';
    }
}

後の質問を含むテンプレートのサンプル:

{php
    // You can instantiate needed classes in one synoptical block
    // in the head of template file or reather instantiate them
    // outside of template and pass them as template variables
    $a = new ClassA();
    $b = new ClassB();
}

<div>{$a->someFunction()}</div>
<div>
    {* Or you can instantiate class inplace this way,
       but I wouldn't recommend it. BTW: This is Latte comment.
    *}
    {php (new ClassC())->otherFunction()}
</div>
于 2016-08-30T10:27:37.523 に答える
0

JavaScriptと同じように、このようなものを使用してみてください

{some code} //is for latte expression
{ some other code} //with space after first bracket its no more latte expression

あなたのTPLがそれを処理するかどうかはわかりませんが、表示されます

それが機能する場合は、より多くの想像力を使用して、次のようなものを使用できます

{
some fluffy code
}
于 2016-08-26T08:52:33.630 に答える