如何编写php+;html在一个文件中更漂亮? 这里是html 如果id不是2,那么这里会有东西

如何编写php+;html在一个文件中更漂亮? 这里是html 如果id不是2,那么这里会有东西,php,html,Php,Html,如果不学习smarty,如何在一个文件中编写更漂亮的php+html?-php echo。如果这是您想要的,也就是说,如果您正在输出大量HTML,那么继续您正在执行的操作可能更具可读性。您可以使用: <? if($id == 2) { ?> html goes here <? } else { ?> if id is not 2 then something goes here <? } ?> 一些html 另一个html块

如果不学习smarty,如何在一个文件中编写更漂亮的php+html?

-php echo。如果这是您想要的,也就是说,如果您正在输出大量HTML,那么继续您正在执行的操作可能更具可读性。

您可以使用:

<?
if($id == 2) {
?>
       html goes here
<?
} 
else { 
?>
       if id is not 2 then something goes here
<?
}
?>

一些html
另一个html块

请注意,这是一个需要显式启用的php.ini指令,否则您必须编写我喜欢的
并使用soulmerge的方法。但还有一个问题:

<? if ($id == 2): ?>
    <h2>some html</h2>
<? else: ?>
    <h2>another html chunk</h2>
<? endif ?>

你可以这样做

<?php

if ($id == 2)
echo <<< END
    <h2>some html</h2>
END;
else
echo <<< END
    <h2>another html chunk</h2>
END;

?>

Buuut,如果您想让您的设计师更轻松,只需使用外部文件:

<?
$html_1 = <<<EOH
my html goes here
EOH;

$html_2 = <<<EOH
my html <i>something else</i> html goes here
EOH;

echo ($id==2?$html_1:$html_2);
?>


并使用预定义的关键字插入php计算的内容(在本例中%php生成的内容%被2(1+1)替换)

对于一些HTML代码,我建议使用herdoc

像这样:

<?
$html=($id==2 ? file_get_contents("html_1.html") : file_get_contents("html_2.html") );
$html=str_replace("%php generated content%", 1 + 1, $html );
echo $html;
?>

另外,您可以尝试一种有两个文件的方法:一个php文件和一个phtml文件。php文件是主逻辑,然后phtml文件是html输出

就像你的例子一样

<?php
if($id==2)
 echo <<<EOT
Blah
EOT;
else
 echo <<<EOT
Your id is <b>{$id}</b>
EOT;
?>
//logic.php文件
如果($id==2)
$sOutput='Yes';
其他的
$sOutput='No';
//文件末尾的某个地方
包括“logic.phtml”;
//logic.phtml
诸如此类诸如此类你可以登录

我个人不喜欢使用短标记,因为我发现它们在文件中不一致,我更喜欢使用一种方法。通过一些简单的更改,您可以立即使其看起来更具可读性,如下所示:

// logic.php file
if($id==2)
 $sOutput = 'Yes';
else
 $sOutput = 'No';
// somewhere at the end of the file
include 'logic.phtml';

// logic.phtml
<html>
<title><?=$sOutput?></title>
<body>
Blah blah blah <?=$sOutput?> you can login
</body>
</html>

这里是html

如果id不是2,那么这里会有东西
比其他答案简单一点,但也是我认为最具可读性的方式。这实际上与您自己的偏好有关,尽管已经提出了许多其他好方法(我就是这么做的)。

您可以实现MVC(模型、视图、控制器)设计模式,您的代码可以用作加载视图的模型:

<? if($id == 2) {    ?>

       <p>html goes here</p>

<? } else       {    ?>

       <span>if id is not 2 then something goes here</span>

<? }                 ?>


在view.php中,您将显示html页面,其中仅包含php变量和数组的回声

正如许多其他人所建议的那样,您可以使用MVC,或者如果您不喜欢实现严格的MVC结构,您应该使用模板系统

这并不意味着你必须学习smarty,你可以编写你自己的模板系统,只需要你真正需要的功能

如果您正在与设计师合作,而性能不是您的第一点,那么您可以使用简单的占位符构建一个html文件,其中包含动态内容,然后用php(str_replace,preg_replace)替换它。。但这会减慢您的应用程序

例如:

