Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Переписываем старый шаблонизатор
А в index.tpl
просто пишем тэг {TITLE} и получаем переменную...) для дизайнеров так куда понятнее..
Вот, а мне нужна такая штука...у меня есть файлы с информацией, например news.html,
нужно дописать парсер так, что бы можно было содержимое этого файла, представить таким же тэгом, например {NEWS} в шаблоне. Я пробовал дописывать такой вариант, но увы не получилось:
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
chuikoff пишет:
нужно дописать парсер так, что бы можно было содержимое этого файла, представить таким же тэгом, например {NEWS} в шаблоне
Если вам нужен универсальный способ добавления шаблонов по имени файла/раздела то можете сделать так - пишите или получаете из базы список всех основных разделов и для каждоо из них делаете что-то типа $parse->set_tpl("{$FILE}",file_get_contents("path/to/$FILE")); Если данные берутся из БД то просто вставляете туда переменнуюс обрботанным ресурсом БД - если генерируются каким-то еще PHP-скриптом то соответственно вызывается с помощью CURL/sockets и тд
Здесь только одна проблема в том что ваш шаблонизатор подразумевает сразу вставку всех замен - а если это большие страницы и их достаточно много то это лишний расход памяти - так что лучше модифицировать шаблонизатор чтобы он делал такой поиск и добавление при первой встрече соответствующего шаблона
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
CenapaTop
Отправлено: 09 Апреля, 2010 - 15:42:34
Частый гость
Покинул форум
Сообщений всего: 166
Дата рег-ции: Авг. 2009
Здесь только одна проблема в том что ваш шаблонизатор подразумевает сразу вставку всех замен - а если это большие страницы и их достаточно много то это лишний расход памяти - так что лучше модифицировать шаблонизатор чтобы он делал такой поиск и добавление при первой встрече соответствующего шаблона
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
chuikoff
Отправлено: 10 Апреля, 2010 - 01:46:06
Новичок
Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2010 Откуда: Kamchatka
Помог: 0 раз(а)
Цитата:
Здесь только одна проблема в том что ваш шаблонизатор подразумевает сразу вставку всех замен - а если это большие страницы и их достаточно много то это лишний расход памяти - так что лучше модифицировать шаблонизатор чтобы он делал такой поиск и добавление при первой встрече соответствующего шаблона
Вот здесь и фишка в том, что файлы у меня подразумеваются маленькие, например форма входа login.html там всего-то 5 строк...и все соединения в основном файле index.php с шаблонами подразумеваются с ajax, т.е. подгрузка будет идти, поэтому мне была важна это функция:
function set_tpl_file($key,$file)
Вобщем-то спасибо всем кто помог с основой, если есть у кого ещё предложения по улучшению шаблонизатора (не в ущерб уже готовому), буду рад выслушать...)
Покинул форум
Сообщений всего: 352
Дата рег-ции: Окт. 2008
Помог: 8 раз(а)
[+]
chuikoff пишет:
Вот здесь и фишка в том, что файлы у меня подразумеваются маленькие, например форма входа login.html там всего-то 5 строк...и все соединения в основном файле index.php с шаблонами подразумеваются с ajax, т.е. подгрузка будет идти, поэтому мне была важна это функция:
function set_tpl_file($key,$file)
Есть еще такая очень удобная вещь для загрузки отдельных элементов страницы XML + XSLT.
Покинул форум
Сообщений всего: 114
Дата рег-ции: Март 2010 Откуда: Орел, Россия
Помог: 0 раз(а)
Ух ты! У меня была старая рега!
JustUserR
Отправлено: 10 Апреля, 2010 - 13:51:58
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
chuikoff пишет:
Вот здесь и фишка в том, что файлы у меня подразумеваются маленькие, например форма входа login.html там всего-то 5 строк...
Может быть в конкретном случе файлы и небольшие но всегда желательно думать и о расширении проекта - просто приведенных подход не совем хорош тем что в нем сначала записываются в память все возможные значения подстановок и протом проичходит замена - при этом часть из них может вообще не потребоваться - и в этом плаен загрузка по требованию более эффективна
chuikoff пишет:
И все соединения в основном файле index.php с шаблонами подразумеваются с ajax, т.е. подгрузка будет идти, поэтому мне была важна это функция
Если запрос блоков происходит с клиентской стороны с помощью Iframe или AJAX к примеру то это другое дело - но в таком случае зачем парсить эти блоки на сервере в PHP-скрипте - если можно происто передать ID для загрузки блоков и с помощью JS уже выполнять конкретную загрузку и копирование даных в innerHTML
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
chuikoff
Отправлено: 12 Апреля, 2010 - 11:30:18
Новичок
Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2010 Откуда: Kamchatka
Помог: 0 раз(а)
Согласен ваш способ хорош, вплане быстродействия, но я пока не хочу лезть туда, куда не понимаю, у меня с ООП в пхп плоховато...вот, подскажите пожалуйста как сделать include файла in.php, что бы вместо {INC} например подключался php-файл?
Я пробовал по старому типу, только функцию заменить, но опять траблы:
Вместо подключаемого файла выходит "1", и подключаемый файл встаёт не туда где этот системный тэг {INC} и именно в самое начало index.php Скажите пожалуйста почему так происходит, и как нужно переписать функцию.
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
chuikoff пишет:
$this->vars[$key] = include($file);
Функция include не сичтывает содержимое файла а пытается его исполнить как PHP-скрипт - поэтому замените ее в данном случае на fopen/fgets или проще file_get_contents
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
chuikoff
Отправлено: 14 Апреля, 2010 - 06:11:25
Новичок
Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2010 Откуда: Kamchatka
Помог: 0 раз(а)
Цитата:
Функция include не сичтывает содержимое файла а пытается его исполнить как PHP-скрипт - поэтому замените ее в данном случае на fopen/fgets или проще file_get_contents
Я так делал но в итоге на выходе я получаю:
displayRating("Site",5); ?>
Это ведь не нормально видеть в сгенерированном html коде, необработанные php команды.
Получается что он просто взял содержимое файла на сервере, а не его готовый html результат.
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
JustUserR пишет:
так делал но в итоге на выходе я получаю:
Теперь стало понятно что именно вы хотите - чтобы определенные шаблоны заменялись вставкой соответствующего PHP-кода из подключаемого файла В таком случае можете поступить так - в вашем PHP-скрипте который отвечает за подготовку шалонов вы создаете временный PHP-скрипт в который вставляете ваш текст и PHP-код а также с помощью file_get_contents вставляете содержимое подключаемых файлов - после чего делаете include этого временно файла и получаете результат При таком подходе желательно тиметь механизм который будет время от времени удалять эти временные файлы
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
chuikoff
Отправлено: 14 Апреля, 2010 - 11:24:19
Новичок
Покинул форум
Сообщений всего: 7
Дата рег-ции: Апр. 2010 Откуда: Kamchatka
Помог: 0 раз(а)
Цитата:
Теперь стало понятно что именно вы хотите - чтобы определенные шаблоны заменялись вставкой соответствующего PHP-кода из подключаемого файла В таком случае можете поступить так - в вашем PHP-скрипте который отвечает за подготовку шалонов вы создаете временный PHP-скрипт в который вставляете ваш текст и PHP-код а также с помощью file_get_contents вставляете содержимое подключаемых файлов - после чего делаете include этого временно файла и получаете результат При таком подходе желательно тиметь механизм который будет время от времени удалять эти временные файлы
А есть попробовать буфер юзать, типа ob_start();
ob_get_contents();
??? Как лучше?
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
chuikoff пишет:
А есть попробовать буфер юзать, типа ob_start(); ob_get_contents(); ??? Как лучше?
Можно конечно использовать и буфер но здесь получается такая штука - ведь подключаемый файл является PHP-скриптом то есть программой и следовательно может не только выводить определенный набор информации но и выплнять какие-то действия Если вы безусловно подключте данный файл то он начет выполятя и вы не можете его так просто проконтролировать (В частности он сам сможет сбоить буфер) - а в случае парсинга и последущего его подключения он заведомо будет работать и выводить именно то что вам нужно
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.