2017-05-14 26 views
0

我尝试调用Twig(木材)内部的静态助手方法。 {{ function('Theme\Helpers::get_template_name') }}Twig(木材)内的呼叫助手功能

警告:call_user_func_array()预计参数1是一个有效的 回调,类 'ThemeHelpers' 未发现 的/ var/www/html等/可湿性粉剂内容/插件/木库/ lib目录/ Twig.php on line 268.

有没有人知道如何调用Twig中不同类的方法?

回答

0

据我所知,你不能直接从你的树枝模板调用PHP类。 你可以做的是设置一个树枝过滤器,与你的班级 进行通信并返回所需的值。

你将不得不这样在你的PHP控制器文件,它是负责加载你的树枝模板:

<?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'); 

在你的树枝模板,你会叫这样的过滤器:

{{ ''|twg_get_template_name }} 

因为它一个过滤函数,它期望一个值“过滤”,所以传递至少一个空字符串。

如果我在那种情况下,我可能会确定您的 控制器中的模板名称,并直接将值发送到您的Twig模板,而不是通过过滤函数调用php类 。

0

感谢您的回答。

我试过你的方法 - 它的工作原理。但是使用过滤器会感觉有点冒险,特别是当没有值传递时。为什么不像过滤器一样创建木材功能? 将自己的功能从普通的php转换为树枝并不是很好,但我也没有看到另一个解决方案。

玩了一会之后,我想出了一个不同的方法。我现在通过自定义木材对象并向post变量添加模板属性来修复我的需求。

看起来是这样的:

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文件,其中枝条查看被调用里面,我这样调用自定义对象:

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

里面的枝条模板I”能够很容易地获得我的自定义属性(以我的方式模板):

{% for post in posts %} 

    {% include ["section/section-#{post.template}.twig"] %} 

{% endfor %} 
0

您可以致电使用数组表示法从木材的Twig文件中获得静态函数,其中第一项是类的名称,第二项是您要调用的静态方法的名称:

{{ function([ 'Theme\Helpers', 'get_template_name' ]) }}