Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Конфликт ООП и ШАблонов, Возникли интересные мысли... 
:(
    Опции темы
qsajeal
Дата 4.8.2008, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 4.8.2008

Репутация: нет
Всего: нет



Вопрос в этом разделе, потому что адрессован профи!
Ситуация следующая:
Допустим я написал класс(или даже пакет), который генерирует формы. Он выдает их оформленными в таблице. Хорошо. Как мне применить CSS к этим таблицам, если я использую Smarty? Допустим, что сгенерированный html-текст передаю в темплат.
Есть 2 варианта:
1. Я задаю стиль при вызове класса из php-скрипта. Но дизайнер/верстальщик не будет мой скрипт смотреть. Он работает только с шаблоном. И НЕ СМОЖЕТ задать стиль для этой таблицы. А если ему еще надо будет дл конкретной ячейки задать стиль????  Вобщем разделение логики и содержимого теряется.
2. Мой класс дает мне только массив с переменными, а я уже сам строю таблицу в темплате и организую ее заполнение с помощью Smarty или другого шаблонизатора. Дизайнер теперь может спокойно управлять стилями таблицы, но теперь проблемы возникают у меня... Я должен из раза в раз печатать эту таблицу . Это, собственно, сводит на нет написанный мной класс и противоресит парадигме ООП.
--------------------
Я просмотрел несколько CMS-ок: все идут по методу 1.  
А как вы решаете такую проблему???
PM MAIL   Вверх
WolfON
Дата 4.8.2008, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 604
Регистрация: 19.7.2004

Репутация: 1
Всего: 8



php это не чисто ооп-язык и не стоит пытаться насильно его сделать таким - иначе получите массу трудно поддерживаемого и медленного кода
2 метод наиболее оптимален
PM MAIL ICQ   Вверх
qsajeal
Дата 4.8.2008, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 4.8.2008

Репутация: нет
Всего: нет



Но метод 2 более энергозатратный для программера (по времени)
PM MAIL   Вверх
skyboy
Дата 4.8.2008, 19:26 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 1
Всего: 260



Цитата(qsajeal @  4.8.2008,  18:11 Найти цитируемый пост)
Я должен из раза в раз печатать эту таблицу .

ничего не понятно. во-первых, это противоречит не принципу ООП, а принципу модульного проектирования. и, соответственно, повторного использования кода.
во-вторых, если речь идет о шаблонизаторе, никто не мешает вынести формирование таблицы в отдельный шаблон. и в основном шаблоне будут только вызовы более мелких структурно шаблонов. и никакого "из раза в раз печатать".

Добавлено через 50 секунд
Цитата(qsajeal @  4.8.2008,  18:26 Найти цитируемый пост)
метод 2 более энергозатратный для программера

в смысле? при первом подходе(смешиваем формирование модели и представления в кучу) разве тебе не придется вытягивать данные? 
PM MAIL   Вверх
Mal Hack
Дата 4.8.2008, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



qsajeal, PHP к оформлениею отношения не имеет. Его задача сгенерировать HTML код, а что там будет, html, css, javascript зависит только от того что вам надо. Как встроить стили лучшим образом, через PHP, можно сказать, увидев код. Вообще принято стили в .css файл сохранять, и в html просто генерировать строчку на его подключение. Все.
PM ICQ   Вверх
qsajeal
Дата 4.8.2008, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 4.8.2008

Репутация: нет
Всего: нет



Придется. Ну дак и что?
Так я просто вызову функцию, она мне даст переменную, я эту переменную отправлю в шаблон. 3 строчки.
А иначе надо будет составлять таблицу. В каждую ячейку пихать переменные и проч.
Еще можно это упростить циклами, которые предлагает Smarty.(про это я только что вспомнил smile )
+ то что вы сказали с подшаблоном очень интересно. Пожалуй такое может мне подойти.

Добавлено через 3 минуты и 1 секунду
Цитата(Mal Hack @ 4.8.2008,  19:44)
qsajeal, PHP к оформлениею отношения не имеет. Его задача сгенерировать HTML код, а что там будет, html, css, javascript зависит только от того что вам надо. Как встроить стили лучшим образом, через PHP, можно сказать, увидев код. Вообще принято стили в .css файл сохранять, и в html просто генерировать строчку на его подключение. Все.

Вы мне изложили сейчас суть метода 1.
Верстальщик не будет просматривать php-код и в какой-то там параметр функции сувать название своего шаблона. Это сводит на нет весь смыслразделения

Добавлено через 6 минут и 12 секунд
т.е. дизайнер теряет контроль над ВСЕМИ элементами. Полного разделения не происходит. Понимаете? Во всех СMS-ках именно такой подход. Это очень нетривиальна проблема как оказалось
PM MAIL   Вверх
Mal Hack
Дата 4.8.2008, 20:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Цитата(qsajeal @  4.8.2008,  20:44 Найти цитируемый пост)
Вы мне изложили сейчас суть метода 1.

Нет. Я вам изложил суть того, как надо делать. А будете ли вы сами пармер писать или смарти использовать - это совсем другое дело.

Цитата(qsajeal @  4.8.2008,  20:44 Найти цитируемый пост)
т.е. дизайнер теряет контроль над ВСЕМИ элементами. 

Вот на этом форуме куски html вкинуты в функции, в функциях нет никакого программного кода, кроме вставки нужных параметров с троку heredoc...
Все зависит от того, как вы шаблонизатор построите. Хотите впишите <link ....> в tpl файл, хотите в коде PHP эту строчку пишите, это никакой разницы нет.
PM ICQ   Вверх
qsajeal
Дата 4.8.2008, 21:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 4.8.2008

Репутация: нет
Всего: нет



Блин, я чувствую вы мен не понимаете...
Каким бы образом мы не подключили стили они не будут работать, пока мы не пропишем после тега class="" или id= и проч.!!! С этим вы согласны?
Так. Хорошо. Теги формируются в методах класса. Единственный способ подставить туда значения этих class и идентификаторов - это передать их как параметры конструктору или там другим функциям. Cогласны? Вы сейчас можете сказать: Давайте у каждого тега пропишем класс сразу же с определенным именем. Но потом верстальщику надо будет называть эти классы именно так что-ли?
Единственный ему выход это лезть в php-код и вводить в параметры функции названи этих классов, что он делать не должен по определению().
Ну, теперь поняли?
PM MAIL   Вверх
Mal Hack
Дата 4.8.2008, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Вы заранее определяете для каждого элемента название стиля, которое прописываете в class или  id, а дизайнер потом, на основе этого создает .css, где эти имена классов и ID стилей определяет. И лезть в код ему не надо, достаточно глянуть в сырцы html страницы полученной от скрипта.
PM ICQ   Вверх
sTa1kEr
Дата 4.8.2008, 22:00 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 11
Всего: 146



qsajeal, посмотрите как это реализовано в Zend Framework, это достаточно интересно. Zend_Form_Decorator_ViewScript
Т.е. это как 1ый метод, но задаете вы не стиль, а декоратор. А сами декораторы любого элемента уже сможет сверстать верстальщик, пользуясь только шаблоном.
PM MAIL   Вверх
qsajeal
Дата 5.8.2008, 08:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 4.8.2008

Репутация: нет
Всего: нет



Цитата(Mal Hack @ 4.8.2008,  21:32)
Вы заранее определяете для каждого элемента название стиля, которое прописываете в class или  id, а дизайнер потом, на основе этого создает .css, где эти имена классов и ID стилей определяет. И лезть в код ему не надо, достаточно глянуть в сырцы html страницы полученной от скрипта.

2 недостатка:
1. Код захломлен ненужными элементами
2. Дизайнер ограничен в названии стилей. Ему нужно называть их именно так, как вы указали

Добавлено через 1 минуту и 38 секунд
Цитата(sTa1kEr @ 4.8.2008,  22:00)
qsajeal, посмотрите как это реализовано в Zend Framework, это достаточно интересно. Zend_Form_Decorator_ViewScript
Т.е. это как 1ый метод, но задаете вы не стиль, а декоратор. А сами декораторы любого элемента уже сможет сверстать верстальщик, пользуясь только шаблоном.

Я только новичек и с php знаком 2 месяца, пока дальше PEAR не продвинулся.
Но  вскоре  обязательно изучу ZF. Cпасибо за совет

Добавлено через 8 минут и 49 секунд
Ага. Глянул ссылку. Разобрался. Очень интересный подход.

PM MAIL   Вверх
Mal Hack
Дата 5.8.2008, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 8
Всего: 261



Цитата(qsajeal @  5.8.2008,  09:53 Найти цитируемый пост)
1. Код захломлен ненужными элементами

Простите, но это бред... 
В коде ничего лишнего не бывает, либо задача не оптимизирована.

Цитата(qsajeal @  5.8.2008,  09:53 Найти цитируемый пост)
2. Дизайнер ограничен в названии стилей. Ему нужно называть их именно так, как вы указали

А какая дизаййнеру разница?

Поймите, у вас не получится полснотью на 100% разделить в сложном скрипте дизайн и код. Даже в IPB все равно небольшая часть идет в коде. Никуда вы от этого не денетесь.
PM ICQ   Вверх
Anarki
Дата 12.8.2008, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 326
Регистрация: 14.3.2005

Репутация: 1
Всего: 11



IPB не эталон.

Это сообщение отредактировал(а) Anarki - 12.8.2008, 09:45


--------------------
PM WWW   Вверх
Feldmarschall
Дата 12.8.2008, 10:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
****


Профиль
Группа: Участник
Сообщений: 2641
Регистрация: 11.12.2007

Репутация: -2
Всего: 32



отвечу на первоначальный вопрос.
"разделение логики и содержимого" - это миф.
в реальности над шаблоном всегда работают программист и верстальщик только вместе.
Это, в первую очередь, касается т.н. "шаблонов без логики", в которых верстальщик без программера вообще шагу не может ступить, но и смартиподобных - тоже.
Договариваться все равно придется. И договориться об именах классов - совсем несложно.

А смарти тут получается не при делах. просто делается вывод переменной, содержащей форму. И это нормально.
Я раньше был противником "формовочных автоматов", и делал форму такой же частью шаблона, как и другие.  Борясь с естественным для каждого программиста желанием унифицировать вывод всех этих однообразных данных. Но потом подумал, что все оформление действительно можно задавать только стилем. а стиль указывать в параметрах вызова класса.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.1067 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.