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

Форум PHP

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

 

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

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

тема: Система шаблонов
 
 автор: D.Lans   (18.08.2006 в 01:15)   письмо автору
 
 

Извиняюсь, нечаянно продублировал тему.
Плиз, удалите лишнюю.

   
 
 автор: Lelik   (18.08.2006 в 02:12)   письмо автору
 
   для: D.Lans   (18.08.2006 в 01:15)
 

>Извиняюсь, нечаянно продублировал тему.
>Плиз, удалите лишнюю.
По ходу удалили не ту. Что инересует, конкретней...

   
 
 автор: D.Lans   (19.08.2006 в 02:26)   письмо автору
 
   для: Lelik   (18.08.2006 в 02:12)
 

Вы удалили не ту тему???
Я в шоке...

Хорошо, что у меня есть старая привычка сохранять то что я пишу на форумах - в отдельный файл по мере написания..

Все равно, в следующий раз будьте осторожнее!

Итак:

написал (а точнее мне помогли написать) небольшую но удобную систему шаблонов.
Суть ее в том, что она парсит файл со шаблоном, находит в нем: {text}, {title} и меняет на "Здраствуйте, добро пожаловать на сайт", "Заголовок сайта", к примеру.

Но теперь нужно реализовать динамику в шаблоне - чтобы могли выводится например новости (а их количество заранее предусмотреть невозможно - их может быть хоть 1 хоть 20).

Я хочу это организовать так:


<table>
  <loop news>
     <tr>
       <td>{zagolovok}</td>
      </tr>
       <tr>
          <td>{news_text}</td>
       </tr>
     </loop news>
</table>


Между тегами <loop> - кусок кода который должен повторяться нужное количество раз, на каждом шаге в значения {zagolovok} и {news_text} - должны подставляться значения.

Думаю, идея ясна.

Однако моих знаний не хватает для реализации этой идее.
Кто-нибудь, оч прошу, может помочь это сделать или кинуть ссылку на материалы по этой теме.
Уже неделю мучаюсь.. Не могу сделать никак..



p.s. не могу на форуме найти свою тему.
Захожу в нее, найдя ее через поиск или заходя по сохраненной ссылке..

   
 
 автор: D.Lans   (19.08.2006 в 02:29)   письмо автору
 
   для: D.Lans   (19.08.2006 в 02:26)
 

и еще, не совсем в тему конечно, но т.к. я пишу свой сайт, меня это тоже интересует..

Хочу реализовать BB коды на своем сайте.
Плиз киньте ссылочку, где это цивильно описывается - как это делать.
Желательно в стиле регулярных выражений Perl (ибо его осваиваю).

   
 
 автор: Lelik   (19.08.2006 в 02:31)   письмо автору
 
   для: D.Lans   (19.08.2006 в 02:29)
 

в форуме "регулярные выражения" полно подобных тем

   
 
 автор: Lelik   (19.08.2006 в 02:30)   письмо автору
 
   для: D.Lans   (19.08.2006 в 02:26)
 

а у вас сайт на файлах или на БД?

   
 
 автор: D.Lans   (19.08.2006 в 02:31)   письмо автору
 
   для: Lelik   (19.08.2006 в 02:30)
 

на БД (MySQL 4)

   
 
 автор: Lelik   (19.08.2006 в 02:33)   письмо автору
 
   для: D.Lans   (19.08.2006 в 02:31)
 

вообще подобный вывод делается с помощью циклов

   
 
 автор: D.Lans   (19.08.2006 в 02:37)   письмо автору
 
   для: Lelik   (19.08.2006 в 02:33)
 

в том то и дело что циклы должны быть в PHP коде..
а в шаблоне только определены места для вставки переменных {text}
и как я уже написал - циклы, чтобы парсер знал, что надо данные проциклить.
например парсер находит
<loop news>
</loop>
и в зависимости от найденной переменной, (в данном случае news) выводит из БД какие-то данные, беря код между тегами <loop> парся его на {news_text} и {text_news} например и на каждом шаге в цикле вставляя опеределенные данные из БД...

   
 
 автор: Lelik   (19.08.2006 в 02:37)   письмо автору
 
   для: D.Lans   (19.08.2006 в 02:26)
 


