我的网站包含许多产品,每个产品都包含在带有id内容块的div中。链接,图像,背景,描述和价格都是从mySQL表加载的。我最初的计划是将下面的html代码保存为字符串并循环遍历mySQL表中的行,填充我使用php / mySQL值创建的字符串。
我想知道我是否正确地采用这种方式,还是有更好的方法从php变量创建HTML代码?
<div id="contentblock" style="background-image:url(images/$BACKGROUND.png);">
<div id="picture"><a href="$LINK"><img src="$IMAGELINK"/></a></div>
<div id="description"><p>$DESCRIPTION</p></div>
<div id="price"><p class=price>$PRICE</p></div>
</div>
答案 0 :(得分:5)
首先,PHP是一个模板引擎 - 根据我的经验模板引擎,PHP上面的层只适用于最简单的情况并且很容易过时。
其次,原始代码与任何方法一样好。有可能陈述显而易见的事情,使其更好地将其抽象为函数;
function output_block($BACKGROUND, $LINK, $IMAGELINK, $DESCRIPTION, $PRICE)
{
echo "<div id='contentblock' style='background-image:url(images/$BACKGROUND.png);'>
<div id='picture'><a href='$LINK'><img src='$IMAGELINK'/></a></div>
<div id='description'><p>$DESCRIPTION</p></div>
<div id='price'><p class=price>$PRICE</p></div>
</div>";
}
如果你想要更好地采用框架,整个管理员配置页面如下所示。所有HTML粘合都是由框架提供的 - 以下代码是真实的,但实际上是为了说明框架如何为您提供大量的垃圾工作。
在下面的示例中,如果我想编辑单个实体,我会将TableViewEdit
更改为FormView
,并提供实体的实例而不是可迭代列表。
$entity = new CbfConfig(); // Database entity
$page = new AdminWebPage("Site Configuration"); // Page for output
/*
* build the view
*/
$vil = new ViewItemList();
$col = &$vil->add(new ViewItem("description","Description"));
$col->get_output_transform()->allow_edit(false); // this field cannot be editted
$col = &$vil->add(new ViewItem("value","Value"));
$v1 = new TableViewEdit($entity, $vil,"admin_values"); // present as standard editable table
/*
* output the page
*/
$page->begin();
$iterable_list = CbfConfig::site_begin();
$page->add_body($v1->get_output($iterable_list,'admin_config'));
$page->end();
答案 1 :(得分:3)
我只是将我的所有html代码都放在php标签之外,然后我需要一个来自php的变量,如下所示
<div id="description"><p><?php echo $DESCRIPTION; ?></p></div>
你也可以循环非PHP代码。例如
<?php
for($i = 0; $i < 10; $i++) {
?>
<div id="description"><p><?php echo $i; ?></p></div>
<?php
} //end for loop
?>
显然这只是一个例子。
答案 2 :(得分:1)
如果我没有模板引擎,我通常会做类似的事情:
function partial($file, $args = array()) {
extract($args);
ob_start();
include($file);
return ob_get_clean();
}
答案 3 :(得分:0)
真的,有3种方法可以做到这一点。在您使用它的上下文中使用最简单的方法。
<?php
while(($row=mysql_fetch_assoc($result))!==false)
{
echo "<div>{$row['fieldName']}</div>";
}
?>
<?php
while(($row=mysql_fetch_assoc($result))!==false)
{
echo '<div>'.$row['fieldName'].'</div>';
}
?>
<?php
while(($row=mysql_fetch_assoc($result))!==false)
{
?>
<div><?= $row['fieldName']; ?></div>
<?php
}
?>