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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проектирование на основе шаблонов 
V
    Опции темы
Arantir
Дата 27.11.2012, 03:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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

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



Подскажите литературу (желательно, в цифровом виде) или статьи по проектированию веб-приложений (сайтов) с использованием шаблонного метода. То есть, метода, при котором верстка страниц осуществляется с помощью HTML и некоторых самописных условных правил. А PHP уже обрабатывает эти шаблоны. Суть в том, чтобы разметка страниц и программная часть были разделены.
А то вроде бы идею представляю, но вот так сел и не знаю с чего начать, чтобы потом какой-то ужас не вышел.


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
mark2009
Дата 27.11.2012, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Если вкратце, то суть такова:

1. Есть Smarty (движок шаблонов). Он написан на PHP. Имеет специальную структуру папок и файлов. 
Берёте его, создаёте файл шаблона. Обычный html-файл. Там может быть html-разметка, а могут располагаться и команды шаблона.

2. В файле php определяете переменные шаблона. Естественно, наряду с обычным кодом.
В конце файла отображаете шаблон. На Smarty это

Код

$smarty->display('index.tpl')


где index.tpl - файл шаблона, лежащий в специальной папке.

Все команды соответствующие можно прочитать на сайте Smarty. С другим движком шаблонов в принципе действия аналогичные.
PM MAIL WWW ICQ Skype   Вверх
skyboy
Дата 27.11.2012, 08:51 (ссылка) |    (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



проектирование — это MVC(Model-Viewer-Controller).
дело ж не в том, как будет реализован шаблон — Smarty там, обычный PHP код(РНР, кста, отличный как шаблонизатор — немного многословнее Смарти, разве что) или Twig(мой коллега утверждал, что намного быстрее Смарти работает, но я не проверял)
Цитата(Arantir @  27.11.2012,  02:01 Найти цитируемый пост)
Суть в том, чтобы разметка страниц и программная часть были разделены.

обычно говорят о разделении логики представления и бизнес логики. то есть, в шаблоне использовать условия, циклы — ничего зазорного нет, при условии, что это "логика вывода", а не логика обработки/сохранения/загрузки данных.
так что искать тебе надо по запросу "MVC". а такого хватает smile
PM MAIL   Вверх
Arantir
Дата 27.11.2012, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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

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



mark2009, та я сам хотел что-то создать, а не пользоваться готовым =) Так, для себя, поучится чему-то новому.
Хотя расковырять этот движок и узнать его реализацию будет полезно  smile 


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
}
PM   Вверх
skyboy
Дата 27.11.2012, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Arantir @  27.11.2012,  13:25 Найти цитируемый пост)
А то менять разметку, которая как спагетти, переплетена с php-кодом, не так уж удобно =)

та ладно.
на самом деле не вижу большой разницы между 
Код

<? foreach($arr as $el): ?>
<a href="/<?=$el['src'] ?>"><?=$el['title'] ?></a>
<? endforeach; ?>

и 
Код

{foreach src=$arr item="el"}
<a href="/{$el.src}">{$el.title}</a>
{/foreach}

если отказываться от логики вывода, чтоб каждая переменная в шаблоне просто выводилась — без циклов и условий, то придется эти ж  цикли и условия пихать в РНР код и спагетти будет уже там.
PM MAIL   Вверх
Arantir
Дата 27.11.2012, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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

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



skyboy, в вашем примере разницы то нету, а я подразумевал такую:

Код

<? foreach($arr as $el): ?>
<a href="/<?=$el['src'] ?>"><?=$el['title'] ?></a>
<? endforeach; ?>

Код

<each $$Progect[menu_links]>
<a href="$$eachVal[0]">$$eachVal[1]</a>
</each>


Цитата(skyboy @  27.11.2012,  17:03 Найти цитируемый пост)
если отказываться от логики вывода, чтоб каждая переменная в шаблоне просто выводилась — без циклов и условий, то придется эти ж  цикли и условия пихать в РНР код и спагетти будет уже там. 

Ну я примерно это и собирался сделать. Но! Теперь спагетти кода и спагетти разметки - это два разных спагетти. И если мне надо всего-лишь изменить разметку, я могу не беспокоится о повреждении кода обработки.
и при отделении обработки проще отлавливать ошибки. Проще осуществить универсальную систему, при которой в разметке вместо переменной останется пустая строка. Например, добавив интерфейс некоего обработчика одной переменной и создавать мини-классы для частных случаев (например, вывод ссылки).
А так придется или пихать 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
}
PM   Вверх
skyboy
Дата 27.11.2012, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Arantir, да, согласен, шаблонизатор-надстройка дает дополнительный контроль над происходящим.

Цитата(Arantir @  27.11.2012,  17:42 Найти цитируемый пост)
Но! Теперь спагетти кода и спагетти разметки - это два разных спагетти. 

