2012-06-26 2 views
2

Мой сайт состоит из множества продуктов, каждый из которых содержится в div с блоком содержимого id. Ссылка, изображение, фон, описание и цена загружаются из таблицы mySQL. Мой первоначальный план состоял в том, чтобы сохранить нижний html-код в виде строки и петли над строками таблицы mySQL, заполняя строку, созданную с помощью значений php/mySQL.Лучший способ создания html-кода из PHP-переменных?

Мне было интересно, если я собираюсь сделать это правильно, или есть лучший способ создать html-код из PHP-переменных?

<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

Является ли этот блок кода частью петли? –

+1

В зависимости от того, как часто вы повторно используете это, вы можете создать класс, который принимает строку Id или Data и имеет метод GenerateHtml(). Это даст вам более чистый код, но может оказаться ненужным накладные расходы, если он используется только в нескольких местах. – Basic

+1

звучит относительно стандартно, если вы не хотите использовать механизм шаблонов. –

ответ

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(); 
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 
} 
?> 
+0

могут объединить переменную и повторить ее один раз. –

+0

В общем, вы хотите этого не делать. Использование памяти может сильно скапливаться, если вы сохраняете все свои данные в переменной вместо того, чтобы повторять ее по мере ее получения. – teh1

+0

Если это так, вам лучше получить новый сервер! –

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 
?> 

Очевидно, что это всего лишь пример.

+0

Я не знаю, сколько продуктов будет, поэтому код html должен быть сгенерирован в php – acidic

+0

Ive повторно отправил мое сообщение, чтобы показать, как вы можете обойти не php-код в php. Таким образом вам не нужно буксировать orry о хранении самого html в переменных. –

+0

@JonTaylor Вам лучше дать 'foreach ($ RecordSet as $ Row) {}' example - Таким образом, вам не нужно угадывать/читать количество записей, и это более читаемо – Basic

1

хорошо, если им не шаблонного движка для somereason я обычно делаю что-то вроде:

function partial($file, $args = array()) { 
    extract($args); 
    ob_start(); 
    include($file); 
    return ob_get_clean(); 
} 
Смежные вопросы