Я терпеть не могу смешивать HTML с кодом. Я едва могу смотреть на один из этих шаблонов, чтобы меня не тошнило. Я знаю, когда в вашем распоряжении армия «веб-дизайнеров», и вы единственный разработчик, имеет смысл использовать какую-то систему шаблонов. Я много слышал о Smarty. Но в моем случае это всегда было источником дополнительной работы.
В любом случае, на этот раз я иду в одиночку, поэтому я не хочу касаться HTML-шаблона пресловутым полюсом. То, что я сейчас делаю, выглядит так:
<?php
$page = new html_page('My wonderful page');
$page->add_contents(new html_tag('p', 'It works', array('id' => 'helloworld', 'class' => 'somecssclass')));
echo $page->render();
?>
Все принадлежит красивой иерархии объектов, что хорошо и модно. Конечно, у меня много меньших классов, и я думаю об использовании динамических классов (например, «html_a» автоматически создаст объект html_tag типа «a».)
Теперь мой вопрос: похоже, что никто больше этого не делает. Почему? Я слишком далеко, а мой слабый, лишенный кислорода разум чего-то упускает из общей картины?
(Я четко помню библиотеку с открытым исходным кодом, которая делала именно это, но больше не могу ее найти. Так что, если я действительно не воображаю вещи, я не единственный, кто придумал этот подход для визуализации HTML.)
Есть ли у вас какие-нибудь мысли по этому поводу? (воздержитесь, пожалуйста, от рекомендации другого языка; мой любимый язык - Perl, поэтому я легко могу Outfan :-). Я застрял с PHP.)
Редактировать
Угу, кажется, я задевал нервы. Некоторые пояснения:
Что ж, имеет смысл, что люди отталкивают ... «Привет, фанаты Ferrari. ФЕРРАРИС ОТСТОЙ, но, пожалуйста, не могли бы вы помочь мне узнать, как добиться от этого большей производительности? Ламборджини - настоящее дело, но я застрял. на этой помойке Феррари, пожалуйста, помогите мне! ». PS: Я не говорю, что PHP похож на Ferrari :-)
эй, давайте поразвлечься ... media.urbandictionary.com/image/page/php-13707.jpg ;-)
Отказавшись от PHP много лет назад, только сегодня пришлось прочитать эта классная напыщенная речь.






PHP является - язык шаблонов. поэтому естественно, что все поклонники PHP используют шаблонный дизайн.
есть несколько библиотек LISP, которые делают то же самое, что и вы. ИМХО, когда я подхожу к языкам LISP, это сильно отталкивает.
Он прав, это то, что делает PHP. Если это не тот инструмент для работы, зачем мускулистый инструмент на место?
Хм, потому что у меня нет выбора? Что касается Лиспа, цитируя Ларри Уолла, «Лисп имеет всю внешнюю привлекательность овсянки с примешанными к нему кусочками ногтей». Я использовал Scheme в колледже; Я поддерживаю это заявление.
«Те, кто не знает Lisp, обречены изобретать его заново». Я не защищаю Lisp, просто отмечу, что вы переделали самую уродливую его часть.
Что ж, суть в том, что вы все еще смешиваете свой HTML с кодом. Если вы хотите изменить этот тег «p» на «div», вам придется побродить по вашему коду, чтобы сделать это. Подумайте, что предлагает ваш метод:
По сути, хотя подход может быть другим, он имеет те же проблемы, что и языки шаблонов, от которых вы пытаетесь избавиться.
Разве не было бы проще, если вы работаете в одиночку (или в группе), просто позволить PHP быть языком шаблонов?
$page = new Page('test.html');
$page->load($data);
$page->render();
и в вашем "шаблоне" test.html
<html>
<head>
<title><?php echo $title ?></title>
</head>
<body>
<p><?php echo $hello ?></p>
</body>
</html>
То, что делают другие движки шаблонов, на самом деле формализует приведенный выше код. но если вы придерживаетесь основ (повторение переменных, базовых условных выражений, циклов), вы, по сути, получаете всю мощь языка шаблонов, но на знакомом PHP и без накладных расходов на производительность.
Кроме того, в отличие от вашего примера, вы можете изменить HTML (я знаю, что вы не хотели его трогать, но изменение «p» на «div» в коде действительно не сильно отличается от изменения <p> на <div>) без нужно вникать в код.
TITCR, пример OP динамического создания html-страниц путем помещения вызовов функций с жестко запрограммированными именами элементов html ужасен. Из-за этого очень сложно изменить презентацию. Если только вы не храните все эти вызовы в одном месте, но тогда это просто неудобный язык шаблонов.
Я знаю, что вы не хотите слышать о системах шаблонов, но если вы смотрели только на Smarty, вы упускаете лучший вариант. Попробуйте Крошечный, но сильный
Как и вы, я единственный разработчик, но я считаю, что TBS значительно увеличивает мою продуктивность и удобство сопровождения моего кода. В отличие от smarty, он не навязывает макроязык в шаблонах и полностью, на 100% совместим с Dreamweaver - шаблоны действительно остаются как wysiwyg, что экономит массу времени.
Возможность писать весь свой код в отдельных файлах из шаблона означает, что он может быть отформатирован и упорядочен стандартным образом. Техническое обслуживание - это дремота, поскольку я всегда знаю, как устроен мой код.
Я использую TBS с библиотеками XAJAX, и это работает, но вы можете смешивать с ним любые ваши предпочтительные библиотеки - у меня, например, он неплохо работает с Dojo, и в следующий раз я смотрю на jQuery.
Никто другой этого не делает, потому что это немного больше, чем просто выход из режима PHP для файла шаблона, не говоря уже о том, что он просто добавляет накладные расходы исключительно для удовлетворения ваших предпочтений в отношении эстетики кода.
Это не означает, что вы можете отделить логику от отображения, например, в такой простой системе, как предложил Оуэн. Но уклоняться от соглашения о смешивании php с HTML только потому, что вам это не нравится, немного глупо - именно так язык был создан для использования.
Вы правы в том, что изначально PHP разрабатывался как шаблонный процессор. Это не значит, что это нормально. И я не хочу разделять вещи, поэтому я не использую систему на основе шаблонов.
Я не понимаю, о чем вы говорите. Вы ищете библиотеку шаблонов для php? Их много, и хотя на Smarty модно ненавидеть (как модно ненавидеть на самом php), это отличная библиотека.
Вы спрашиваете, почему «все» смешивают html в своем php-коде? Ответ на этот вопрос таков: так поступают только новички и идиоты. Каждый, у кого есть реальный опыт работы с php, использует механизм шаблонов.
Если вы спрашиваете, почему никто не добавляет каждую HTML-страницу в код, как в вашем примере, это очевидно: потому что это кошмар обслуживания. Вы собираетесь отдать свой код дизайнеру и пожелать ему удачи? Собираетесь ли вы вручную конвертировать каждую HTML-страницу в страницы и страницы кода?
Что касается symfony, то он даже не использует smarty, но все же обладает всем функционалом. Слоты, партиалы, помощники и т. д.
Ребята, я вообще не хочу использовать библиотеку шаблонов. Вот что побудило меня спросить об этом подходе.
Дело в том, что то, о чем вы спрашиваете, - это очень запутанный и болезненный способ сделать то, что гораздо проще сделать с помощью библиотеки шаблонов. Может быть, вы можете просветить нас о Почему, вы не хотите использовать механизм шаблонов, потому что прямо сейчас ваш вопрос не имеет особого смысла.
дело в том, что вы, по сути, создали библиотеку шаблонов. это слой поверх HTML, предназначенный, наконец, для вывода HTML. эта цель не отличается от обычных библиотек шаблонов, только подход немного отличается.
Итак, если я правильно понимаю, вы говорите, что ненавидите смешивать код с HTML так сильно, что решили вместо этого добавить HTML в свой код? Я не вижу, как это что-то улучшает - код и HTML все еще смешаны - и это менее естественный / более сложный подход к PHP, который, кажется, дает очевидное объяснение того, почему никто другой этим не занимается.
Используйте правильную систему шаблонов, которая фактически отделяет код от HTML, а не просто играет с тем, какой из них встроен в другой. Я бы посоветовал HTML :: Template или Template :: Toolkit, поскольку вы разделяете мое пристрастие к Perl, но вы уже сказали, что языки, отличные от PHP, неприемлемы.
Вопрос 261338 имеет некоторую совместимость с этим, но мой ответ был больше нацелен на php-людей, которые плохо знакомы со всем этим программированием "разделение проблем? Что это?" люди. (извините, люди php, в основном это так)
Вы могли бы быть хорошим игроком на Perl и использовать perl для создания своего html-шаблонного дерьма, которое загружается в php, я все еще новичок в perl, но php пахнет, и я использовал его слишком долго, конечно, должен быть способ написать сайт на perl, работающий на php.
В-третьих, я хотел бы увидеть что-то, что делает дополнительную замену помимо переменных.
Что-то вроде сопоставления dom в стиле jQuery, но без раздувания, java (rhino) или всего веб-браузера.
$page = new Page("FakePage.html");
$page->find("div#foobar")->text = "Hahah! I rock" ;
/* Give All H1's a numeric lead in */
foreach( $page->find("h1")->iterator() as $index => $node )
{
$node->text = ($index + 1 ) . ". " $node.text;
};
$page->render();
Мне бы очень понравилось что-то, что было бы хорошо сделано и не было слишком сильным отстоем. Обратите внимание на то, что я использую структуры, которые, вероятно, не понравятся php.
Мечты свободны.
(Это синтаксис / only /, который действительно разделяет дизайн и логику, все остальные элементы шаблона - это просто рекурсивно уменьшающиеся языки программирования)
Очень крутая часть здесь:
Немного по-другому, но все же похоже. Я написал статья об использовании DOM для привязки переменных к шаблонам. Вам это может показаться интересным.
Базовый вариант использования:
$t = new Domling('<p class = "hello"></p>');
$t->capture('hello')->bind("Hello World");
echo $t->render();
Что производит:
<p class = "hello">Hello World</p>
Не совсем то, что я имел в виду (я не хочу разбирать шаблон, чтобы получить мою DOM), но это дало мне несколько идей.
Что ж, похоже, люди расстроились из-за цитаты «ненавидеть PHP». Вопрос не в том, извините, если я отложил ваш любимый язык.
В конце концов, несколько человек сделали несколько действительно важных выводов;
Принятым ответом для меня была хорошая статья, опубликованная troelskn. Я пришел к выводу, что мне нужна собственная модель документа и что я должен воздерживаться от использования в ней имен сущностей html. Как я уже сказал, это небольшой побочный проект; эта статья и некоторые подсказки, которые я почерпнул из ее комментариев, дали мне новые идеи для изучения.
(По поводу переосмысления Лиспа: я единственный человек, которого я знаю, которому нравилось программировать DOM. Итак, вот.)
Спасибо всем за ваши комментарии.
Для php существует очень мало фреймворков, которые делают то, что вы хотите. Попробуйте Прадо или Yii. Они поддерживают полноценные библиотеки тегов, а не только системы шаблонов. Вы также можете проверить phpframeworks.com, там вы можете найти другой фреймворк, который сделает то, что вам нужно.
Я также разрабатываю свой собственный фреймворк с поддержкой библиотек тегов и манипуляций с dom на стороне сервера, но мне все еще нужно немного оптимизировать код перед публикацией чего-либо, этот проект находится в http://players.sourceforge.net.
Я использую подход xml, xsl для разработки своих форм, используя один шаблон xls для рендеринга любой формы, которую я использую на своем портале. Вначале было немного сложно найти правильный формат файла xls, но после того, как это было сделано, стало очень легко визуализировать мои формы. В php мне просто нужно создать объект XML и отобразить его.
Очевидно, будут «особые» вещи, которые я не хочу отображать с помощью xls, в этом случае я визуализирую их обычным способом.
Я не люблю много смешивать с php-кодом, поэтому я разработал эти библиотеки ...
Я разработал облегченную библиотеку металлических тегов по многим из тех же причин, сохранив идентификатор аромата, который можно увидеть при использовании lisp для генерации HTML.
Обзор / пример кода здесь xilla_tags
Отметьте это: библиотека тегов php, который реализует JSF
Возможно, людей отталкивают настроения против PHP.