LINUX.ORG.RU

Отделение кода от данных, PHP


0

1

Вопрос следующий: как грамотно реализовать отделение html от php в небольшом приложении?

Варианты навскидку:
1. Готовые шаблоны(Smartry и т.д.).
2. Напрямую через echo/print/heredoc и инклады файлов.
3. Всё в кучу, разделение функциями вывода(адЪ).

Что есть ещё, где можно посмотреть примеры кода?

Спасибо за внимание!

★★★★

Любой шаблонизатор взять. Стандартный, нормальный подход.

resurtm ★★★
()

Сам не знаю ответа на этот вопрос, но я делаю так..

<?php
// записываем весь вывод
ob_start();

// обработка человеко-понятных урлов
// в nginx.conf должно быть try_files $uri $uri/ /index.php?$args&test=$uri;
foreach (explode('/', $_GET['test']) as $null) {
  if (strlen($null) > 0) $path[] = $null;
}

// и смотрим уже на документы, какие запросили
if ($path[0] == 'about') include('./includes/about.inc.php');
elseif (...)
else include('./includes/error.inc.php');

// получаем вывод
$contents = ob_get_clean();
?>
<!doctype html>
<html>
...
<?php echo $contents; ?>
...
</html>
и можно сказать, это весь мой движок).. html храню вместе с php кодом с одним лишь «но», - сначала выполняется php код, получая данные откуда либо, а после уже выводится html с <?php echo ...; ?> вставками, а где нужны условия или циклы - использую <?php if (...): ?>...<?php endif; > такой формат.

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

Spoofing ★★★★★
()
Ответ на: комментарий от Erfinder

Я как-то пытался освоить Смарти по книге. Чуть не сбрендил. Масса телодвижений по подключению в ZF. Столько тонкостей, которые фактически повторяют возможности самого PHP (как шаблонизатора)...

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

Моё мнение, создателей Смарти на костер, а использующим его - живительные розги до просветления.

Munhgauzen
()
Ответ на: комментарий от Munhgauzen

Походит на Sinatra и Mojolicious::Lite, но как-то неловко и нелепо выглядит :(

helios ★★★★★
()
Ответ на: комментарий от Munhgauzen

Как-то пришлось освоить smarty на ходу, также встроить его в Zend (не сразу, пришлось посидеть). Для шаблонизатора - вполне адекватно.

И лучше этим самым верстальщикам не писать на php. Печально это. Да и вообще, разделение года, MVC, май!

helios ★★★★★
()
Ответ на: комментарий от Munhgauzen

Ну просто признайся, что ниасилил. А вообще есть туча шаблонизаторов, собственно можно подобрать что-то своё. А пихать html код в пхп - не дело.

Erfinder ★
()
Ответ на: комментарий от Erfinder

Ну просто признайся, что ниасилил.

Признаюсь.

А пихать html код в пхп - не дело.

MVC: где View состоит из ограниченного набора команд PHP в качестве шаблонизатора.

Munhgauzen
()
Ответ на: комментарий от Erfinder

А почему нельзя пихать разметку в php? Ведь php это такой DSL для рисования формочек...

А так получается что один шаблонизатор поверх другого.

outtaspace ★★★
()
Ответ на: комментарий от outtaspace

Ну все же PHP может производить обработку полученных данных, а потому все же язык программирования, а не оформления, HTML же только оформление, две сущности надо разделить

pylin ★★★★★
()
Ответ на: комментарий от pylin

HTML же только оформление, две сущности надо разделить

HTML это скорее результат генерации отображения (рендеринга). Я бы сказал, надо отделять логику приложения от представления. И ничего страшного, если в слое презентации будет легкая смесь PHP и HTML.

Munhgauzen
()

Возвращать xml и конвертировать в xhtml при помощи xslt. Добавить соли по вкусу.

anonymous
()
Ответ на: комментарий от pylin

а потому все же язык программирования

Да ладно. Все знают, что PHP — этакий шаблонизатор-переросток. Поэтому криминала никакого нет.

baverman ★★★
()

я бы порекомендовал Twig, за одно если решите потом на джанго или рельсы перейти, там шаблонизаторы с подобным синтаксисом.

digi
()
Ответ на: комментарий от digi

В идеале хотелось бы перевести логику на... думаю что пайтон, а PHP использовать как раз для разметки. Но это перспектива.
А если так - вопрос: PHP как шаблонизатор и сопутствующее оформление кода.

Yustas ★★★★
() автор топика
Ответ на: комментарий от Spoofing

html храню вместе с php кодом с одним лишь «но», - сначала выполняется php код, получая данные откуда либо, а после уже выводится html с <?php echo ...; ?> вставками, а где нужны условия или циклы - использую <?php if (...): ?>...<?php endif; > такой формат.

Вот это мне, кажется, подходит. Не додумался. Спасибо.

Yustas ★★★★
() автор топика
Ответ на: комментарий от anonymous

Я думал о таком варианте в связке с пайтон. Но даже так оно будет для меня сейчас сложно. ))

Yustas ★★★★
() автор топика
Ответ на: комментарий от olibjerd

Отделение данных от кода лиспа при помощи PHP!!!

".. данный способ никогда и никум не использовался. Кроме наркоманов" (С) zgen

Yustas ★★★★
() автор топика

php отдает json на клиента. этот json транслируется в html шаблонизатором на стороне клиента.

outtaspace ★★★
()

smarty не нужен, используй twig

аргументы:

  • smarty — это поделка прыщешкольников, а twig поддерживается серъезным дядей, у которого есть собственная фирма и собственный фреймворк
  • у smarty официальный сайт страшный
  • twig используется в symfony2 и возможно будет использоваться в drupal8
