Мухи отдельно, котлеты отдельно!

  • Автор темы Oduvanchik
  • Дата начала

Oduvanchik

Guest
Мухи отдельно, котлеты отдельно!

Я запутался с шаблонами...
Господа! Это весь мир спорит по этому поводу, или только я не определюсь? Как правильно взаимодействовать дизайнеру и программисту? Вот дизайнер пишет дизайн на HTML, а программист сценарий на PHP. Теперь им нужно объединиться.

Простой пример.

design.html:
PHP:
   <center>Привет <?=$name ?>! <br> Как у тебя дела? </center>
code.php:
PHP:
<?php
  $name = 'Cheburashka';
  include('design.html');
?>
Что получится, думаю понятно. Так вообще писать можно? Пока я только так могу обеспечить более-менее разделение кода и отображения. Благодаря этому "методу" уже можно html файлы хранить в одних файлах, а php в других. И нет этого смешивания. Но мир настойчиво твердит мне, что так пишут лохи и недоросли. Пробовал я всяких Smarty. Эти "классовые шаблонизаторы" может и хороши, но не для
всех задач... И будьте добры, давайте не будет трогать XML и XSLT. Я не вникал в их особенность. Но если они необходимы, то я готов рассмотреть и эти предложения.

В конце концов, как решаете эту проблему ВЫ?
Благодарю.
 

Фанат

oncle terrible
Команда форума
я и спектатор решаем эту проблему так же.
Но, правда, не обманывая себя, называя пхп файла хтмл файлами и не ограничиваясь только оператором вывода.

У данного способа есть достоинства - простота и совместимость, гибкость, если хтмльщику что-то потребуется, все уже есть в пхп.
Есть недостатки:
- присутствует логика. Что, впрочем, стало настолько распространено, что недостатком врядли считается.
- более низкий уровень безопасности.
Как и все плюсы и минусы - эти относительны. Где-то играют роль, где- то нет.
 

fog

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

Пишешь функцию, которая делает запрос к БД и возвращает результат в виде массива
$result[11]['name'] = dima
$result[11]['surname] = sidorov
$result[12]['name'] = vasya
$result[12]['surname] = petrov

потом этот массив в шаблоне просто проходится одним foreach, и получается HTML таблица =)

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

это удобно и просто
 

svetasmirnova

маленький монстрик
А у меня специальный синглтон с __set, __get и __call: E_NOTICE не отключаю, при надобности функций туда добавляю - красота :) чистый PHP и всё отдельно.
 

svetasmirnova

маленький монстрик
Да тут всё банально.
Шаблон:
PHP:
some_html
<?=$template->var1?>
some_html
<table><tr>
<?=$template->func1($template->var2, '<td>')?>
</tr></table>
В скрипте тоже всё банально: $template используется как обычный объект, без
PHP:
$template->assign('var1', 'value1');
Чтобы проблем с E_NOTICE не возникало и вообще без скрипта работало, в начало шаблона можно вставить
PHP:
$template = new Template();
: синглтон ведь
 

Фанат

oncle terrible
Команда форума
то есть, разница - только в обращении к переменным?
 

svetasmirnova

маленький монстрик
В общем да. Просто снимаются проблемы с неинициализированными переменными (топик http://phpclub.ru/talk/showthread.php?s=&threadid=59279 и вышеупомянутый тобой http://phpclub.ru/talk/showthread.php?threadid=59190), никаких проблем с областью видимости (мой пунктик) плюс можно добавить ряд функций, обрабатывающих вывод.
 

Фанат

oncle terrible
Команда форума
проблема с неинициализированными переменными снимается только одним способом - инициализацией.
т.е. проблемой не является
ряд функций, как мы понимаем, сожно добавить в и в raw php тоже.
 

svetasmirnova

маленький монстрик
Народ же прётся от разделения кода и вывода. И зачем в глобальном пространстве имён ещё и функции для вывода? Помни потом их все. Опять-таки, мой пунктик: область видимости. То есть соблюла все условия навороченного шаблонного движка без наворотов :)
И ещё момент. Помнится, где-то я читала про кошмары дизайнера, когда дизайн готов, а программист ещё свою работу не доделал. Так что "проблема с неинициализированными переменными" бывает проблемой.
 

Screjet

Новичок
svetasmirnova,

вариант неочень..
В этом случае, в качестве заглушки, можно набить шаблонные переменные всяким бредом, и пусть себе верстальщик развлекается.
В твоем случае будут жалобы типа: "то не выводится, это не выводится.."

И зачем в глобальном пространстве имён ещё и функции для вывода?
А они все типичные. Смысл их превращать в методы?
 

svetasmirnova

маленький монстрик
>В этом случае, в качестве заглушки, можно набить шаблонные переменные всяким бредом, и пусть себе верстальщик развлекается.
Зачем? Лучше в начало файла вставить:
PHP:
<?php
$template = new Template();
if (!$template->isset()) {
    $template->fill_test_values();
}
?>
>А они все типичные. Смысл их превращать в методы?
Я тоже так думала, пока не провела этот тест: http://phpclub.ru/talk/showthread.php?s=&threadid=59396&perpage=20&pagenumber=1 (мой первый пост)
То есть классы мне удобнее и теперь причин ими не пользоваться нет.
 
Сверху