Prestashop 1.7 - 将变量从 Smarty 分配给 JS 时,转换单引号

问题描述

Smarty 3.1.33 给JS分配字符串变量时,单引号'转为实体'

我的代码

{$newOrder = $newOrder|cat :"[{ldelim}\r\n'transactionId':'$orderID'\r\n"|cat: "'transactionAffiliation': 'site.com',\r\n"|cat: "'transactionTotal': '$totalPrice',\r\n"|cat :"'transactionProducts': $orderProducts\r\n {rdelim}]"}

<script>dataLayer = {$newOrder|escape:'html':'UTF-8'};</script>

获取

<script>dataLayer = [{
    &#039;transactionId&#039;:&#039;7214&#039;
    &#039;transactionAffiliation&#039;: &#039;site.com&#039;,&#039;transactionTotal&#039;: &#039;608&nbsp;грн.&#039;,&#039;transactionProducts&#039;: [{
    &#039;sku&#039;:&#039;17962&#039;,&#039;name&#039;:&#039;Детские ходунки M 0591-S микс 4 цвета&#039;,&#039;category&#039;:&#039;Ходунки&#039;,&#039;price&#039;:445,&#039;quantity&#039;:1
}],[{
    &#039;sku&#039;:&#039;28963&#039;,&#039;name&#039;:&#039;Планшет обучающий SK 0019&#039;,&#039;category&#039;:&#039;Говорящие азбуки&#039;,&#039;price&#039;:163,&#039;quantity&#039;:1
}]
 }];
    </script>

需要(没有“' ;”):

<script>dataLayer = [{
    'transactionId': '1234','transactionAffiliation': 'site.com','transactionTotal': 11.99,'transactionProducts': [{
    'sku': 'DD44','name': 'T-Shirt','category': 'Apparel','price': 11.99,'quantity': 1                                                                            
   }]
}];
</script>

解决方法

由于 prestashop 在 1.7+ 版本中改变了转义方式,这引起了很多头痛。

您可以尝试删除这样的自动过滤器{$newOrder nofilter}