为什么用Smarty渲染时HTML的格式如此差?

开发者栈

为什么查看源代码时HTML的格式如此差?

使用:

  1. WAMPSERVER(64位和PHP 5.5)2.5

  2. Slim Framework v2

  3. RedBeanPHP 4.2

  4. Smarty 3.1.21


index.php:

<?php

// load required files
require 'class/Slim/Slim.php';
require 'class/RedBean/rb.php';

// register slim auto-loader
\Slim\Slim::registerAutoloader();

// set up database connection
R::setup('mysql:host=localhost;dbname=slimcms','root','');
R::freeze(true);


// initialize app
$app = new \Slim\Slim(array(
    'mode' => 'development'
    ,'debug' => true
    ,'view' => new \Slim\Views\Smarty()
    ,'templates.path' => './templates'
));


$view = $app->view();

$view->parserDirectory = dirname(__FILE__) . '/class/Smarty/';
$view->parserCompileDirectory = dirname(__FILE__) . '/compiled';
$view->parserCacheDirectory = dirname(__FILE__) . '/cache';



// handle GET request for index
$app->get('/', function() use ($app){
    $books = R::findAll('book');
//print_r($books);
    $app->render('home.tpl',array('books'=>$books));

});


$app->run();

模板/home.tpl:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Home</title>
</head>
<body>    
    <div id="content">
        {foreach name=aussen item=book from=$books}
            {foreach key=key item=value from=$book}
                {if $key == 'id' }
                    <a href="{$key}/{$value}">{$key}</a>
                {else}{$key}{/if}
            {/foreach}
            <hr />
        {/foreach}
    </div>    
</body>
</html>

当我通过chrome查看源代码时

    <!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>Home</title>
</head>
<body>
    <div id="content">
                                                        <a href="id/1">id</a>
                                            rating                            price                            title                        <hr />
                                                        <a href="id/2">id</a>
                                            rating                            price                            title                        <hr />
            </div>
</body>
</html>

我本来期望:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
    <title>Home</title>
</head>
<body>
    <div id="content">
        <a href="id/1">id</a> rating price title
        <hr>
        <a href="id/2">id</a> rating price title
        <hr>
    </div>
</body>
</html>
缺氧

这是对问题“为什么”部分的回答。关于不言而喻的“如何修复”部分,您最好尝试找出如何生成更小的HTML而不是更漂亮的HTML。

在编译时,Smarty替换由包围的片段{}用PHP代码块,封闭在<?php?>

以下Smarty模板片段:

<div id="content">
    {foreach name=aussen item=book from=$books}
        {foreach key=key item=value from=$book}
            {if $key == 'id' }
                <a href="{$key}/{$value}">{$key}</a>
            {else}{$key}{/if}
        {/foreach}
        <hr />
    {/foreach}
</div>

变成类似:

<div id="content">
    <?php foreach ($books as $book): ?>
        <?php foreach ($book as $key => $value) : ?>
            <?php if ($key == 'id'): ?>
                <a href="<?php echo $key; ?>/<?php echo $value; ?>">{$key}</a>
            <?php else ?><?php echo $key; ?><?php endif; ?>
        <?php endforeach; ?>
        <hr />
    <?php endforeach; ?>
</div>

请注意,上面的PHP代码不是Smarty生成的。Smarty生成的代码由于其存储分配给模板的变量的方式,其处理内置函数的属性,变量修饰符及其提供的其他功能的方式而变得更加复杂。
但是出于讨论的目的,代码的这种过度简化的版本就足够了。此处重要的是,Smarty请勿在{ ... }外更改任何内容

Smarty不会破坏模板/ HTML代码的格式。PHP是做到这一点的人。

PHP解释代码块(用<?php括起来?>),并将其替换为它们生成的输出(如果有)。但是,如果它在PHP结束标记之后,它还会删除一个换行符?>

块的结束标记将包含紧随其后的换行符(如果存在的话)。

