Danilka ну как? есть прогресс? я тут предлагаю: сделать по умолчанию открывающие/закрывающие теги вот такими - [:/:] обращаться в цикле не HTML: [loop array] [var] [/loop] HTML: [:loop array:] [:array[var]:] [:/loop :] Это избавило б от путаницы. по поводу моей проблемы. Другой вариант решения. Ввести метод subloop. Описывается только в шаблоне PHP: <?php include'phparser.php'; $tpl = new phparser('tpl', 'cache'); $tpl->load('test'); $faculty[0]['id'] = 1; $faculty[0]['title'] = 'МТ'; $faculty[0]['chair'][0]['chair_id'] = 1; $faculty[0]['chair'][0]['chair_title'] = 'Геодезии'; $faculty[0]['chair'][1]['chair_id'] = 3; $faculty[0]['chair'][1]['chair_title'] = 'Инженерной графики'; $faculty[1]['id'] = 2; $faculty[1]['title'] = 'ТК'; $faculty[1]['chair'][0]['chair_id'] = 2; $faculty[1]['chair'][0]['chair_title'] = 'ПМ'; $faculty[1]['chair'][1]['chair_id'] = 4; $faculty[1]['chair'][1]['chair_title'] = 'ЭВМ'; $faculty[1]['chair'][2]['chair_id'] = 5; $faculty[1]['chair'][2]['chair_title'] = 'КИТ'; $faculty[2]['id'] = 2; $faculty[1]['title'] = 'ТК'; $faculty[2]['chair'][0]['chair_id'] = 6; $faculty[2]['chair'][0]['chair_title'] = 'Философии и социологии'; $faculty[3]['chair'][1]['chair_id'] = 7; $faculty[2]['chair'][1]['chair_title'] = 'Физкультуры и спорта'; $tpl->l('faculty', $faculty); $tpl->re_cache(); $tpl->parse(); ?> шаблон: HTML: [:loop faculty:] [:faculty[id]:] - [:faculty[title]:] [:subloop faculty[chair]:] |-[:chair[id]:] - [:chair[title]:] [:/subloop:] [:/loop:] Нужен обработчик этого subloop
Замутил такую штуку. Теперь можно переменные обозначать отдельным символом, как в пыхе. По умолчанию сделал #, чтобы с пыхом путаницы не ьыло. Но это, как всегда, не принципиально. Можно заменить тег на любой другой, любой длины. То есть можно [var], а можно [#var]. И, соответственно сделал в циклах возможность использовать переменные вместо имени. То есть твой пример теперь решаем так: PHP: include './phparser.php'; $tpl = new phparser('tpl', 'cache'); $tpl->load('loopin'); $f = NULL; $f[0]['f_name'] = 'MT'; $k = NULL; $k[0][k_name] = 'Geodezii'; $k[1][k_name] = 'Ingenernoy grafiki'; $tpl -> l( 'mt_kaf' , $k ); $f[0]['kaf'] = 'mt_kaf'; $f[1]['f_name'] = 'TK'; $k = NULL; $k[0][k_name] = 'PM'; $k[1][k_name] = 'EVM'; $k[2][k_name] = 'KIT'; $tpl -> l( 'tk_kaf' , $k ); $f[1]['kaf'] = 'tk_kaf'; $f[2]['f_name'] = 'Other'; $k = NULL; $k[0][k_name] = 'Filosofii & sociologii'; $k[1][k_name] = 'Fizkulturi & sporta'; $tpl -> l( 'other_kaf' , $k ); $f[2]['kaf'] = 'other_kaf'; $tpl->l( 'fak', $f ); $tpl -> re_cache();### while developing $tpl -> parse(); HTML: [loop fak] <b>[f_name]</b><br> [loop #kaf] - [k_name]<br> [/loop] <br> [/loop] Не сделал двойные скобки, как ты предлогал из-за того, что возникли бы проблемы с самовложенностью шаблонов. Про теги, простите уж меня, но пока менять не хочется. Всё-равно, когда-нибудь парсер станет более стабилен и функционально полон. Тогда не придётся так часто качать новую версию и менять теги. P.S. Версия (0.8a) , традиционно, на сайте.
Обсуждаем html версию http://php.ru/forum/viewtopic.php?t=13454 В процессе - 0.9а Перенёс функцию отключения кэша в переменную конфига. Добавил парсинг с возвратом значения. То есть теперь парсером можно парсить письма, текст и пр. Выкладывать пока не буду. Скорее всего уже вместе с html версией, чтобы было хоть какое-то соответствие. Ман уже тоже отстаёт от версий. А писать не хочется. Как думаете, может на фрилансе можно заказать, чтобы кто-нибудь грамотный написал ман, по завершению альфы?
в новой версии вложеные условия не работают. HTML: [:load header:] <div id="rCol"> [:load admin-menu:] </div> <div id="lCol"> [:lCol:] <h3><img src="images/32/text-file.png" alt="" /> Список городов</h3> [:if showCity:] [:load list-loop-city:] <a href="?do=add&add=city[:if province_id:]&province_id=[:province_id:][:/if:]&redirectFrom=[:redirectFrom:]"><img src="images/16/add.png" alt="" /> Добавить еще</a> [:else:] <!--<span class="error">Прежде необходимо <a href="?do=add&add=city[:if province_id:]&province_id=[:province_id:][:/if:]&redirectFrom=[:redirectFrom:]"><img src="images/16/add.png" alt="" /> добавить</a> хотя бы 1 город</span>--> [:/if:] </div> [:load footer:] в кратце: на версии 0,7 конструкция [:if a:] [:if b:][:b:][:/if:] [:/if:] работала, на версии 0,8 не хочет. Тот, что выделен жирным не преобразовывается в } upd0: стоп, баг под вопросом upd1: баг есть, но какой-то не понятный. настройки: define( 'TPL_FILE_TYPE' , '.tpl' ); define( 'TPL_CACHE_FILE_TYPE' , '.ch' ); define( 'TPL_TAG_OPEN' , '[:' ); define( 'TPL_TAG_CLOSE' , ':]' ); define( 'TPL_TAG_VAR' , '#' ); private $re_cache = true; //выведи это в константу, будет удобней шаблон: [:if a_a:] [:if b_b:][:b_b:][:/if:] [:/if:] код: <? include( './phparser.php' ); $tpl = new phparser( 'tpl' , 'cache' ); $tpl->load( 'test' ); $tpl->v('a_a', 1); $tpl->v('b_b', 2); $tpl -> parse(); ?> реальный вывод: [:b_b:] . ожидаемый вывод: 2 кеш-файл: <?if($tpl_var['a_a'] ){?> <?if($tpl_var['b_b'] ){?>[:b_b:]<?}?> <?}?>
Ага, баг вижу. Что-то с длинной тэгов не то. С обычными работает. Сейчас буду исправлять. Поправил, вроде работает. Проверяйте. Так же выложил начало версии 0.9 но в мане ничего не описывал. Если кто хочет, можно качнуть на сайте.
я вернулся из отпуска, хорошенько отдохнул. Danilka, что там с кешем? И все-таки думаю, что нужно как-то отделять переменные, например PHP: <? //... $myVar[0]['id'] = 3; $myVar[0]['title'] = 'title1'; $myVar[1]['id'] = 5; $myVar[1]['title'] = 'title2'; $myVar[2]['id'] = 6; $myVar[2]['title'] = 'title3'; $tpl->l('myVar', $myVar); [:loop myVar:] [:myVar[id]:] - [:myVar[title]:] [:/loop:] я очень путаюсь во всем этом
мне нужна помощь: есть переменная, как множество $set = '3,5,9'; есть шаблон ... <input type="checkbox" name="ftuct[0]" value="1" /><br /> <input type="checkbox" name="ftuct[1]" value="2" /><br /> <input type="checkbox" name="ftuct[2]" value="3" /><br /> <input type="checkbox" name="ftuct[3]" value="4" /><br /> <input type="checkbox" name="ftuct[4]" value="5" /><br /> <input type="checkbox" name="ftuct[5]" value="6" /><br /> <input type="checkbox" name="ftuct[6]" value="7" /><br /> <input type="checkbox" name="ftuct[7]" value="8" /><br /> <input type="checkbox" name="ftuct[8]" value="9" /><br /> ... нужно чтоб ftuct[2], ftuct[4], ftuct[8] были отмечены <input type="checkbox" name="ftuct[8]" checked value="9" /><br /> как сделать?
Код (Text): for($i=0;$i<count();$i++){ $che=""; if (preg_match("(^".$i."\,|^".$i."$|\,".$i."\,|\,".$i."$)", $set)) { $che="checked"; } echo "<input type=\"checkbox\" name=\"ftuct[".$i."]\" ".$che." value=\"".($i+1)."\">"; }
ой, ей, еще и регулярки. Я б через explode+in_array проверял. Решение не подходит, потому что нужно использовать ентот шаблонизатор, а не echo. в случае, если $set=3; - одно число, а не множество, я делал так: HTML: Входит в город:<br /> <select name="city_id"> [:loop city:] <option value="[:ID:]"[:if ID==city_id:] selected[:/if:]>[:city_title:]</option> [:/loop:] </select><br /><br /> но тут множество... так и просится сделать что-то типа HTML: Входит в город:<br /> <select name="city_id"> [:loop city:] <option value="[:ID:]"[:if ID in city_id:] selected[:/if:]>[:city_title:]</option> [:/loop:] </select><br /><br /> Danilka, может добавишь к условиям оператор in, проверяющий наличие чего-то во множестве?
через массив удобно если есть увереность, что строка не вернет сотню значений, а заюзается только 8 это так, отступление
Привет... Вот я и сюда залез со своими вопросами. Ребята скажи плиз какой смысл в кэшировании шаблонов динамически генерируемых страниц? Может я чето не понимаю, но если у каждого пользователя есть допустим свой профиль и он там чето меняет например свои файлы или еще че - то что тут кэшировать? Рамку таблицы? Не ну рамку таблицы это можно - но на диске появиться отдельный файл рамки таблицы с расширение .ch или как там ...(УЛАВЛИВАЕМ ИДЕЮ) Еще такой момент. Я как сторонник не пихать в шаблон логику циклы там и все такое говорю, что можно сделать так: если надо, например циклически вывести например список файлов пользователя, то можно этот список свормировать и в цикле пыхыпыха, а не в цикле шаблона. Просто берем и в основную часть шаблона страницы index.tpl.html вставляем переменную [user files], которая будет заменена на строку шаблонизатором. Эта строка суммируется по .= в цикле (который работает в пыхыпы (дизайн отдельно/логика отдельно)) из пустого значения. В этом цикле другой экземпляр парсера каждую итерацию создается, считывает шаблон userfile_row.tpl.html (ВОЗВРАЩАЯСЬ К СКОБКАМ "УЛАВЛИВАЕМ ИДЕЮ") заменяет в нем [filemname] и все остальное (ИЛИ РАБОТАЕТ С ЕГО КЭШЕМ), и выдает контент этого РЯДКА ТАБЛИЦЫ или ЦЕЛОЙ ТАБЛИЦЫ (это пожеланию) не методом display(), а методом prepare () в нашу строку, PS: PHP: public function prepare() { траляля; return $content; } public function display() { echo $this->prepare(); } и наконец самоуничтожается, чтобы вновь возрадиться в начале цикла если у юзера еще есть файлы... Вот такие блины с котятами у меня в голове...
Ну я бы не сказал, что особо размытое. По-моему, цикл вывода какого-нибудь итератора лучше все же поместить в шаблон. Также как и условие его вывода (пустой итератор или нет). По крайней мере, логика приложения станет читаться намного легче, а подобные циклы и условия не будут отвлекать внимание...
В принципе да - но это уже вечный вопрос "Где какая логика" .... и кому как удобно. Я просто высказал свое мнение с кэширование кусков страниц... во...
Всё просто. Шаблон (пока) не кеширует страницу полностью, он оставляет переменные для подставления. Так что можете не беспокоиться о кеше, даже если на странице выводится время исполнения скрипта, она всё-равно будет закеширована и всегда будет отображать актуальное время. Что касается отсутствия логики в шаблоне, так это уже до паранои дошло. О чём вы говорите, какие циклы вывода в логике приложения? Зачем они там? А как же оформление во време цикла. Да и ещё о регулярка никогда не будет быстрее поиска по массиву. Любая регулярка - это гигантские тормоза.
Чё то не вкурил. Да я вообще ниче не пойму :lol: ... Как кэшируются какие страницы? Например с каждым кликом пользователя страница меняет контент и что тут кэшировать? Получается на эту страницу у кадждого пользователя будет столько страниц сколько путей работы скрипта... ничё не понимаю :twisted:
Danilka Ну что там кэш есть нет? Как вообще дела идут? Хотели кэшировать куски - ну сделали или идёт ?
да нифига нового :evil: Danilka может сделаешь svn, чтоб народ мог сам вносить изменения? Заодно может и маны кто-нить написал бы