在插件中输出变量

时间:2012-10-29 00:21:15

标签: expressionengine

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

2 个答案:

答案 0 :(得分:10)

如果你只是使用构造函数来输出,请确保插件类有一个公共属性return_data,其中包含已解析的tagdata:

$this->return_data = $this->EE->TMPL->parse_variables($tagdata, $variables);

对于类中的任何其他方法,您只需返回解析后的数据,就像您的示例一样。

作为旁注,我认为你不在这里循环任何数据。请考虑使用parse_variables_row方法,因此省略了counttotal_resultsswitch等额外变量。使用该方法并不需要嵌套数组,因此可以归结为:

$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错误。