(来源:http : //php.net/manual/en/language.basic-syntax.instruction-separation.php

但是,用于Smarty标记缩进的空格也不会被Smarty移除PHP(因为它们不在标记内)。他们使用最终的HTML,由于删除了换行符,因此破坏了格式。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在引发StackOverflowException时.NET表现如此差?

来自分类Dev

为什么用十进制像素渲染图像?

来自分类Dev

为什么用此代码(drawRect)渲染2行?

来自分类Dev

为什么用Python拍摄的网络摄像头图像如此暗?

来自分类Dev

为什么用Webpack和Gulp构建的输出包如此之大(> 1.9Mb)?

来自分类Dev

为什么用`<html>`启动HTML文件时,流星为什么不呈现任何内容?

来自分类Dev

为什么用`<html>`启动HTML文件时,流星为什么不呈现任何内容?

来自分类Dev

为什么从 unity 运行 webGL 构建时我的纹理质量如此差?

来自分类Dev

为什么用cocos2d-x在白色背景图层上绘制红色矩形Sprite如此困难?

来自分类Dev

为什么用cocos2d-x在白色背景图层上绘制红色矩形Sprite如此困难?

来自分类Dev

为什么用集合渲染部分内容不起作用?

来自分类Dev

为什么用管道将“ mysql”拖尾到“ tail”会改变输出格式?

来自分类Dev

为什么用Pandoc创建的RTF文件会以纯文本格式打开?

来自分类Dev

为什么用 .ToString("X4") 格式化的数字中有字符?

来自分类Dev

为什么此LINQ可查询分页性能如此差?

来自分类Dev

为什么PIL产生的JPEG图像质量如此差?

来自分类Dev

为什么我的PostScript打印质量如此差?

来自分类Dev

为什么用“ if(!! variable)”而不是“ if(variable)”?

来自分类Dev

为什么用QT编译OpenCV?

来自分类Dev

为什么用阴谋而不是使

来自分类Dev

为什么用TCPDF代替mpdf

来自分类Dev

Vim:为什么用$作为行尾?

来自分类Dev

为什么用.call(this)代替括号

来自分类Dev

为什么用ViewStates代替Sessions

来自分类Dev

Haskell:为什么用等号失败?

来自分类Dev

Vim:为什么用$作为行尾?

来自分类Dev

为什么用!!(condition)代替(condition)?

来自分类Dev

为什么用递归停止isRoundNumber

来自分类Dev

为什么用联合包装结构?

Related 相关文章

  1. 1

    为什么在引发StackOverflowException时.NET表现如此差?

  2. 2

    为什么用十进制像素渲染图像?

  3. 3

    为什么用此代码(drawRect)渲染2行?

  4. 4

    为什么用Python拍摄的网络摄像头图像如此暗?

  5. 5

    为什么用Webpack和Gulp构建的输出包如此之大(> 1.9Mb)?

  6. 6

    为什么用`<html>`启动HTML文件时,流星为什么不呈现任何内容?

  7. 7

    为什么用`<html>`启动HTML文件时,流星为什么不呈现任何内容?

  8. 8

    为什么从 unity 运行 webGL 构建时我的纹理质量如此差?

  9. 9

    为什么用cocos2d-x在白色背景图层上绘制红色矩形Sprite如此困难?

  10. 10

    为什么用cocos2d-x在白色背景图层上绘制红色矩形Sprite如此困难?

  11. 11

    为什么用集合渲染部分内容不起作用?

  12. 12

    为什么用管道将“ mysql”拖尾到“ tail”会改变输出格式?

  13. 13

    为什么用Pandoc创建的RTF文件会以纯文本格式打开?

  14. 14

    为什么用 .ToString("X4") 格式化的数字中有字符?

  15. 15

    为什么此LINQ可查询分页性能如此差?

  16. 16

    为什么PIL产生的JPEG图像质量如此差?

  17. 17

    为什么我的PostScript打印质量如此差?

  18. 18

    为什么用“ if(!! variable)”而不是“ if(variable)”?

  19. 19

    为什么用QT编译OpenCV?

  20. 20

    为什么用阴谋而不是使

  21. 21

    为什么用TCPDF代替mpdf

  22. 22

    Vim:为什么用$作为行尾?

  23. 23

    为什么用.call(this)代替括号

  24. 24

    为什么用ViewStates代替Sessions

  25. 25

    Haskell:为什么用等号失败?

  26. 26

    Vim:为什么用$作为行尾?

  27. 27

    为什么用!!(condition)代替(condition)?

  28. 28

    为什么用递归停止isRoundNumber

  29. 29

    为什么用联合包装结构?

热门标签

归档