собственно, я имел в виду радикальный вариант, когда в шаблонах логика отстствует вообще — просто вывод значений определенных переменных. ни циклов, ни условий.
PM MAIL   Вверх
ksnk
Дата 27.11.2012, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Arantir, При разработке языка шаблонной разметки сталкиваешься с проблемой, когда новый язык нафик никому не нужен, так как он новый  smile 
Возможно, правильнее воспользоваться существующими языками, просто чтобы сэкономить на мозгах, когда придется придумывать необходимые фичи. 
imho, есть только пара языков-кандидатов - смарти и twig.


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Arantir
Дата 27.11.2012, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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

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



ksnk, ну я не собирался выдумывать язык. Я только хотел узнать о существующем в мире опыте по выводу страницы, попутно вставляя в нее компоненты, сгенерированные скриптом. Опять же, повторюсь, мне не обязательно делать страницу динамической (с помощью языка шаблонов). Будет надо - я смогу и php поправить. Это в VBulletin свой язык шаблонов, чтобы даже не шарящий в php мог поставить себе свой форум. А мой сайт и так будет содержаться мной =)

Я просто не хочу изобретать велосипед. Я на личном опыте знаю, что 99% проблем были уже кем-то решены до меня.
Чтобы восполнить свое безмерное желание к созиданию чего-то нового и прекрасного ( smile ) надо сначала опираться на что-либо существующее =)
Цитата(skyboy @  27.11.2012,  18:10 Найти цитируемый пост)
собственно, я имел в виду радикальный вариант, когда в шаблонах логика отстствует вообще — просто вывод значений определенных переменных. ни циклов, ни условий. 

Я именно это и буду делать, хе-хе. Лично мне достаточно. Продавать эту... CMS, если это так можно будет назвать, я никому не собираюсь =)


--------------------
interface Жопа {
    // ATTENTION: has to be implemented by every class of the project for proper project work
}
PM   Вверх
s1lver
Дата 28.11.2012, 07:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хм, я тоже разделяю шаблон (в котором HTML + js + CSS) и php. К примеру есть некоторое количество тегов отвечающих за вывод меню, контента, опросов и т.д 

Выглядит примерно так:

файл template.htm

Код

<html>
<style ....>
<script ....>
<body>
<div id="menu">{MENU}</div>
<div id="content">{CONTENT}</div>
</body>
</html> 


Кроме этого постороннего  кода на php в шаблоне нет.


Это сообщение отредактировал(а) s1lver - 28.11.2012, 07:51


--------------------
Я собрался жить вечно - пока все идет нормально!
PM MAIL ICQ   Вверх
Fortop
Дата 28.11.2012, 12:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(ksnk @  27.11.2012,  19:33 Найти цитируемый пост)
озможно, правильнее воспользоваться существующими языками, просто чтобы сэкономить на мозгах, когда придется придумывать необходимые фичи. 

Именно поэтому я использую php в шаблонах  smile 


--------------------
Мир это Я.
Живее всех живых.
PM MAIL   Вверх
Arantir
Дата 1.12.2012, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


Профиль
Группа: Участник
Сообщений: 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
}
PM   Вверх
Arantir
Дата 1.12.2012, 08:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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

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



Такс, ладно... Подсказали почитать про MVC. А теперь подскажите, где можно почитать про MVC... 
В смысле, не статьи с заголовком "Про MVC", а статьи где действительно подробно расписана концепция со всеми особенностями.
А то большинство статей оказались логическими бомбами. Там описание концепции не сходится с блок-схемами и не сходится с логикой примеров реализации  smile
Какие-то дилетанты писали =) Половина так вообще скорее о 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
}
PM   Вверх
ksnk
Дата 1.12.2012, 09:36 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



MVC - это концепция. Она неплохо подходит для серверной стороны web-приложения. Других разумных применений MVC я пока не вижу. Реализация ее может быть разной вплоть до "чисто-функций-без-ооп". 

Главная мысль MVC
- контроллер - отдельная сущность, которая  понимает входящие параметры (uri), и выясняет по ним что и как вызывать - какую модель и какой view к модели пристроить. НИКТО больше входные параметры не видит и не анализирует. Последнее утверждение плохо применяется к обработчикам форм и развесистым параметрам из командной строки...
- модель - некая сущность, которая формирует данные. Для определенности - это может быть ассоциативный массив, или отдельный объект для поддержки ленивого получения данных. Это, в принципе, и все, что детерминирует модель.
- view - некая сущность, которая по предъявленным данным строит текст, который предполагается отправить пользователю.

Важным моментом является то, что модель ничего не знает о view и view ничего не знает о модели. Это утверждение, обычно, не работает, так как шаблон отображения часто зависит от содержимого страницы, начиная с дополнительных заголовков страницы и продолжая отображением нужных-ненужных виджетов на странице.

В реальной жизни - view вырождается в продвинутый шаблонизатор. Контроллер - в пару-тройку файлов c названием router, а все остальные 100500 файлов системы, значит, остаются моделями.  smile 


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Arantir
Дата 1.12.2012, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Рыбак без удочки
**


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

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



Вот вам 3 разные концепции. Любые совпадения в названиях являются случайностью ©  smile 
И это только маленькая часть того, что бродит по интернету под названием MVC.

user posted image

user posted image

user posted image

user posted image

Я бы, наверное, назвал настоящей 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
}
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

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


 




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


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

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