| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Для профи > Конфликт ООП и ШАблонов |
| Автор: qsajeal 4.8.2008, 19:11 |
| Вопрос в этом разделе, потому что адрессован профи! Ситуация следующая: Допустим я написал класс(или даже пакет), который генерирует формы. Он выдает их оформленными в таблице. Хорошо. Как мне применить CSS к этим таблицам, если я использую Smarty? Допустим, что сгенерированный html-текст передаю в темплат. Есть 2 варианта: 1. Я задаю стиль при вызове класса из php-скрипта. Но дизайнер/верстальщик не будет мой скрипт смотреть. Он работает только с шаблоном. И НЕ СМОЖЕТ задать стиль для этой таблицы. А если ему еще надо будет дл конкретной ячейки задать стиль???? Вобщем разделение логики и содержимого теряется. 2. Мой класс дает мне только массив с переменными, а я уже сам строю таблицу в темплате и организую ее заполнение с помощью Smarty или другого шаблонизатора. Дизайнер теперь может спокойно управлять стилями таблицы, но теперь проблемы возникают у меня... Я должен из раза в раз печатать эту таблицу . Это, собственно, сводит на нет написанный мной класс и противоресит парадигме ООП. -------------------- Я просмотрел несколько CMS-ок: все идут по методу 1. А как вы решаете такую проблему??? |
| Автор: WolfON 4.8.2008, 19:16 |
| php это не чисто ооп-язык и не стоит пытаться насильно его сделать таким - иначе получите массу трудно поддерживаемого и медленного кода 2 метод наиболее оптимален |
| Автор: qsajeal 4.8.2008, 19:26 |
| Но метод 2 более энергозатратный для программера (по времени) |
| Автор: skyboy 4.8.2008, 19:26 |
ничего не понятно. во-первых, это противоречит не принципу ООП, а принципу модульного проектирования. и, соответственно, повторного использования кода. во-вторых, если речь идет о шаблонизаторе, никто не мешает вынести формирование таблицы в отдельный шаблон. и в основном шаблоне будут только вызовы более мелких структурно шаблонов. и никакого "из раза в раз печатать". Добавлено через 50 секунд в смысле? при первом подходе(смешиваем формирование модели и представления в кучу) разве тебе не придется вытягивать данные? |
| Автор: Mal Hack 4.8.2008, 19:44 |
| qsajeal, PHP к оформлениею отношения не имеет. Его задача сгенерировать HTML код, а что там будет, html, css, javascript зависит только от того что вам надо. Как встроить стили лучшим образом, через PHP, можно сказать, увидев код. Вообще принято стили в .css файл сохранять, и в html просто генерировать строчку на его подключение. Все. |
| Автор: qsajeal 4.8.2008, 19:44 | ||
| Придется. Ну дак и что? Так я просто вызову функцию, она мне даст переменную, я эту переменную отправлю в шаблон. 3 строчки. А иначе надо будет составлять таблицу. В каждую ячейку пихать переменные и проч. Еще можно это упростить циклами, которые предлагает Smarty.(про это я только что вспомнил + то что вы сказали с подшаблоном очень интересно. Пожалуй такое может мне подойти. Добавлено через 3 минуты и 1 секунду
Вы мне изложили сейчас суть метода 1. Верстальщик не будет просматривать php-код и в какой-то там параметр функции сувать название своего шаблона. Это сводит на нет весь смыслразделения Добавлено через 6 минут и 12 секунд т.е. дизайнер теряет контроль над ВСЕМИ элементами. Полного разделения не происходит. Понимаете? Во всех СMS-ках именно такой подход. Это очень нетривиальна проблема как оказалось |
| Автор: Mal Hack 4.8.2008, 20:02 |
Нет. Я вам изложил суть того, как надо делать. А будете ли вы сами пармер писать или смарти использовать - это совсем другое дело. Вот на этом форуме куски html вкинуты в функции, в функциях нет никакого программного кода, кроме вставки нужных параметров с троку heredoc... Все зависит от того, как вы шаблонизатор построите. Хотите впишите <link ....> в tpl файл, хотите в коде PHP эту строчку пишите, это никакой разницы нет. |
| Автор: qsajeal 4.8.2008, 21:03 |
| Блин, я чувствую вы мен не понимаете... Каким бы образом мы не подключили стили они не будут работать, пока мы не пропишем после тега class="" или id= и проч.!!! С этим вы согласны? Так. Хорошо. Теги формируются в методах класса. Единственный способ подставить туда значения этих class и идентификаторов - это передать их как параметры конструктору или там другим функциям. Cогласны? Вы сейчас можете сказать: Давайте у каждого тега пропишем класс сразу же с определенным именем. Но потом верстальщику надо будет называть эти классы именно так что-ли? Единственный ему выход это лезть в php-код и вводить в параметры функции названи этих классов, что он делать не должен по определению(). Ну, теперь поняли? |
| Автор: Mal Hack 4.8.2008, 21:32 |
| Вы заранее определяете для каждого элемента название стиля, которое прописываете в class или id, а дизайнер потом, на основе этого создает .css, где эти имена классов и ID стилей определяет. И лезть в код ему не надо, достаточно глянуть в сырцы html страницы полученной от скрипта. |
| Автор: sTa1kEr 4.8.2008, 22:00 |
| qsajeal, посмотрите как это реализовано в Zend Framework, это достаточно интересно. http://framework.zend.com/manual/ru/zend.form.standardDecorators.html#zend.form.standardDecorators.viewScript Т.е. это как 1ый метод, но задаете вы не стиль, а декоратор. А сами декораторы любого элемента уже сможет сверстать верстальщик, пользуясь только шаблоном. |
| Автор: qsajeal 5.8.2008, 08:53 | ||||
2 недостатка: 1. Код захломлен ненужными элементами 2. Дизайнер ограничен в названии стилей. Ему нужно называть их именно так, как вы указали Добавлено через 1 минуту и 38 секунд
Я только новичек и с php знаком 2 месяца, пока дальше PEAR не продвинулся. Но вскоре обязательно изучу ZF. Cпасибо за совет Добавлено через 8 минут и 49 секунд Ага. Глянул ссылку. Разобрался. Очень интересный подход. |
| Автор: Anarki 12.8.2008, 09:43 |
| IPB не эталон. |
| Автор: Feldmarschall 12.8.2008, 10:37 |
| отвечу на первоначальный вопрос. "разделение логики и содержимого" - это миф. в реальности над шаблоном всегда работают программист и верстальщик только вместе. Это, в первую очередь, касается т.н. "шаблонов без логики", в которых верстальщик без программера вообще шагу не может ступить, но и смартиподобных - тоже. Договариваться все равно придется. И договориться об именах классов - совсем несложно. А смарти тут получается не при делах. просто делается вывод переменной, содержащей форму. И это нормально. Я раньше был противником "формовочных автоматов", и делал форму такой же частью шаблона, как и другие. Борясь с естественным для каждого программиста желанием унифицировать вывод всех этих однообразных данных. Но потом подумал, что все оформление действительно можно задавать только стилем. а стиль указывать в параметрах вызова класса. |