2

我的网站包含许多产品,每个产品都包含在带有 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>
4

4 回答 4

6

首先,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为 aFormView并提供实体的实例而不是可迭代列表。

$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();
于 2012-06-26T00:34:58.850 回答
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
?>

显然这只是一个例子。

于 2012-06-26T00:18:38.053 回答
1

好吧,如果我出于某种原因没有模板引擎,我通常会这样做:

function partial($file, $args = array()) {
  extract($args);
  ob_start();
  include($file);
  return ob_get_clean();
}
于 2012-06-26T00:22:12.700 回答
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
}
?>
于 2012-06-26T00:18:36.177 回答