Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2013, 14:28   #1
Winlook
Пользователь
 
Регистрация: 14.11.2009
Сообщений: 56
Радость Написать простенький шаблонизатор

День добрый. Пытаюсь написать шаблонизатор, не могу вкурить логику работы, разьясните кто в теме.

Вот есть шаблон/дизайн, задача которого вывести в цикле информацию из массива, пока та не кончится

Код HTML:
<ul>
    [for messages]
        <li>{date}: {from} {text}</li>
    [/for]
</ul>
Вот так формируется массив.

PHP код:
$vars = array(
    
'title' => 'Сообщения чата',
    
'messages' => array(
        array(
'date' => ..., 'from' => ..., 'text' => ...), // очередная запись из таблицы
        
array('date' => ..., ...), // следующая запись
        
...
    ),
); 

А как написать обработчик? Почитав информацию на других сайтах, увидел, что используются парсеры. Тоесть парсером выдираем из шаблона код, заменяем его на нужный, выводим. А как циклы реализовать? Выдирать все, что внутри, опять же парсером

Код HTML:
  [for messages]
        <li>{date}: {from} {text}</li> - эту строку выдираем
    [/for]
И циклом создаем набор данных

Код HTML:
<li>{date}: {from} {text}</li>
<li>{date}: {from} {text}</li>
<li>{date}: {from} {text}</li>
<li>{date}: {from} {text}</li>
После чего их и выводим? Вот именно использование парсеров смущает. Пых знаю далеко не идеально, однако если подтолкнете в нужную сторону - разберусь.

Последний раз редактировалось Winlook; 10.03.2013 в 14:31.
Winlook вне форума Ответить с цитированием
Старый 10.03.2013, 16:14   #2
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

определитесь - писать свой будете? если да - покажите наработки и спросите что конкретно не получается, если готовый - так же покажите код и скажите что не получается
ADSoft вне форума Ответить с цитированием
Старый 10.03.2013, 16:29   #3
Winlook
Пользователь
 
Регистрация: 14.11.2009
Сообщений: 56
По умолчанию

Цитата:
Сообщение от ADSoft Посмотреть сообщение
определитесь - писать свой будете? если да - покажите наработки и спросите что конкретно не получается, если готовый - так же покажите код и скажите что не получается
Наработок нет, буду писать. Интересует возможная структура, не могу писать, не продумав и не поняв как оно в конечном итоге будет выглядеть, логика вообщем
Winlook вне форума Ответить с цитированием
Старый 10.03.2013, 16:42   #4
ADSoft
Старожил
 
Регистрация: 25.02.2007
Сообщений: 4,150
По умолчанию

грубо - загружаем шаблон - замены всякие делаем ...все
ADSoft вне форума Ответить с цитированием
Старый 11.03.2013, 11:43   #5
maximus825
 
Аватар для maximus825
 
Регистрация: 25.02.2013
Сообщений: 7
По умолчанию

Код:
# Подключаемый файл шаблона
$dir = "main.tpl";
	
# Открываем шаблон
$content = implode ("",file($shellpatch.$dir));
# Обрабатываем переменные
$content = str_replace("%TOOLBAR%", $toolbar, $content);

# Публикация страницы
echo $content;
Проще некуда
maximus825 вне форума Ответить с цитированием
Старый 11.03.2013, 21:15   #6
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Набросал на коленке. Скорость работы нулевая, да и ещё не факт, что работает. Главное - направление движения, правильно ведь?
PHP код:
$ts 0;
$output '';
$n=preg_match_all('/\[for ([\w]+)\].*?\[\/for\]/ms',$file,$matches,PREG_SET_ORDER|PREG_OFFSET_CAPTURE);
foreach (
$matches as $match) {
  
$block_output '';
  
$block $match[0][0];
  
$ms $match[0][1];
  
$key $match[1][0];
  
$me $ms+strlen($block)-1;
  
$internal substr($blockstrlen($key) + 6strlen($block) - strlen($key) - 12);

  if(
$ms>$ts)
    
$output.=substr($file,$ts,$ms-$ts);
  
$ts=$me+1;

  
$ni=preg_match_all('/{.*?}/ms',$internal,$imatches);
  foreach (
$vars[$key] as $var) {
    
$line_output $internal;
    foreach (
$imatches[0] as $imatch) {
      
$line_output str_replace($imatch$var[trim($imatch'{}')], $line_output);
    }
    
$block_output .= $line_output;
  }
  
$output .= $block_output;
}
if(
$ts<strlen($file))
  
$output.=substr($file,$ts);

echo 
$output
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
основы c#,нужно написать простенький код Jeka97 Помощь студентам 1 22.06.2012 15:23
Помогиет написать простенький макрос Vit981 Microsoft Office Excel 11 21.07.2010 15:16
Сложно ли написать простенький сниффер? TwiX Софт 3 25.01.2010 15:32
Помогите написать простенький проект на Visual C++ до среды Борменталь Помощь студентам 0 10.05.2009 18:13
Помогите написать простенький скрипт Сева Белуччи PHP 1 29.05.2008 17:31