【发布时间】:2020-09-07 15:01:24
【问题描述】:
我已经尝试了几个小时来获取一些 freemarker 代码来输出我想要的内容。本质上,我试图让它从产品中获取特定的“属性”,该属性定义了某物的总成本。使用该数字 - 将其乘以所订购商品的数量,然后减去已支付的金额。最终,我试图为订购的每件商品计算这一点,然后将这些数字相加得出应付余额。
<#list order.items as orderItem>
<#list orderItem.attributes as attribute>
<#if "${attribute.name}" == ("Total Cost")>
<#assign subtotal=orderItem.subtotal?keep_after("$")>
<#assign total += (attribute.value?number * orderItem.quantity?number - subtotal?number)>
</#if>
</#list>
</#list>
Total: ${total}
当我运行它时,我的变量为空(因为我没有正式看到任何错误输出,我假设这意味着我遇到了错误)。 我最初的问题源于定义的变量(orderItem.subtotal)被列为带有美元符号的字符串,因此我必须将其设置为删除它,然后将其用作数字。 attribute.value 始终是一个数字,但被视为字符串。 orderItem.quantity 是一个数字。 我也尝试过使用它:
<#list order.items as orderItem>
<#list orderItem.attributes as attribute>
<#if "${attribute.name}" == ("Total Cost")>
<#assign subtotal=orderItem.subtotal?keep_after("$")>
<#assign total ++ (attribute.value?number * orderItem.quantity?number - subtotal?number)>
</#if>
</#list>
</#list>
Total: ${total}
使用 ++ 表达式,情况更糟,导致我的整个模板在生成时都是空白的,而不仅仅是那个变量。
我在这里做错了吗?我似乎无法让这个变量增加以在我的模板上打印出这个总数。
【问题讨论】:
-
<#if "${attribute.name}" == ("Total Cost")>你在比较字符串对吗?<#if attribute.name == "Total Cost">可以。您应该在#list 之前定义总计,以防循环不运行,您至少会看到一些告诉您总计没有改变的内容。如果您有权访问服务器日志,则可以在那里看到错误。如果您在本地运行 tomcat,您应该可以访问服务器的日志/控制台输出 -
"当我运行它时,我的变量为空" 哪个变量为空?请发布
order.item的定义方式,您还可以通过将 if 语句放置在某些位置并打印出一些消息来调试其中的一些内容,这样至少您知道哪些语句失败了 -
@Huangism - 你建议我如何在我的列表之前定义“total”?我已经尝试了分配和本地,当我在列表之前这样做时会出现某种错误,并且我的整个输出最终都是空白的(假设它是因为错误)。当我运行我的第一组时,为 null 的变量是“total”。 Order.Item 由 Ecwid 店面定义为已订购的商品。
-
<#assign total=0 />应该可以工作。如果有错误,你需要阅读日志,看看是什么错误。如果您在运行代码后总数为 0,那么您知道它可能由于某种原因没有通过列表。您也可以只在页面上输出内容,以查看您拥有的变量的值是否符合您的预期
标签: variables freemarker