【问题标题】:Smarty 3.1.1 kills newlinesSmarty 3.1.1 杀死换行符
【发布时间】:2012-02-28 19:15:30
【问题描述】:

我有这个 Smarty 模板。

<p>
    {foreach from=$fields item=field};{$field.dbName};{/foreach}
</p>

但不是

<p>
    ;test1;;test2;
</p>

它打印出以下内容:

<p>
    ;test1;;test2;</p>

但是为什么呢?

$smarty-&gt;compile_dir 文件是正确的。但是$smarty-&gt;display() 函数会删除我的换行符。这不是我想要的!我想要模板的 1:1 输出。

我不想在foreach 行的末尾有一个空格字符。我不想在 foreach 行之后添加第二个换行符。

是否有关闭此“功能”的配置?

Br

【问题讨论】:

  • 不,没有。这是“默认 PHP”行为。如果您需要换行符,请明确说明:{/foreach}\n\n&lt;/p&gt;
  • @rodneyrehm 默认 PHP 行为?不,当我使用print "&lt;p&gt;\ntest\n&lt;/p&gt;"; 时,它也可以工作。但只有 Smarty 是行不通的。
  • &lt;p&gt;\n&lt;?php … ?&gt;\n&lt;/p&gt; 你就会明白我的意思了……
  • @rodneyrehm 是的,我明白了。你说的对。嗯,这不是Smarty的问题。那是一个PHP问题。该死的。
  • 问题在于 Smarty 将 {$t} 替换为 &lt;?php echo $_smarty_tpl-&gt;tpl_vars['t']-&gt;value;?&gt;。 Smarty 是否有可能(可能通过配置?)从变量中获取内容,而不是使用 &lt;?php?&gt; 打印变量内容。

标签: php html templates smarty newline


【解决方案1】:

不可能涵盖所有场景,如果这样做会怎样:

<p>
  {foreach ...}
     ...
  {/foreach}
</p>

您不想创建额外的换行符吗?也在 PHP 中:

<p>
  <?php foreach(...): ?> ... <?php endforeach(); ?>
</p>

你仍然会在最后一个 PHP 代码块之后吃掉换行符。

也就是说,Smarty 3.2 中将有一个功能,包括在 smarty 标签之前和之后吃换行符。像 {-foo} 这样的东西会在标签前吃掉换行符,而 {foo-} 会吃掉标签后的换行符。

【讨论】:

    猜你喜欢
    • 2012-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 2012-01-03
    相关资源
    最近更新 更多