![]() |
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]() ![]() ![]() |
|
alexey009 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 28.7.2008 Репутация: 2 Всего: 2 |
Вот, написал класс шаблонизатора
Плиз, оцените и скажите что можно улучшить? ![]() Да и ещё, нужна функция для циклов:
Т.е. то что между Begin и End выполнялось "по циклу". Как лучше организовать? Есть такие мысли: 1. использовать функцию strstr() но как тогда искать конец( может preg_match()) ? 2. полностью положиться на preg_match() Знатоки, помогите с выбором ну и реализацией по возможности ![]() Это сообщение отредактировал(а) alexey009 - 1.8.2008, 02:39 |
||||
|
|||||
alexey009 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 28.7.2008 Репутация: 2 Всего: 2 |
Появилась ещё одна задача:
В шаблоне index.tpl написано:
Шаблон лежит в /engine/templates/new/main/index.tpl картинка лежит в /engine/templates/new/images/logo.gif Вопросы: 1. Как в адрес картинки дописать недостоющее "/engine/templates/new/" 2. Сильная ли будет нагрузка на сервер такими заменами(картинок то много) 3. Или лучше сразу в шаблоне писать полный адрес до картинки? |
|||
|
||||
americanets |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1100 Регистрация: 27.9.2006 Репутация: 5 Всего: 12 |
1 введи константы IMAGE_PATCH и т д 2 терпимая ![]() 3 смотря какой случай, если периодически нужно перемещать папки с файлами в другие директории то нет, константы, а так пиши как удобнее -------------------- Пусть популярную музыку слушают те, среди кого она популярна |
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 13 Всего: 87 |
Вообще, думается мне, что лучше всего покопаться в сырцах смарти (я бы предложил его и использовать, но как было сказано - не подходит). В итоге в шаблонизаторе необходимы следующие фичи/ф-ции (без которых обойтись можно, но очень сложно).
1. $templater->assign // назначение переменной в шаблоне 2. $templater->fetch // получение заполненного темплейта в переменную 3. $templater->display // вывод заполненного темплейта на экран 4. шаблонизатор просто обязан "компилировать" себя в чистый ПХП код. без этого нагрузка будет большой. например шаблон "<p>@text@</p>" должен переводится в чистый ПХП - "<p><?php echo $templater->vars['text']; ?></p>". Также, соответственно, необходимо следить за изменениями в шаблоне и по необходимости копилировать заново. получается, что всесто того чтобы каждый раз парсить шаблон заново надо будет всего лишь запустить имеющийся скрипт. 5. кэширование - ещё одна фича, позволяющая снизить нагрузку. 6. вызов встроенных пхп функций из шаблона и возможность создания дополнительных функций. второе, в общем, необязательно, но вызов встроенных ф-ций необходим 100%. в шаблонах нередко необходимо посчитать чего-нибудь (к примеру {if count($image_thumbs) > 0}<img src={$image_thumbs[0]}>{else}<p>No images{/if}). В общем сильно рекоммендую посмотреть что и как делает смарти - ребята сделали всё грамотно. |
|||
|
||||
alexey009 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 28.7.2008 Репутация: 2 Всего: 2 |
Kefir, смарти здоровый и не понятны. я дня два сидел и въежал как его использовать, но ничерта не понял(не умею я в чужолм коде разбираться).
А так я же написал класс шаблонизатора!
|
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
alexey009, зачем тебе было "разбираться в коде смарти" - не понятно. для построения шаблонов вполне достаточно списка разных конструкций(типа {if}, {foreach} и т.д.). для инициации достаточно двух методов: assign и display.
впрочем, не хочешь - не надо. разве то, что написал Kefir уже есть? где кеширование? каждый раз заново заменяешь текст? где циклы в шаблоне? где условные конструкции? как сделать перебор массива? как включить один шаблон в другой? как сделать счетчик или итератор(например, чтоб на уровне шаблона сделать чередование цвета строк таблицы)? где это все?
а зачем, интересно? чтоб браузер корректно отобразил картинку, она должна иметь не абсолютный путь на диске относительно папки с шаблоном, а относительный/абсолютный путь основываясь на доменном имени(с точки зрения сервера - это DOCUMENT_ROOT) |
|||
|
||||
Kefir |
|
|||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 13 Всего: 87 |
alexey009, да ну и чёрт с ним с кодом - поюзай его маленько - сразу поймёшь чего тебе не хватает. полистай мануал, где его фичи описаны. но опять же - я перечислил те вещи, которые обязаны быть в шаблонизаторе, иначе же это не тянет на таковой - максимум "улучшенный str_replace" В) Смарти я посоветовал как раз как источник многих полезных фич. А разобраться как его использовать - три минуты (читай, залил на сервер, подрубил инклюд и сделал экземпляр смарти, всё).
|
|||
|
||||
alexey009 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 28.7.2008 Репутация: 2 Всего: 2 |
ну впринципе можно и смарти использовать, но вот проблемы
не могу понять как задать циклы и как один шаблон пихать в другой, если они в разных папках (например index.tpl лежит в папке engine/tempaltes/new/main, news.tpl лежит в папке engine/tempaltes/new/news) главный файл лежит в корневой директории( / ). Нужно в index.tpl подключить news.tpl и news.tpl загнать в цикл(вывести список новостей) подскажите как? просто так надо... не хочется каждый раз писать /engine/templates/new/images/******.gif а просто писать images/*****.gif Потому что шаблонов может быть несколько(все лежат в папке templates) и чтобы адреса картинок не менялись.. удобнеее тому кто будет делать шаблоны.. ![]() |
|||
|
||||
skyboy |
|
|||
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
preg_replace c модификатором "е" preg_replace c модификатором "е" или же strstr и подобное. Добавлено через 1 минуту и 26 секунд очевидно, надо указывать полный путь. не знаю, что ты рассчитывал найти в исходнике Смарти. он тоже не телепатирует, а: а) смотрит в папке, указанной как "корневая папка шаблонов" б) смотри по полному пути все. поиск по всему диску на предмет файлов с заданным названием никто не проводит. |
|||
|
||||
Kefir |
|
||||||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 13 Всего: 87 |
news.tpl
index.tpl
извини, но для каждой отдельной новости мучать news.tpl - это мазохизм ![]() Добавлено через 2 минуты и 17 секунд то есть по сути тебе надо делать так - создавать конструкцию цикла для шаблона и передавать туда массив. потом загонять то что получилось в переменную и её уже вставлять в индекс. вот и всё. по крайней мере такая система в смарти. |
||||||
|
|||||||
alexey009 |
|
||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 28.7.2008 Репутация: 2 Всего: 2 |
разве? вообще-то будет как-то так: news.tpl
При этом шаблон новостей будет в отдельном файле, и эти новости можно будет куда угодно впихнуть, не изменяя шаблона той страницы, куда эти новости вставлены ![]() вот так |
||||
|
|||||
americanets |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1100 Регистрация: 27.9.2006 Репутация: 5 Всего: 12 |
alexey009, видимо Kefir имел ввиду не дергать кждый раз файл а загнать его в переменную и ее юзать
![]() -------------------- Пусть популярную музыку слушают те, среди кого она популярна |
|||
|
||||
alexey009 |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 28.7.2008 Репутация: 2 Всего: 2 |
americanets, как бы я так и хотел и описывал эту задачу в требованиях в шаблонизатору...
![]() И ещё вопрос... вот идет компиляция.. если задать
Верно? И как далее правильно компилировать и извлекать? |
|||
|
||||
Kefir |
|
||||||
«Hakuna Matata» ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 1878 Регистрация: 25.1.2003 Где: Tampere, Suomi Репутация: 13 Всего: 87 |
alexey009, ну как, делаешь парсер. я ж писал уже. к примеру
somthing.tpl:
должно перевестись в: something.tpl.php:
то есть парсер должен переводить язык шаблона в язык ПХП. потом, к примеру, делаешь в классе шаблонизатора:
Добавлено через 17 секунд ну эт всё условно. но логика именно такая. |
||||||
|
|||||||
alexey009 |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 60 Регистрация: 28.7.2008 Репутация: 2 Всего: 2 |
Я вот все-равно никак понять не могу, как делать ЦИКЛЫ
файл index.php
файл news.tpl
Так вот то что в news.tpl надо загнать в цикл. foreach НЕ ПОЙДЕТ, т.к. он по жизни тормознутый. если делать типа
то вот это уже возникает вопрос, а в чем собвственно заключается шаблонизатор? половина кода в php файле, а другая половина уже в самом шаблоне. где плюсы? Отсюда - может мне ввобще нафиг шаблнизатор и html коды пихать в php файлы и все? Знатоки, что посоветуете? |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "PHP" | |
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |