Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Конструктор шаблонов
 
 автор: Лена   (17.10.2009 в 21:09)   письмо автору
 
 

Структура шаблонов такова(от большего к меньшему): область-блок-модуль или меню-если меню, ссылки меню
В основном шаблоне пишем переменные $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($fpLOCK_EX);
               
$bi $b_t['block_id'];
            
//строка {include file... включает шаблон блока в шаблон области
            
$body "{include file = 'theme/default/blocks/block_$bi.tpl'}";
             eval (
"\$body = \"$body\";");
             
//запись
            
fwrite($fp,$body);
            
flock($fpLOCK_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+"), при этом проверяю - если эта строка есть, ее не пишем. Первый раз блоки пишутся нормально, во все остальные разы - пишется слишком много таких строк, потому что они в цикле. Если непонятно объяснила, спрашивайте

  Ответить  
 
 автор: Trianon   (17.10.2009 в 21:17)   письмо автору
 
   для: Лена   (17.10.2009 в 21:09)
 

файл открывать/закрывать нужно не во внутреннем цикле, а во внешнем.

  Ответить  
 
 автор: Лена   (17.10.2009 в 21:22)   письмо автору
 
   для: Trianon   (17.10.2009 в 21:17)
 

Я открываю во внутреннем, потому как у меня строка $body = "{include file = 'theme/default/blocks/block_$bi.tpl'}"; , что пишется в файл, содержит $bi = $b_t['block_id']; - используется значение из этого внутреннего цикла

  Ответить  
 
 автор: Trianon   (17.10.2009 в 21:28)   письмо автору
 
   для: Лена   (17.10.2009 в 21:22)
 

Я же не писать во внешнем предлагаю, а открывать/закрывать.
Т.е.
$filename = 'templates/theme/default/area/area_' . $area_t['area_id'] . '.tpl';
fopen($filename, "w");
и
fclose($fp);

Ну и может быть еще блокировку / разблокировку.

Но не запись fwrite($fp,$body);

  Ответить  
 
 автор: Лена   (17.10.2009 в 21:43)   письмо автору
 
   для: Trianon   (17.10.2009 в 21:28)
 

Спасибо, помогло. Могла б и сама додуматься. Поспешила, наверное, с темой.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования