![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| Arantir |
|
|||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
Подскажите литературу (желательно, в цифровом виде) или статьи по проектированию веб-приложений (сайтов) с использованием шаблонного метода. То есть, метода, при котором верстка страниц осуществляется с помощью HTML и некоторых самописных условных правил. А PHP уже обрабатывает эти шаблоны. Суть в том, чтобы разметка страниц и программная часть были разделены.
А то вроде бы идею представляю, но вот так сел и не знаю с чего начать, чтобы потом какой-то ужас не вышел. -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
| mark2009 |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 106 Регистрация: 12.10.2009 Репутация: нет Всего: 1 |
Если вкратце, то суть такова:
1. Есть Smarty (движок шаблонов). Он написан на PHP. Имеет специальную структуру папок и файлов. Берёте его, создаёте файл шаблона. Обычный html-файл. Там может быть html-разметка, а могут располагаться и команды шаблона. 2. В файле php определяете переменные шаблона. Естественно, наряду с обычным кодом. В конце файла отображаете шаблон. На Smarty это
где index.tpl - файл шаблона, лежащий в специальной папке. Все команды соответствующие можно прочитать на сайте Smarty. С другим движком шаблонов в принципе действия аналогичные. |
|||
|
||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
проектирование — это MVC(Model-Viewer-Controller).
дело ж не в том, как будет реализован шаблон — Smarty там, обычный PHP код(РНР, кста, отличный как шаблонизатор — немного многословнее Смарти, разве что) или Twig(мой коллега утверждал, что намного быстрее Смарти работает, но я не проверял)
обычно говорят о разделении логики представления и бизнес логики. то есть, в шаблоне использовать условия, циклы — ничего зазорного нет, при условии, что это "логика вывода", а не логика обработки/сохранения/загрузки данных. так что искать тебе надо по запросу "MVC". а такого хватает |
|||
|
||||
| Arantir |
|
|||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
mark2009, та я сам хотел что-то создать, а не пользоваться готовым =) Так, для себя, поучится чему-то новому.
Хотя расковырять этот движок и узнать его реализацию будет полезно skyboy, ясно, спасибо за подсказку, поищу. Да, мне как раз надо разделить логику вывода и логику обработки. Чтобы файл шаблона никак не оперировал (не изменял их) с данными, а только выводил. Хороший пример - движок VBulletin и его шаблоны стилей (разметки страниц). Особенно интересна идея с мелкими шаблонами, которые включены внутрь шаблонов самих страниц. Конечно, мне чисто для себя, а не как "для пользователя". Я бы мог и прямо в php-файл повписывать и обратотку и вывод, никто другой сайт не администрирует. Но со захотелось хочется сделать все это более удобным даже для самого себя, чтобы облегчить администрирование. А то менять разметку, которая как спагетти, переплетена с php-кодом, не так уж удобно =) Это сообщение отредактировал(а) Arantir - 27.11.2012, 14:27 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
| skyboy |
|
||||||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
та ладно. на самом деле не вижу большой разницы между
и
если отказываться от логики вывода, чтоб каждая переменная в шаблоне просто выводилась — без циклов и условий, то придется эти ж цикли и условия пихать в РНР код и спагетти будет уже там. |
||||||
|
|||||||
| Arantir |
|
||||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
skyboy, в вашем примере разницы то нету, а я подразумевал такую:
Ну я примерно это и собирался сделать. Но! Теперь спагетти кода и спагетти разметки - это два разных спагетти. И если мне надо всего-лишь изменить разметку, я могу не беспокоится о повреждении кода обработки. и при отделении обработки проще отлавливать ошибки. Проще осуществить универсальную систему, при которой в разметке вместо переменной останется пустая строка. Например, добавив интерфейс некоего обработчика одной переменной и создавать мини-классы для частных случаев (например, вывод ссылки). А так придется или пихать try-catch в половину мест вывода или в случае форс-мажора половина страницы тупо не выведется из-за остановки скрипта. Кроме того, есть еще один плюс... Скрипт отдает браузеру инфу по мере вывода. И иногда получается неприятный эффект, когда не хватает закрывающих тегов во время все еще выполняющего скрипта и все наперекосяк. Или таблица загружается построчно прямо на глазах и последние колонки в процессе этого ломаются до полного вывода. А так - погрузилось-погрузилось и хоп - целостная страничка. И keep-alive-timeout можно уменьшить =) Это сообщение отредактировал(а) Arantir - 27.11.2012, 18:48 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
||||
|
|||||
| skyboy |
|
|||
|
неОпытный ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9820 Регистрация: 18.5.2006 Где: Днепропетровск Репутация: 75 Всего: 260 |
Arantir, да, согласен, шаблонизатор-надстройка дает дополнительный контроль над происходящим.
собственно, я имел в виду радикальный вариант, когда в шаблонах логика отстствует вообще — просто вывод значений определенных переменных. ни циклов, ни условий. |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
Arantir, При разработке языка шаблонной разметки сталкиваешься с проблемой, когда новый язык нафик никому не нужен, так как он новый
Возможно, правильнее воспользоваться существующими языками, просто чтобы сэкономить на мозгах, когда придется придумывать необходимые фичи. imho, есть только пара языков-кандидатов - смарти и twig. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Arantir |
|
|||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
ksnk, ну я не собирался выдумывать язык. Я только хотел узнать о существующем в мире опыте по выводу страницы, попутно вставляя в нее компоненты, сгенерированные скриптом. Опять же, повторюсь, мне не обязательно делать страницу динамической (с помощью языка шаблонов). Будет надо - я смогу и php поправить. Это в VBulletin свой язык шаблонов, чтобы даже не шарящий в php мог поставить себе свой форум. А мой сайт и так будет содержаться мной =)
Я просто не хочу изобретать велосипед. Я на личном опыте знаю, что 99% проблем были уже кем-то решены до меня. Чтобы восполнить свое безмерное желание к созиданию чего-то нового и прекрасного (
Я именно это и буду делать, хе-хе. Лично мне достаточно. Продавать эту... CMS, если это так можно будет назвать, я никому не собираюсь =) -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
| s1lver |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 580 Регистрация: 14.12.2007 Где: Россия Репутация: нет Всего: нет |
Хм, я тоже разделяю шаблон (в котором HTML + js + CSS) и php. К примеру есть некоторое количество тегов отвечающих за вывод меню, контента, опросов и т.д
Выглядит примерно так: файл template.htm
Кроме этого постороннего кода на php в шаблоне нет. Это сообщение отредактировал(а) s1lver - 28.11.2012, 07:51 -------------------- Я собрался жить вечно - пока все идет нормально! |
|||
|
||||
| Fortop |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2200 Регистрация: 13.11.2007 Где: Донецк Репутация: 20 Всего: 42 |
Именно поэтому я использую php в шаблонах -------------------- Мир это Я. Живее всех живых. |
|||
|
||||
| Arantir |
|
|||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
А как вам новая концепция - MOVE (Models-Operations-Views-Events)? XD
Хотя, по-моему, это частный случай MVC. Чистая MVC иногда не позволяет достичь желаемого. Это сообщение отредактировал(а) Arantir - 1.12.2012, 02:08 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
| Arantir |
|
|||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
Такс, ладно... Подсказали почитать про MVC. А теперь подскажите, где можно почитать про MVC...
В смысле, не статьи с заголовком "Про MVC", а статьи где действительно подробно расписана концепция со всеми особенностями. А то большинство статей оказались логическими бомбами. Там описание концепции не сходится с блок-схемами и не сходится с логикой примеров реализации Какие-то дилетанты писали =) Половина так вообще скорее о MVP рассказывают (судя по логике работы реализации). А еще много где нарушают инкапсуляцию созданием объектов одних классов в других (контроллер внутри вида, например), хотя по концепции вид независимый. P.S.: Русских нормальных статей про MVC, как я понял, нету. Так что можете посоветовать и на англ., если кто-то встречал качественную статейку. Это сообщение отредактировал(а) Arantir - 1.12.2012, 08:42 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
| ksnk |
|
|||
![]() прохожий ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 6855 Регистрация: 13.4.2007 Где: СПб Репутация: 96 Всего: 386 |
MVC - это концепция. Она неплохо подходит для серверной стороны web-приложения. Других разумных применений MVC я пока не вижу. Реализация ее может быть разной вплоть до "чисто-функций-без-ооп".
Главная мысль MVC - контроллер - отдельная сущность, которая понимает входящие параметры (uri), и выясняет по ним что и как вызывать - какую модель и какой view к модели пристроить. НИКТО больше входные параметры не видит и не анализирует. Последнее утверждение плохо применяется к обработчикам форм и развесистым параметрам из командной строки... - модель - некая сущность, которая формирует данные. Для определенности - это может быть ассоциативный массив, или отдельный объект для поддержки ленивого получения данных. Это, в принципе, и все, что детерминирует модель. - view - некая сущность, которая по предъявленным данным строит текст, который предполагается отправить пользователю. Важным моментом является то, что модель ничего не знает о view и view ничего не знает о модели. Это утверждение, обычно, не работает, так как шаблон отображения часто зависит от содержимого страницы, начиная с дополнительных заголовков страницы и продолжая отображением нужных-ненужных виджетов на странице. В реальной жизни - view вырождается в продвинутый шаблонизатор. Контроллер - в пару-тройку файлов c названием router, а все остальные 100500 файлов системы, значит, остаются моделями. -------------------- Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! |
|||
|
||||
| Arantir |
|
|||
|
Рыбак без удочки ![]() ![]() Профиль Группа: Участник Сообщений: 960 Регистрация: 18.11.2012 Репутация: 16 Всего: 55 |
Вот вам 3 разные концепции. Любые совпадения в названиях являются случайностью ©
И это только маленькая часть того, что бродит по интернету под названием MVC. ![]() ![]() ![]() ![]() Я бы, наверное, назвал настоящей MVC только последнюю. Вторя - это что-то вроде презентатор-шаблонизатор-модель В третьей вообще скорее модель-вид - это один модуль с внутренними взаимодействиями. Первая - это третья, только с показанной обратной связью видо-модели и контроллера. Все разделяют свое приложение на 3 куска и называют это MVC. Хотя, насколько я понял, собрав все прочитанное, неотъемлемой частью концепции MVC является так же и схема взаимодействия этих трех компонентов. Это сообщение отредактировал(а) Arantir - 1.12.2012, 10:31 -------------------- interface Жопа { // ATTENTION: has to be implemented by every class of the project for proper project work } |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |