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

问题描述 投票:0回答:2

我正在修改一个wordpress插件(Page Builder by SiteOrigin 2.0.7),其中一个php文件(tpljs-templates.php)有一些变量,我不认识。这些变量是这样的: {{%= foo %}} 它们总是出现在html的中间.

这里是一些html的例子。

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

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

我如何在条件中使用这个变量?例如,我想测试如果 {{%= url %}} 是一个jpg网址。

php wordpress variables
2个回答
1
投票

这对我来说是个新问题,所以我可能错了,但让我们按照代码倒退到插件中去。

{{% 出现在 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() 在做什么?这个文件中没有定义,但在 模板部分下的Underscore.js文档。. 显然,它实际上是整个 _.template()不仅仅是 template(). 下面是概述。

将JavaScript模板编译成可以评估渲染的函数。对于从JSON数据源渲染复杂的HTML位很有用。模板函数既可以使用<%= ... %&gt来插值,也可以使用<% ... %&gt来执行任意的JavaScript代码。[...]

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

我们知道 {{% .. %}}

{{%= description %}} 在这种情况下,差不多是说 <script> document.write(description); </script>. 它输出的是 description 参数到模板HTML中。

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

至于检查变量是什么,你可能最适合在页面上的所有内容都呈现出来之后检查。

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

endsWith 作为一个 这里定义的自定义字符串原型.


0
投票

看来,这些表达方式都是属于 液态 编程语言。请看附件中的完整描述。

© www.soinside.com 2019 - 2024. All rights reserved.