php中这是什么类型的变量:{{%=description%}}


What type of variable is this in php: {{%= description %}}

我正在修改一个wordpress插件(SiteOrigin 2.0.7版的Page Builder(,其中一个php文件(tpl/js-templates.php(中有一些变量,我无法识别。变量如下所示:{{%= foo %}},它们总是出现在html中间。

以下是一些html:的示例

<div class="so-buttons">
    {{%= buttons %}}
</div>
<div class="so-content panel-dialog">
    <img src="{{%= url %}}">
    {{%= content %}}
</div>

这是什么?这是刀片模板符号吗?

如何在条件中使用此变量?例如,我想测试{{%= url %}}是否是jpg url。

这对我来说有点新,所以我在这里可能错了,但让我们通过插件向后看代码。。

{{%出现在tpl'js-templates.php中36次,js'siteorigin-panels.js(和.min版本(出现一次。%}}在同一个php文件中仅出现34次,在js文件中仍然出现一次。

在.js文件中,它们出现在第14+行,这里是:

String.prototype.panelsProcessTemplate = function(){
    var s = this;
    s = s.replace(/{{%/g, '<%');
    s = s.replace(/%}}/g, '%>');
    s = s.trim();
    return s;
};

因此,他们使用{{%作为占位符,并使用JS将其替换为<%。关闭的%}}(现在的%>(也是如此。

它也显示为<script>

{{% if( count > 1 ) { %}} <span class="count">({{%= count %}})</span>{{% } %}

看看这个文件的顶部,我们会看到Convert template into something compatible with Underscore.js templates,所以我们知道我们应该调出Underscore.js文档以供将来参考。

那么,panelsProcessTemplate()字符串原型是如何使用的呢?在提到的js文件中多次,例如在第211行:

panels.view.widget = Backbone.View.extend({
    template: _.template( $('#siteorigin-panels-builder-widget').html().panelsProcessTemplate() )

这是Backbone.View扩展的内部,因此主干文档可能也很适合打开。。

首先,让我们看看我们的函数直接处理的是什么——#siteorigin-panels-builder-widget在php文件的93+行:

<script type="text/template" id="siteorigin-panels-builder-widget">
<div class="so-widget ui-draggable">
<div class="so-widget-wrapper">
    <div class="title">
        <h4>{{%= title %}}</h4>
        <span class="actions">
            <a href="#" class="widget-edit"><?php _e('Edit', 'siteorigin-panels') ?></a>
            <a href="#" class="widget-duplicate"><?php _e('Duplicate', 'siteorigin-panels') ?></a>
            <a href="#" class="widget-delete"><?php _e('Delete', 'siteorigin-panels') ?></a>
        </span>
    </div>
    <small class="description">{{%= description %}}</small>
</div>
</div>
</script>

text/template是一个浏览器忽略的模板,客户端代码可以使用。因此,它将在该模板中用<%替换{{%,用%>替换%}},通过template()函数运行它,并在该视图中将其全部设置为template变量。

template()在做什么?这个文件中没有定义它,但它在Undercore.js文档的template部分下。显然,它实际上是整个_.template(),而不仅仅是template()。以下是概述:

将JavaScript模板编译为可用于渲染的函数。用于从JSON数据源呈现复杂的HTML位。模板函数既可以使用<%=…%>对值进行插值,以及使用<%…%>执行任意JavaScript代码。[…]

因此,我们现在知道Undercore.js在模板中使用<%%>作为它们的数据标识符,无论是变量还是任意JavaScript,正如我们上面看到的那样。

我们知道{{% .. %}}是什么

在这种情况下CCD_ 30或多或少地说是CCD_。它将description参数输出到模板HTML中。

如果我是一个赌徒,我敢打赌你可以通过WordPress/页面生成器管理员更改小部件的标题和描述。

至于检查变量是什么,您可能最适合在页面上呈现所有内容后进行检查。

$( document ).ready(function() {
   if ($("#id .so-content img").prop("src").endsWith(".jpg")) {
     ...

endsWith是这里定义的自定义字符串原型。

看起来,这些表达式是Liquid编程语言的一部分。有关完整描述,请参阅所附链接。