我尝试调用Twig(木材)内部的静态助手方法。 {{ function('Theme\Helpers::get_template_name') }}
Twig(木材)内的呼叫助手功能
警告:call_user_func_array()预计参数1是一个有效的 回调,类 'ThemeHelpers' 未发现 的/ var/www/html等/可湿性粉剂内容/插件/木库/ lib目录/ Twig.php on line 268.
有没有人知道如何调用Twig中不同类的方法?
我尝试调用Twig(木材)内部的静态助手方法。 {{ function('Theme\Helpers::get_template_name') }}
Twig(木材)内的呼叫助手功能
警告:call_user_func_array()预计参数1是一个有效的 回调,类 'ThemeHelpers' 未发现 的/ var/www/html等/可湿性粉剂内容/插件/木库/ lib目录/ Twig.php on line 268.
有没有人知道如何调用Twig中不同类的方法?
据我所知,你不能直接从你的树枝模板调用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类 。
感谢您的回答。
我试过你的方法 - 它的工作原理。但是使用过滤器会感觉有点冒险,特别是当没有值传递时。为什么不像过滤器一样创建木材功能? 将自己的功能从普通的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 %}
您可以致电使用数组表示法从木材的Twig文件中获得静态函数,其中第一项是类的名称,第二项是您要调用的静态方法的名称:
{{ function([ 'Theme\Helpers', 'get_template_name' ]) }}