从php变量创建html代码的更好方法?

aci*_*dic 2 html php mysql

我的网站包含许多产品,每个产品都包含在带有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>
Run Code Online (Sandbox Code Playgroud)

Ric*_*son 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>";
}
Run Code Online (Sandbox Code Playgroud)

如果你想要更好地采用框架,整个管理员配置页面如下所示.所有的HTML粘合都是由框架提供的 - 以下代码是真实的,但实际上是为了说明框架如何为您提供大量的垃圾工作.

在下面的示例中,如果我想编辑单个实体,我会将其更改TableViewEdit为a 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();
Run Code Online (Sandbox Code Playgroud)