ExpressionEngine:将参数传递给变量标签对并在函数

时间:2016-01-14 18:55:50

标签: php expressionengine

我需要将参数传递给内部标记,例如

{exp:myplugin:func}
  {last_year subject="xxx"}

  {/last_year}
{/exp:myplugin:func}

如何在函数中获取该参数?

1 个答案:

答案 0 :(得分:1)

这是我编写的函数,用于返回模板标记对中变量对的参数:

private function get_variable_parameters($tagData, $varName) {
    $parameters = array();

    if (strpos($tagData, LD."/".$varName.RD) !== FALSE) {
        //###   Closing variable tag exists   ###
        if (preg_match_all("/".LD.$varName."(.*?)".RD."(.*?)".LD."\/".$varName.RD."/s", $tagData, $matches)) {
            for ($num = 0; $num < count($matches[0]); $num++){
                $allParams = explode(" ", trim($matches[1][$num]));
                foreach($allParams as $value) {
                    $value = str_replace(array('"', "'"), '', $value);
                    $param = explode("=", $value);
                    if (!empty($param[1]))
                        $parameters[$param[0]] = $param[1];
                }
            }
        }
    }

    return $parameters;
}//###   End of get_variable_parameters function   ###

从您的func方法中的示例代码开始:

$tagData = ee()->TMPL->tagdata;
$varParameters = $this->get_variable_parameters($tagData, "last_year");
echo $varParameters["subject"];

回顾一下我的代码,我不认为它在同一个循环中处理多个同一个变量对的使用,所以如果需要可能需要改变这一行:

$parameters[$param[0]] = $param[1];

为:

$parameters[$num][$param[0]] = $param[1];

然后计算同一循环中变量对的实例。未经测试,可能需要更多的工作!