4

这个问题之后,我现在正在尝试重新设计插件,以便我可以做到:

{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但得到Undefined offset: 0

4

2 回答 2

10

如果您只是使用构造函数进行输出,请确保插件类具有return_data包含已解析标记数据的公共属性:

$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);
于 2012-10-29T09:29:32.403 回答
2

关于您引用的另一篇文章,没有人指出您定义了 2 个构造函数:

__construct() and deetector()

你应该放弃第二个,然后use __construct(). 不确定这是否可能导致奇怪的 PHP 错误。

于 2012-10-29T12:53:55.147 回答