我正在修改一个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网址。
这对我来说是个新问题,所以我可能错了,但让我们按照代码倒退到插件中去。
{{%
出现在 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位很有用。模板函数既可以使用<%= ... %>来插值,也可以使用<% ... %>来执行任意的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
作为一个 这里定义的自定义字符串原型.
看来,这些表达方式都是属于 液态 编程语言。请看附件中的完整描述。