2

私のウェブサイトは、idコンテンツブロックを持つdivにそれぞれ含まれている多くの製品で構成されています。リンク、画像、背景、説明、価格はすべてmySQLテーブルから読み込まれます。私の当初の計画は、以下のhtmlコードを文字列として保存し、作成した文字列をphp/mySQL値で埋める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接着剤はフレームワークによって提供されます。次のコードは実際のものですが、フレームワークがどのように多くのグランジ作業を提供できるかを実際に示しています。

以下の例では、単一のエンティティを編集する場合は、をに変更しTableViewEditFormView反復可能なリストではなくエンティティのインスタンスを提供します。

$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

Idは、すべての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 に答える