|
|
|
| Структура шаблонов такова(от большего к меньшему): область-блок-модуль или меню-если меню, ссылки меню
В основном шаблоне пишем переменные $area_1, $area_2,$area_3 и т.д. В каждой из этих переменных - весь html-код отдельно взятой области.
Например, $area_1 - в этой переменной весь html-код блоков, модулей, меню, ссылок меню, которые относятся к области с id = 1.
Теперь код, а после расскажу, что не получается:
<?php
//выбираем все области сайта
$sql = "SELECT * FROM area";
$res = mysql_query($sql);
if(!$res) exit("Error in $sql1: ". mysql_error());
for($i = 0;$area_t = mysql_fetch_assoc($res);){
$arr_area[] = $area_t['area_id'];
$sql1 = "SELECT * FROM blocks WHERE area_id = " . $area_t['area_id'];
$res1 = mysql_query($sql1);
if(!$res1) exit("Error in $sql1: ". mysql_error());
for($j = 0;$b_t = mysql_fetch_assoc($res1);){
//записать файлы блоков в шаблон области
$filename = 'templates/theme/default/area/area_' . $area_t['area_id'] . '.tpl';
$fp = fopen($filename, "w") or die('Could not open text_file' . $filename);
flock($fp, LOCK_EX);
$bi = $b_t['block_id'];
//строка {include file... включает шаблон блока в шаблон области
$body = "{include file = 'theme/default/blocks/block_$bi.tpl'}";
eval ("\$body = \"$body\";");
//запись
fwrite($fp,$body);
flock($fp, LOCK_UN);
fclose($fp);
}
}
//определяем шаблон области
foreach($arr_area as $ar){
$var = "area_" . $ar;
//выводим блоки области
$smarty->assign($var,$smarty->fetch("theme/default/area/area_" . $ar . ".tpl"));
}
$smarty->display('perm.tpl');
?>
|
Для того, чтобы включить шаблоны блоков в шаблон области, в шаблон области записываются строки {include file = 'theme/default/blocks/block_1.tpl} - это динамически подключается блок с id=1.
Проблема вот в чем. Когда я записываю в шаблон области эти строки, у меня записывается только последний шаблон. И выводится только шаблон одного блока. А надо, чтобы все.
Пробовала делать не запись, а дозапись в конец файла - $fp = fopen($filename, "a+"), при этом проверяю - если эта строка есть, ее не пишем. Первый раз блоки пишутся нормально, во все остальные разы - пишется слишком много таких строк, потому что они в цикле. Если непонятно объяснила, спрашивайте | |
|
|
|
|
|
|
|
для: Лена
(17.10.2009 в 21:09)
| | файл открывать/закрывать нужно не во внутреннем цикле, а во внешнем. | |
|
|
|
|
|
|
|
для: Trianon
(17.10.2009 в 21:17)
| | Я открываю во внутреннем, потому как у меня строка $body = "{include file = 'theme/default/blocks/block_$bi.tpl'}"; , что пишется в файл, содержит $bi = $b_t['block_id']; - используется значение из этого внутреннего цикла | |
|
|
|
|
|
|
|
для: Лена
(17.10.2009 в 21:22)
| | Я же не писать во внешнем предлагаю, а открывать/закрывать.
Т.е.
$filename = 'templates/theme/default/area/area_' . $area_t['area_id'] . '.tpl';
fopen($filename, "w");
и
fclose($fp);
Ну и может быть еще блокировку / разблокировку.
Но не запись fwrite($fp,$body); | |
|
|
|
|
|
|
|
для: Trianon
(17.10.2009 в 21:28)
| | Спасибо, помогло. Могла б и сама додуматься. Поспешила, наверное, с темой. | |
|
|
|