<?php

$query 
"SELECT * FROM table news";
$res mysql_query($query);
if(!
$res) exit(mysql_error());
else
  
$news mysql_fetch_array($res);
echo 
'<table><loop news>';
for(
$i 0$i<mysql_num_rows($res); $i++)
   {
    echo
'  
     <tr> 
       <td>'
.$news["zagolovok"].'</td> 
      </tr> 
       <tr> 
          <td>'
.$news["news_text"].'</td> 
       </tr> '
;
   } 
echo 
'</loop news></table>';
?>

   
 
 автор: D.Lans   (19.08.2006 в 02:38)   письмо автору
 
   для: Lelik   (19.08.2006 в 02:37)
 

спасибо за код, сейчас гляну

   
 
 автор: D.Lans   (19.08.2006 в 02:39)   письмо автору
 
   для: D.Lans   (19.08.2006 в 02:38)
 

Это не совсем то.
В вашем примере код между тегами <loop> уже известен, а он может быть любым, его надо брать из шаблона.

   
 
 автор: Lelik   (19.08.2006 в 02:41)   письмо автору
 
   для: D.Lans   (19.08.2006 в 02:39)
 

я код исправил, попробуй заново

   
 
 автор: D.Lans   (19.08.2006 в 02:52)   письмо автору
 
   для: Lelik   (19.08.2006 в 02:41)
 

Все равно совсем не то.

У тебя теги <loop> <table> <tr> уже известны программисту и вставляются в PHP коде.
А в том и соль, что дизайнер, который работает только с шаблоном (PHP кода он не знает) - должен в своем шаблоне написать:


<table>
  <loop news>
     <tr>
       <td>{zagolovok}</td>
      </tr>
       <tr>
          <td>{news_text}</td>
       </tr>
     </loop news>
</table>


parser.php загружает этот файл, ищет в нем теги <loop>, в теге <loop> ищет:
<loop news>
ключевое слово news (оно может быть произвольным) и уже в зависимости от этого слова делает что-то, в частности - загружает из БД именно список новостей, а не что-то другое.
далее он находит кусок кода между тегами <loop>
в нашем случае это:

     <tr>
       <td>{zagolovok}</td>
      </tr>
       <tr>
          <td>{news_text}</td>
       </tr>


И прогоняет его по циклу столько раз, сколько найдено новостей в БД.
На каждом прогоне (итерации) - подставляет вместо {zagolovok} и {news_text} нужные данные из бд.
+на каждом шаге "запихивает" очередной блок кода (между тегами <loop> который) в одну строковую переменную..
затем эту переменную подставляет вместо <loop>, + стирает </loop>
Получается готовый отпарсенный файл..

В общем, пока я писал, я кажется сам понял как это сделать. :)))))))

   
 
 автор: Lelik   (19.08.2006 в 02:55)   письмо автору
 
   для: D.Lans   (19.08.2006 в 02:52)
 

а теперь посмотри внимательней на тот код, что я представил здесь - то, о чем ты как долго писал

   
 
 автор: D.Lans   (19.08.2006 в 21:27)   письмо автору
 
   для: Lelik   (19.08.2006 в 02:55)
 

Не совсем.
Все же спасибо.

Код я написал, только он не работает как надо..
Буду разбираться..

   
 
 автор: Lelik   (19.08.2006 в 02:42)   письмо автору
 
   для: D.Lans   (19.08.2006 в 02:39)
 

>Это не совсем то.
>В вашем примере код между тегами <loop> уже известен, а он может быть любым, его надо брать из шаблона.
я чет не понял, это как - брать из шаблона?

   
 
 автор: D.Lans   (19.08.2006 в 02:53)   письмо автору
 
   для: Lelik   (19.08.2006 в 02:42)
 

"брать из шаблона" - значит загружать файл с шаблоном в отдельную строковую переменную и уже затем оперировать с ней.

   
 
 автор: cyberface   (19.08.2006 в 22:03)   письмо автору
 
   для: D.Lans   (19.08.2006 в 02:26)
 

Не легче ли взять готовый шаблонизатор, который и быстрее и эффективнее работать будет?

[поправлено модератором]

   
Rambler's Top100
вверх

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