0

我正在使用来自https://github.com/XaminProject/handlebars.php的 Handlebars PHP实现

在我使用嵌套的 Handlebars 模板中if/else,请参见下面的模板:

 <div class="text-align-{{ options.alignment }} border-bottom-{{ options.style }}" style="border-width: {{ options.width }}px; border-color: {{ options.color }}">
    {{#if options.use_title_separator}}
        <div>
            {{#if options.back_to_top}}
                <a href="" onclick="return false;">{{ options.text_label }}</a>
            {{else}}
                {{ options.text_label }}
            {{/if}}
        </div>
    {{/if}}
</div>

PHP 5.4安装中可以正常工作,但在PHP 5.2安装中会引发以下错误:

<b>Parse error</b>: syntax error, unexpected T_FUNCTION in <b>/.../Handlebars/Helpers.php</b> on line <b>71</b><br />

冲突的代码似乎是:

$this->add(
        'if', 
        function ($template, $context, $args, $source) {
            $tmp = $context->get($args);
            $buffer = '';

            if ($tmp) {
                $template->setStopToken('else');
                $buffer = $template->render($context);
                $template->setStopToken(false);
                $template->discard($context);
            } else {
                $template->setStopToken('else');
                $template->discard($context);
                $template->setStopToken(false);
                $buffer = $template->render($context);
            }
            return $buffer;
        }
    );

我是一个完整的PHP菜鸟,我只是使用这个 Handelbars PHP 实现在多个不同的环境中拥有相同的模板。

你能帮我解决这个问题吗?

谢谢

4

2 回答 2

0

该库专为 PHP 5.3 及更高版本而设计。但是,如果您愿意,我重写了这些部分,以便在移植到我的平台时全部使用 PHP 5.0 及更高版本:

https://github.com/EGreg/Q/tree/master/platform/classes/Handlebars https://github.com/Ereg/Q/blob/master/platform/classes/Q/Handlebars.php

请享用!

于 2014-12-09T14:27:47.113 回答
0

在@deceze 和 Handlebars PHP 项目贡献者之一 (@everplays) 的帮助下,我可以找到解决方案:D

在https://github.com/XaminProject/handlebars.php/issues/16#issuecomment-23017993查看更多详细信息,希望我的推送请求将被接受,并且至少在帮助程序部分对PHP 5.2的支持将添加到项目中.

这是@everplays 的回答:

只需制作助手( https://github.com/XaminProject/handlebars.php/blob/8eb732f407121392015b1bcf032f8e4287fb3969/src/Handlebars/Helpers.php#L67static并像这样注册他们:$this->add('if, array('Handlebars_Helpers', '_if'))

例如,如果助手(定义在 中line 71),应该是这样的:

public static function _if($template, $context, $args, $source) {
  // body is the same
}

所以我为addDefaultHelpers()函数内的所有当前助手重复了该模式,如下所示:

/**
 * Create handler for the 'with' helper.
 * Needed for compatibility with PHP 5.2 since it doesn't support anonymous functions.
 *
 * @param $template
 * @param $context
 * @param $args
 * @param $source
 *
 * @return mixed
 */
  public static function _helper_with($template, $context, $args, $source) {
    $tmp = $context->get($args);
    $context->push($tmp);
    $buffer = $template->render($context);
    $context->pop();
    return $buffer;
}

   ...

protected function addDefaultHelpers()
{
    $this->add(
        'if',
        array('Handlebars_Helpers', '_helper_if')
    );

    $this->add(
        'each',
        array('Handlebars_Helpers', '_helper_each')
    );

    $this->add(
        'unless',
        array('Handlebars_Helpers', '_helper_unless')
    );

    $this->add(
        'with',
        array('Handlebars_Helpers', '_helper_with')
    );

    //Just for compatibility with ember
    $this->add(
        'bindAttr',
        array('Handlebars_Helpers', '_helper_bindAttr')
    );
}

并来到Helpers文件的以下版本:

https://github.com/XaminProject/handlebars.php/pull/17/commits

希望它会很快添加到主分支中,以便在主项目中固定。

谢谢大家

于 2013-08-21T14:52:40.477 回答