2015-07-03 83 views
0

我正在修改一个wordpress插件(由SiteOrigin 2.0.7页面生成器),并且在一个php文件中有一些变量(tpl/js-templates.php)在我不认识的表示法中。变量看起来像这样:{{%= foo %}}它们总是出现在html中。这是什么类型的变量是在PHP中:{{%= description%}}

下面是一些HTML的例子:

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

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

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

+0

我不是100%肯定,但它看起来像把手它基本上是一个JavaScript库查找它可能是 – Innervisions

+0

哪个插件和哪个版本?请提供您拥有的所有详细信息。 –

+0

我刚刚添加了该信息。它是SiteOrigin 2.0.7的[Page Builder](https://siteorigin.com/page-builder/),文件是tpl/js-templates.php。 – msb

回答

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 documentation以供将来参考。

那么,panelsProcessTemplate()字符串原型怎么用?在提到的js文件中有好几次,例如在行211:

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

这是Backbone.View的扩展中,这样的Backbone documentation也可能是好的,开拓..

首先,让我们看看我们的功能是直接加工 - #siteorigin-panels-builder-widget是在线文件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 is a browser-ignored template client-side code can use。因此它将替换{{%<%%}}%>在此模板中,运行它通过template()函数,并在此视图中将它全部设置为template变量。

什么是template()在做什么?它没有在这个文件中定义,但它在Underscore.js documentation under the template section。显然它实际上是整个_.template(),而不仅仅是template()。以下是概述:

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

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

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

{{%= description %}}在这种情况下更多或更少的话说<script> document.write(description); </script>。它将description参数输出到模板HTML中。

如果我是一个博彩人,我敢打赌你可以通过WordPress/Page Builder Admin更改小部件的标题和描述。

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

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

endsWith是一个custom String prototype defined here