<?php
if($id == 2) 
{
 //somes variable and array controls
}
else  
{
 //somes variable and array controls
}
//include the view
include('view.php');
?>
function htmlVars($html, $vars){
    $html = preg_replace_callback('/@\[([0-9a-zA-Z_\$]*)\]/',function ($matches) use ($vars){
  return isset($vars[$matches[1]])?$vars[$matches[1]]:"";
 },$html);
 return $html;
}
这是一个基本示例,有两个问题:

  • 表现
  • 必须指示设计师不要触摸占位符
  • 更简单的解决方案可以是:

    $title = 'Hello world';
    if($id == 2){
        $content = get_content();
    }else{
        $content = get_another_content();
    }
    //really, this is just as example ;)
    ob_start();
    include('template.html');
    $output = ob_get_clean();
    echo str_replace(
        array('@[title]', '@[content]'),
        array($title, $content),
        $output
    );
    
    但是回显html应该尽可能减少,这不是一个好的做法,它将逻辑与内容混合在一起
    逻辑就是逻辑,数据就是数据,生活是美好的

    除了丹尼尔的答案之外,你还可以做如下事情:

    $title = 'Hello world';
    if($id == 2){
        $content = get_content();
    }else{
        $content = get_another_content();
    }
    include('template.php');
    
    <?php
    if ($id == 2){
    $someText = 'I like your id!';
    }else{
    $someText = 'I love your id!';
    }
    ?>
    <html>
    ...complex html...
    <p><?php echo $someText ?></p> <!-- or <?= $someText ?> -->
    ...complex html...
    </html>
    
    例如:

    <?php
    if($id == 2) 
    {
     //somes variable and array controls
    }
    else  
    {
     //somes variable and array controls
    }
    //include the view
    include('view.php');
    ?>
    
    function htmlVars($html, $vars){
        $html = preg_replace_callback('/@\[([0-9a-zA-Z_\$]*)\]/',function ($matches) use ($vars){
      return isset($vars[$matches[1]])?$vars[$matches[1]]:"";
     },$html);
     return $html;
    }
    
    结果:

    echo htmlVars('foo is @[foo] and bar is not @[bar]',
        Array('foo'=>'foo','bar'=>'barz'));
    

    匿名函数仅适用于php 5.3或更高版本

    为了更好地实现未来(设计)的可维护性,我建议如下:

    foo is foo and bar is not barz
    
    
    …复杂的html。。。
    

    …复杂的html。。。
    实际上有两种情况:

    1) 模板代码。我推荐soulmerge的控制结构替代语法方法

    2) 简而言之,查看帮助器PHP代码,该代码生成的输出(通常用于以后的替换)不一定需要它自己的子模板

    对于2,我更喜欢以下内容:

    $title = 'Hello world';
    if($id == 2){
        $content = get_content();
    }else{
        $content = get_another_content();
    }
    include('template.php');
    
    <?php
    if ($id == 2){
    $someText = 'I like your id!';
    }else{
    $someText = 'I love your id!';
    }
    ?>
    <html>
    ...complex html...
    <p><?php echo $someText ?></p> <!-- or <?= $someText ?> -->
    ...complex html...
    </html>
    
    公共函数绘图(){
    $html=array();
    foreach($this->item as$item){
    
    $html[]=
    美在于……这并不重要。如果你与设计师合作,他们可能会喜欢短标签。可能有太多不必要的空间,但我发现对齐标签看起来更好。我很挑剔。顺便说一下:
    我知道这一点,但在我的回答中没有注意到,哈哈!谢谢你指出这一点。补充说明:如果你与设计师合作,他们可能更喜欢一个更干净的phtml文件,因为那里没有太多的php会妨碍你。小心,短标签在PHP6中会被弃用回显html???谁对这个答案投了反对票???我不知道当设计师动手的时候会发生什么…这是一个糟糕的做法。@DaNieL I知道回显所有html不是一个好主意。但是考虑到Donator是一个初学者(我想),没有必要从MVC、EOH等开始。这是回显一条html语句的简单方法。对于新手来说,完整的MVC模式肯定有点复杂(嗯……对我来说也是如此;),但我认为一个很好的建议是找到其他解决方案,小而快地实现,以实现他的目标,但在其他方面没有失败。原始帖子没有提到与设计师共享代码的任何内容,它只说明了“美好”当然可以。我也总是使用这种风格。看起来很干净,可以很容易地移动代码块,并且更容易理解发生了什么;看到endif或endwhile会告诉您与一堆}顺便说一句,如果需要添加更多代码,请不要忘记例如endif之后的分号:。使用MVC模型并不意味着视图中不能有简单的逻辑。如果从控制器向视图发送数组,则仍然需要例如foreach()显示数组的变量。此时您又回到了原来的问题。这没有问题,我邀请您查看有关MVC实现的线程,在这里我发表了一条评论