- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
// (c) Template Optimizer
// (c) Template Compiler
// skin/news.tpl
/*<?php
die ('<br /><br />Template Parser: <b>Access locked</b>');
?>*/
$value0 = '
';
if ( $this->get_tpl_tag ('USER.ACCESS') == '1' )
{
$value0 .= '
';
$this->set_tpl_tag ('ACTION', 'new_add');
$value0 .= '
';
$this->set_tpl_tag ('SUBMIT', 'Добавить');
$value0 .= '
';
$this->set_tpl_tag ('CAPTION', 'Добавить новость');
$value0 .= '
' . $this->file_include ('content.tpl') . '
';
}
$value0 .= '
';
$this->open_local (array ('NEW'));
if ( is_array ($this->get_tpl_tag ('NEWS')) )
foreach ( $this->get_tpl_tag ('NEWS') as $this->tags['NEW'] )
{
$value0 .= '
<table class="news" width="100%">
<tr>
<th>
<h2>' . $this->get_tpl_tag ('NEW.TITLE') . '</h2>
</th>
<th align="right">
<span class="gensmall">' . $this->get_tpl_tag ('NEW.TIME') . ' </span>
';
if ( $this->get_tpl_tag ('USER.ACCESS') == '1' )
{
$value0 .= '
<a href="admin.php?action=new_edit&new=' . $this->get_tpl_tag ('NEW.ID') . '"><img src="' . $this->root_dir . '/images/rename.gif" alt="Редактировать" title="Редактировать" style="vertical-align: middle; border: none;" /></a>
<a href="admin.php?action=new_delete&new=' . $this->get_tpl_tag ('NEW.ID') . '" onclick="return confirm (\'Удалить новость за ' . $this->get_tpl_tag ('NEW.TIME') . '?\');"><img src="' . $this->root_dir . '/images/delete.gif" alt="Удалить" title="Удалить" style="vertical-align: middle; border: none;" />
';
}
$value0 .= '
</th>
</tr>
<tr>
<td colspan="2">
' . $this->get_tpl_tag ('NEW.BODY') . '
</td>
</tr>
</table>
';
}
$this->close_local();
$value0 .= '
';
$this->set_tpl_tag ('_ALIGN_', 'LEFT');
$value0 .= '
' . $this->file_include ('pagebar.tpl');
Вот такой "говнокод" выдает мой шаблонизатор после компилирования шаблона.
В данном примере это блок новостей.
Lure Of Chaos 11.10.2010 21:29 # +1
mindfreakthemon 11.10.2010 21:54 # +5
Lure Of Chaos 11.10.2010 22:20 # 0
Arigato 12.10.2010 00:03 # 0
Вот код самого шаблона news.tpl, откомпилированный код которого я привел:
mindfreakthemon 12.10.2010 09:29 # 0
Поиском регекспами с заменой, или же пошаговый разбор лексем, или ещё как-то? Если не секрет, конечно.
Я, думаю, примерно смогу представить :)
Arigato 12.10.2010 10:40 # 0
Lure Of Chaos 12.10.2010 16:33 # +1
Arigato 12.10.2010 18:22 # 0
Vasiliy 12.10.2010 18:25 # +2
сама идея делать шаблонизатор на пыхе смешит.
Arigato 12.10.2010 19:49 # −1
Меня, к примеру, бесит код php в перемешку с html тегами. Подобный шаблон гораздо более читабельный, особенно, если под него подсветку синтаксиса настроить.
Vasiliy 12.10.2010 21:43 # 0
seonull 12.10.2010 21:49 # +1
Vasiliy 12.10.2010 21:58 # +1
Arigato 12.10.2010 22:05 # +1
Да и код менее читабельный со вставками php, чем при использовании шаблонных тегов.
seonull 12.10.2010 22:28 # +1
ну так в смарти тоже можно вставлять пхп код если не ошибаюсь. зато помимо пхп синтаксиса нужно учить еще и синтаксис обрубка, а потом по пол часа курить маны в каждой нетипичной ситуации чтобы придумать очередной хак и сделать таки то, что на пхп пишется за секунду с закрытыми глазами.
Arigato 12.10.2010 22:36 # +1
Vasiliy 12.10.2010 22:35 # +1
Lure Of Chaos 12.10.2010 23:15 # +1
Смарти-подобные, чей код есть почти тот же пых, а исходник превращается в кашу - имхо, фтопку
Анонимус 12.10.2010 21:22 # 0
Lure Of Chaos 12.10.2010 23:10 # 0
istem 12.10.2010 22:51 # 0
Lure Of Chaos 12.10.2010 23:15 # +2
istem 12.10.2010 23:24 # 0
Lure Of Chaos 12.10.2010 23:38 # 0
fey 13.10.2010 09:33 # 0
Arigato 14.10.2010 00:37 # −1
1. Писать свой.
2. Использовать готовый.
3. Не использовать шаблонизатор, а вставлять в html php код.
2-й вариант не подошел, по причине того, что ничего удовлетворительного (имхо) не обнаружил.
3-й вариант меня не устраивает по многим причинам.
Остается 1-й :)
P.S. Забыл еще вариант с xslt указать. Тоже не устраивает...
Анонимус 15.10.2010 22:00 # 0
Arigato 16.10.2010 00:44 # 0
2. Не стоит в шаблоны (что есть чисто дизайнерская функция) передавать логику.
Вот примерно набросал, как бы тот же шаблон news.tpl выглядел бы с php вставками:
Вот какая бяка выходит. К тому же появляется доступ туда, куда, по идеи, шаблоны доступа иметь не должны. Да и с переменными непонятки.
Анонимус 16.10.2010 00:57 # +2
2. не стоит. Пишите в шаблонах только вью. Или на php без логики никак?
Вы сами говорите что нужна только вью, и сами же вбиваете локализацию и логику (if) и вшиваете URLы (admin.php) да еще и верстаете несемантично, и еще зачем-то по таблице делаете на каждую новость:)
Причем делаете это и в шаблоне и в php.
Всю проверку на права пользователя нужно делать не в шаблоне
зы: у news нет единственного числа.
Arigato 16.10.2010 10:04 # 0
1. В данном случае ни какого смарти нет, как писал, мой шаблонизатор ни как не смарти, тем более, что он уже старее даже смарти.
Читабельность тегов {TAG} для меня выше, чем <?=$tag?>
2. Да, можно писать без логики, но а если не только я буду шаблоны править, ведь можно нагородить черт знает чего туда...
> Вы сами говорите что нужна только вью, и сами же вбиваете локализацию и логику (if) и вшиваете URLы (admin.php)
Эта логика ни как не связана с обработкой данных на php, т.е. php выдает набор шаблонных тегов (в том числе и массивов), в шаблоне это все выводится нужным образом. Речь шла про то, что не должно быть доступа из шаблона ни к каким переменным php, ни к БД. А есть ведь такие, кто в php шаблоны вставляет запросы к БД (видел такое).
> да еще и верстаете несемантично, и еще зачем-то по таблице делаете на каждую новость:)
Здесь речь не о верстке, это был пример, который первый под руку попался. В данном случае я готовый HTML закинул в шаблон, что и нужно было заказчику. Мне наплевать, сколько у него там таблиц на 1 новость... :)
> <?}?>
Ну вот такие конструкции мне и не нравятся. Тем более, что желательно было бы записать <?php }?>, т.к. не везде сокращенная запись включена.
> Всю проверку на права пользователя нужно делать не в шаблоне
Да, но выводить кнопочки админа надо в шаблоне же :) Проверка делается именно в php, шаблон лишь выводит или нет элементы управления админа, в зависимости от тех прав, что определил скрипт php.
В противном случае придется или отдельный шаблон делать под эти элементы управления или, что еще хуже, генерировать их прямо в скрипте, тем самым лишая возможность подстроить их под дизайн скина.
Vasiliy 18.10.2010 16:31 # 0
Заменить все <? на <?php все <?= на <?php echo это прибавит читабельности убрать
<?php }?> потому что не нужно используйте endforeach это тоже добавляет к читабельности.
а вот за это style="vertical-align: middle; border: none;" руки отрывать нах. чтоб не повадно было.
fey 18.10.2010 14:49 # 0
<?php foreach ():?>
HTML
<?php endforeach;?>
И там тд тд для if есть альтернативный синтаксис
какая разница писать {} как в smarty или <?php ?>
Единственное накидать класс который грузит файл шаблона куда накидываются переменные впоследствии, шаблон будет таким же php файлом, и не будет лишнего слоя в виде вашего парсера
Arigato 18.10.2010 15:54 # 0
При использовании компилируемого шаблонизатора проблема снижения производительности практически исчезает, зато можно использовать тот синтаксис для шаблонов, который больше нравится.
getrix 21.10.2010 13:43 # 0