如何编写php+;html在一个文件中更漂亮? 这里是html 如果id不是2,那么这里会有东西
如果不学习smarty,如何在一个文件中编写更漂亮的php+html?-php echo。如果这是您想要的,也就是说,如果您正在输出大量HTML,那么继续您正在执行的操作可能更具可读性。如何编写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块
您可以使用:
<?
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实现的线程,在这里我发表了一条评论