подключение к БД при использовании шаблонизации на сайте

Alx

Новичок
подключение к БД при использовании шаблонизации на сайте

Приветствую!

Вопрос в следующем: есть шаболон для сайта

<html>
<body>

<?=$body;?>

</body>
</html>

Всё работает, если body это теги хтмл. Но сейчас дело дошло до подключения к БД, выборки данных и построения таблицы. Подскажите, плз, можно ли такой код "загнать" в одну переменную (в данном примере - в $body)? Или же здесь нужен другой метод шаблонизации?
 

Demiurg

Guest
>Или же здесь нужен другой метод шаблонизации?
опиши существующий поподробнее.
 

Alx

Новичок
Есть шаблон, описаный выше. Во всех остальных файлах сайта переменной $body присваивается значение и после этого инклюдится файл шаблона.
 

Demiurg

Guest
Alx
и ? что в чем проблема с подключением к бд ?
делаешь запросы к бд и составляешь свою переменную уже исходя из них .
 

Alx

Новичок
Не могу разобраться с синтаксисом. Получается в переменной $body мне нужно обозначить следующее:

$connid=odbc_connect("...");
$res=odbc_exec($connid,"SELECT * FROM my_table");
while($row=odbc_fetch_array($res)){
echo "<table>...</table>"
}

Как такое можно сделать? Подскажите, плз, синтаксис описания переменной в переменной?
 

Ilya

Новичок
$body .= $variable
$body = "Какой то текст и HTML тэги" . $variable;

??? :)
 

Alx

Новичок
с переменными всё понятно, спасибо! Вопрос в том, как описать в $body следующую конструкцию:

while($row=odbc_fetch_array($res)){
echo "<table>...</table>"
}

-~{}~ 02.05.05 00:13:

получается - функция в переменной. Подозрительно звучит...
 

Demiurg

Guest
в переменную не надо писать конструкцию, в переменной должно быть значение.
 

gromitus

Новичок
while($row=odbc_fetch_array($res)){
$body.= "<table>...</table>";
}
Попытаюсь натолкнуть...
 

Фанат

oncle terrible
Команда форума
...и в результате ты получил не шаблон, а совершенно противоположное
 

Фанат

oncle terrible
Команда форума
Alx, это сложно понять.
Со временем у тебя получится.
а пока делай так.
 

Фанат

oncle terrible
Команда форума
Ну, ты сделал первый шаг к шаблонизации - вынес общую часть сайта в отдельный файл.
Однако дальше ты сделал шаг назад.
Если в последствии придётся поменять оформлкние, к примеру добавить в
$body.= "<table>...</table>";
какие-нибудь параметры, то придётся для этого копаться в невнятном коде, слешить кавычки, и делать много другой неприятной работы.

Если делать нормально, то html вообще не должен присутствовать в скрипте - ни одного тега.

Оформление - отдельно, скрипт - отдельно.
То есть, твоя программа должна состоять из трёх частей
1. общая часть сайта.
2. скрипт, который получает данные и оформляет их.
3. скрипт, который полученные данные выводит.

Вот этот третий и назявается шаблоном.
Его отличие от второго состоит в том, что он, так же, как и первый, состоит практически из html.
Если надо вывести переменную - выводишь средствами пхп
<?=$title?>
То есть, не хтмл собираешь в пхп, а наоборот - пхп встраиваешь в хтмл.

Таким образом будет гораздо проще адаптировать твою программу под изменения оформления.
 

Фанат

oncle terrible
Команда форума
вот тебе пример разделения кода и шаблона:
в частности, оно позволяет нормально обработать ошибки, если такие возникнут при работе скрипта
PHP:
<?
$cols=4;
$dir='album';
$thumb='thumbnails';
$thumbdir=$dir."/".$thumb;
$handle = opendir($thumbdir);
$i=1;
while (false !== ($file = readdir($handle))) { 
  if ($file != "." and $file != "..") {
    $files[$i]=$file;
    if (($i % $cols)) $new_col[$i]=0; else $new_col[$i]=1;
    $thumbnails[$i++]=$thumbdir."/".$file;
  }
}
$num=intval($_SERVER['QUERY_STRING']);
if (isset($files[$num])) $bigpic=$files[$num]; else $bigpic=$files[1];
$bigpic=$dir."/".$bigpic;
list(,,,$bigsize)=getimagesize($bigpic);

if(isset($files[$num+1])) $next_num=$num+1; else $next_num=1;
if(isset($files[$num-1])) $prev_num=$num-1; else $prev_num=count($files);

include 'shapka.php';
if (!$thumbnails) echo 'Извините, произошла ошибка';
include 'shablon.php';
include 'niz.php';
?>
=====shablon.php======
<div align="center">
<a href="?<?=$prev_num?>">&lt;&lt;&lt; предыдущая</a> | <a href="?<?=$next_num?>">следующая &gt;&gt;&gt;</a><br>
<img src="<?=$bigpic?>" <?=$bigsize?>><br>
<table width=0 border=0 bgcolor=#eeeeee cellpadding=7 cellspacing=3>
<tr>
<? foreach($thumbnails as $i => $thumb): ?>
  <td width=170 bgcolor=#cccccc valign="middle" align="center">
   <a href="?<?=$i?>"><img src="<?=$thumb ?>" border="0"></a>
  </td>
<? if ($new_col[$i]):?></tr><tr><? endif ?>
<? endforeach ?>
</tr>
</table>
</div>
при этом shablon.php может быть написан не с использованием пхп, а с использованием любого другого шаьблонизатора. Хоть смарти, хоть xslt. в коде же для этого потребуются минимальные изменения.
 

fixxxer

К.О.
Партнер клуба
> <? if (!(++$count % $cols)) echo "</tr><tr>\n"; ?>
Эта строка - концептуально неправильная. =)
 
Сверху