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 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.