[英]What type of variable is this in php: {{%= description %}}
我正在修改一个 wordpress 插件(SiteOrigin 2.0.7 的页面构建器),并且在一个我不认识的符号中的一个 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
的扩展里面,所以Backbone 文档也可以很好地打开。
首先,让我们看看我们的函数直接处理的是什么—— #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
是浏览器忽略的模板,客户端代码可以使用. 所以它在这个模板中用%>
替换{{%
with <%
and %}}
,通过template()
函数运行它,并将它全部设置为这个视图中的template
变量。
template()
在做什么? 它没有在这个文件中定义,但它在模板部分下的 Underscore.js 文档中。 显然它实际上是整个_.template()
,而不仅仅是template()
。 这是概述:
将 JavaScript 模板编译为可用于渲染的函数。 用于从 JSON 数据源渲染复杂的 HTML 位。 模板函数既可以使用 <%= ... %> 插入值,也可以使用 <% ... %> 执行任意 JavaScript 代码。 [...]
所以,我们现在知道 Underscore.js 在模板中使用<%
和%>
作为它们的数据标识符,如我们上面看到的那样,用于变量和任意 JavaScript。
我们知道{{% .. %}}
是什么
{{%= description %}}
在这种情况下或多或少是在说<script> document.write(description); </script>
<script> document.write(description); </script>
。 它将description
参数输出到模板 HTML 中。
如果我是一个赌徒,我敢打赌您可以通过 WordPress/Page Builder Admin 更改小部件标题和描述。
至于检查变量是什么,您可能最适合在页面上呈现所有内容之后进行检查。
$( document ).ready(function() {
if ($("#id .so-content img").prop("src").endsWith(".jpg")) {
...
endsWith
是此处定义的自定义 String 原型。
看起来,这些表达式是Liquid编程语言的一部分。 有关完整说明,请参阅所附链接。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.