继this question后,我正在尝试重新设计插件,以便我可以这样做:
{exp:deetector}
{user_agent}
{hash}
{/exp:deetector}
但是使用下面的代码,我没有输出:
public function __construct()
{
$this->EE =& get_instance();
include(PATH_THIRD.'/deetector/libraries/detector.php');
$this->ua = $ua;
$tagdata = $this->EE->TMPL->tagdata;
$variables[] = array(
'user_agent' => $this->ua->ua,
'hash' => $this->ua->uaHash,
'browser_os' => $this->ua->full,
'browser' => $this->ua->browser,
'browser_full' => $this->ua->browserFull
);
return $this->EE->TMPL->parse_variables($tagdata, $variables);
}
如果我为上面列出的每个变量做$this->return_data = $this->ua->xx
,我得到输出,但是如果我解析$ variables数组则不行。
我也试过了$variables = array
,但得到未定义的偏移:0 。
答案 0 :(得分:10)
如果你只是使用构造函数来输出,请确保插件类有一个公共属性return_data
,其中包含已解析的tagdata:
$this->return_data = $this->EE->TMPL->parse_variables($tagdata, $variables);
对于类中的任何其他方法,您只需返回解析后的数据,就像您的示例一样。
作为旁注,我认为你不在这里循环任何数据。请考虑使用parse_variables_row
方法,因此省略了count
,total_results
和switch
等额外变量。使用该方法并不需要嵌套数组,因此可以归结为:
$variables = array(
'user_agent' => $this->ua->ua,
...
);
$this->return_data = $this->EE->TMPL->parse_variables_row($tagdata, $variables);
答案 1 :(得分:2)
关于您引用的其他帖子,没有人指出您已经定义了2个构造函数:
__construct() and deetector()
你应该删除第二个而只是use __construct()
。不确定这是否可能导致奇怪的PHP错误。