anonymous
()

Шаблонизатор нужно использовать! Я, например, использую свою обёртку к Blitz, добавляя различные типы префиксов к заменяемым меткам.

avolver ★
()

Я на практике использую преимущественно Smarty и HAML. Редко — готовые PHP-шаблоны. Работал немного с Twig и Quicky. Но эти не прижились.

KRoN73 ★★★★★
()
Ответ на: комментарий от Munhgauzen

Я как-то пытался освоить Смарти по книге. Чуть не сбрендил.

Странная книга. Я, работая с ним впервые, скопипастил пример с офсайта и тот сразу заработал. Посмотрел пару примеров и стал писать свои расширения.

Моё мнение

http://demotivation.me/images/20090226/p4edulouu0wr.jpg

KRoN73 ★★★★★
()
Ответ на: комментарий от baverman

Ну я не спорю что PHP это тот кто часто присутствует в семьях согласно нашей поговорке

pylin ★★★★★
()
Ответ на: комментарий от KRoN73

и стал писать свои расширения.

А я не стал, воспользовался синтаксисом PHP. Времени стало жалко - трусы на штаны натягивать.

И верни людей в комнату :)

Munhgauzen
()
Ответ на: комментарий от Munhgauzen

воспользовался синтаксисом PHP. Времени стало жалко

Вот потому я на Smarty (а теперь — в основном на HAML) и пишу, что времени жалко :) PHP в роли шаблонизатора отнимает много больше и времени, и внимания.

- if($view->lists())
    %h2 Состоит в списках
    %ul
        - foreach($view->lists() as $l)
            %li= $l->titled_link()


- if($view->contacts())
    %h2 Контакты
    %table.btab
        %tr
            %th Дата
            %th Вид
            %th Комментарии
        - foreach($view->contacts() as $c)
            %tr
                %td= $c->contact_date()
                %td= $c->admin()->imaged_direct_titled_link($c->contact_type())
                %td= $c->note()

Жаль только mcedit не умеет HAML подкрашивать :)

KRoN73 ★★★★★
()
Ответ на: комментарий от digi

чем вам смарти больше симпатизирует, чем твиг?

На твиге расширения писать много более муторно. Особенно автоматический подхват, без хардкодного подключения. Вообще, вопрос решаемый, и я им занимался понемногу, но тут вышел Smarty3 и Twig потерял свои преимущества.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

PHP в роли шаблонизатора отнимает много больше и времени, и внимания.

Жаль только mcedit не умеет HAML подкрашивать

отнимает много больше и времени, и внимания.

mcedit ... и времени, и внимания.

А если использовать полноценную IDE?

Munhgauzen
()

инклады

facepalm


а по теме - шаблоны во все поля

q11q11 ★★★★★
()
Ответ на: комментарий от Munhgauzen

А если использовать полноценную IDE?

Я много работал в своё время в Eclipse с Java. Ещё раньше — MSVS под C++. Плюс к этому я очень ленив по натуре и если есть возможность как-то облегчить себе жизнь, я это пробую сделать. Для работы в PHP пробовал и vim с набором заточенных расширений, и PDT, и Zend Studio, и даже всякие Komodo IDE. Но всё равно возвращаюсь к удалённой работе в mcedit :) Видимо, тут вопрос именно в удалённой работе. Работать приходится постоянно с разных машин и синхронизировать постоянно локалхосты перед работой задалбывает. Проще уж работать с одним удалённым тестовым сервером с любых рабочих мест.

Ну и отладочный цикл. Вот видишь в логе путь к файлу, в котором возникла ошибка, выделил мышкой, «mcedit», средняя кнопка, опционально — «:NN» — номер строки и уже правишь что нужно. А в IDE пока до нужного файла доколупаешь... В каком он проекте из 3..4 открытых, на какой глубине каталогов… Нужно открыть файл рядом с одним из предыдущих — в mc alt-shift-h — и перед тобой список. В IDE же опять лазить по дереву каталогов…

А вот в Java цикл рабработки сильно отличается и там, наоборот, я от mcedit плевался страшно и почти не выключал Eclipse :)

Ну и IDE, опять же, не даёт бонусов при работе с теми же Smarty или YAML/HAML. По крайней мере я не видел, кто бы с такими мог работать :)

KRoN73 ★★★★★
()

Шаблонизаторы при работе с php просто не нужны. Ибо теже смарти потом компиляца в php.

ggrn ★★★★★
()
Ответ на: комментарий от KRoN73

Я открывал смартёвые файлы в еклипсе дефолтным html редактором, для автокомплита удобно. Только он(редактор) ругался на смарти и помечал как ошибка, но я забивал на это. Да и сейчас mako файлы так же открываю.

ggrn ★★★★★
()
Ответ на: комментарий от ggrn

Я открывал смартёвые файлы в еклипсе дефолтным html редактором, для автокомплита удобно

Ну, в этом смысле всё равно выгоднее HAML. А его Eclipse не понимает :)

KRoN73 ★★★★★
()
Ответ на: комментарий от iSage

Так не для верстальщиков же предназначено :)

KRoN73 ★★★★★
()

Не изобретайте велосипед в велосипеде. PHP сам по себе шаблонизатор. Устанавливайте все переменные в одном файле и вкладывайте в конце файл с html кодом из подкаталога templates. Просто, быстро, эффективно, не требует дополнительного кода который будет тормозить на каждом запросе.

tyler19 ★
()

Юзай Twig. Лучший шаблонизатор сейчас под пых. Не нужно изобретать велосипедов.

umren ★★★★★
()
Вы не можете добавлять комментарии в эту тему: топик перемещен в архив.