2017-05-14 12 views
0

Twig(Timber)内で静的ヘルパーメソッドを呼び出そうとしています。 {{ function('Theme\Helpers::get_template_name') }}Twig(Timber)内でヘルパー関数を呼び出す

警告:call_user_func_array()は、パラメータ1が有効 コールバックすることを期待し、クラスのThemeHelpersは '/ /var/www/htmlと設定/ WP-コンテンツ/プラグイン/木材・ライブラリー/ libには見られませんTwig.php on line 268.

誰もがTwigの中で別のクラスのメソッドを呼び出す方法を知っていますか?

答えて

0

私の知る限り、あなたのtwigテンプレートからPHPクラスを直接呼び出すことはできません。 できることは、クラス と通信し、必要な値を返すTwigフィルタを設定することです。

あなたの小枝テンプレートをロードする責任があるPHPのコントローラファイルでこれを持っているでしょう:それはだから

{{ ''|twg_get_template_name }} 

:あなたはこのようにフィルタを呼ぶだろう、あなたの小枝テンプレートで

<?php 

function twg_get_template_name() { 

    # edit this according to the implementation of your class: 
    return Helpers::get_template_name(); 
} 

function add_to_twig($twig) { 
    /* this is where you can add your own fuctions to twig */ 
    $twig->addExtension(new Twig_Extension_StringLoader()); 
    $twig->addFilter('twg_get_template_name', new Twig_Filter_Function('twg_get_template_name')); 
    return $twig; 
} 

add_filter('get_twig', 'add_to_twig'); 

フィルタ関数は値が "フィルタする"と期待しているので、少なくとも空の文字列を渡します。

私がこのような状況にあったのなら、あなたの コントローラでテンプレートの名前を決定して、フィルタ機能を使ってPHPクラス を呼び出すのではなく、Twigテンプレートに直接値を送信します。

0

ご回答ありがとうございます。

私はあなたのアプローチを試みました。しかし、フィルタを使用すると、特に値が渡されないときに、少しハッピーに感じます。フィルタと同じように木材関数を作成してみませんか? プレーンなPHPからtwigへの独自の機能の連携は素晴らしいことではありませんが、私はこれに対するもう一つの解決策も見当たりません。

少し遊んだ後、私は別のアプローチを思いついた。 Timberオブジェクトをカスタマイズし、テンプレート変数をポスト変数に追加することで、私の必要性を修正しました。

は次のようになります。

class OnepagePost extends TimberPost { 

    var $_template; 

    // Add template property to Twig Object 
    public function template() { 

     return Helpers::get_template_name($this->custom['_wp_page_template']); 

    } 

} 

はその後小枝ビューが呼び出されるの.phpファイル内に、私はこのようなカスタムオブジェクトと呼ばれる:小枝テンプレートI」インサイド

$context['posts'] = new Timber\PostQuery($args, 'OnepagePost'); 
Timber::render('onepager.twig', $context); 

私のカスタムプロパティを非常に簡単に得ることができます(私の方法ではテンプレートになります):

0

配列表記を使用してTimberのTwigファイルから静的関数を取得します。最初のitemはクラスの名前で、2番目の項目は呼び出したい静的メソッドの名前です。

関連する問題