繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM