Библиотека тегов PHP - PullRequest
0 голосов
/ 04 ноября 2008

Я терпеть не могу HTML, смешанный с кодом. Я едва могу посмотреть на один из этих шаблонов, не чувствуя тошноты. Я знаю, когда в вашем распоряжении целая армия «веб-дизайнеров», и вы единственный разработчик, имеет смысл использовать какую-то систему шаблонов. Я много слышал о Смарти. Но в моем случае это всегда было источником еще большей работы.

В любом случае, на этот раз я собираюсь в одиночку, поэтому я не хочу касаться шаблона 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, поэтому я могу легко перехитрить :-). Я застрял с PHP.)

Редактировать

Э-э-э, похоже, я ударил по нервам. Некоторые уточнения:

  1. Я единственный разработчик в этом проекте.
  2. Как я смешиваю код с HTML? Объект "html_tag" из моей библиотеки очень похож на, скажем, узел в DOM. Метод «рендеринга» - это тот, который создает html (с прекрасным отступом, я должен добавить), но я нигде не пишу открывающий или закрывающий тег.
  3. Я создаю небольшие объекты для нескольких задач. Эти объекты имеют методы для создания объектов тегов; эти результирующие объекты затем вставляются, скажем, в таблицы или страницы.
  4. Я упоминал, что я застрял с PHP?
  5. В моей библиотеке есть несколько примитивных методов доступа для поиска объектов. Таким образом, пример итератора, размещенный в 26288 , может быть реализован с относительной легкостью.
  6. Я не беспокоюсь о производительности (пока). Я всегда думал, что это действительно хорошая проблема, но я еще не там.

Ответы [ 13 ]

9 голосов
/ 04 ноября 2008

Итак, суть в том, что вы все еще смешиваете свой HTML с вашим кодом. Если вы хотите поменять этот тег «p» на «div», вам придется просто пройтись по своему коду, чтобы сделать это. Подумайте о том, что предлагает ваш метод:

  • смешивает код с HTML
  • добавляет накладные расходы для разбора всех запросов
  • вводит новый "язык" поверх HTML

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

Не проще ли, если вы работаете один (или в группе), просто позволить 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>), без необходимости углубляться в код.

3 голосов
/ 05 ноября 2012

Проверьте это: библиотека тегов php , которая реализует JSF

2 голосов
/ 05 ноября 2008

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

В конце, есть несколько действительно правильных замечаний, сделанных несколькими людьми;

  1. Неудачное соглашение об именах: имя элемента HTML в качестве имени объекта звонит в колокольчик.
  2. Я заново изобретаю Лисп, и самое худшее в этом.
  3. Это просто еще одна система шаблонов и плохая для загрузки.

Принятым ответом для меня была хорошая статья, опубликованная troelskn. Я пришел к выводу, что мне нужна моя собственная модель документа, и я должен воздерживаться от использования имен сущностей html на ней. Как я уже говорил, это небольшой побочный проект; эта статья и некоторые советы, которые я получил из ее комментариев, дали мне новые идеи для изучения.

(Об обновлении части Lisp: я единственный человек, которого я знаю, который любил программировать DOM. Итак).

Спасибо всем за ваши комментарии.

2 голосов
/ 04 ноября 2008

Немного отличается, но все же похож. Я написал статью об использовании DOM для привязки переменных к шаблонам . Вы можете найти это интересным.

Основной вариант использования:

$t = new Domling('<p class="hello"></p>'); 
$t->capture('hello')->bind("Hello World"); 
echo $t->render();

Который производит:

<p class="hello">Hello World</p> 
2 голосов
/ 04 ноября 2008

Итак, если я правильно понимаю, вы говорите, что вам так не нравится смешивать код с вашим HTML, что вы решили вместо этого смешать HTML с вашим кодом? Я не вижу, как это что-то улучшает - код и HTML все еще смешаны - и это менее естественный / более сложный подход к PHP, который, кажется, дает очевидное объяснение, почему никто другой не делает этого.

Используйте правильную систему шаблонов, которая фактически отделяет код от HTML, а не просто играет с тем, какой из них встроен в другой. Я бы предложил HTML :: Template или Template :: Toolkit, поскольку вы разделяете мой вкус к Perl, но вы уже сказали, что не-PHP языки не являются жизнеспособными вариантами.

2 голосов
/ 04 ноября 2008

Я не уверен, о чем ты говоришь. Вы ищете библиотеку шаблонов для php? Их много, и хотя модно ненавидеть Smarty (как и модно ненавидеть сам php), это отличная библиотека.

Вы спрашиваете, почему «все» смешивают HTML в своем PHP-коде? Ответ в том, что это делают только начинающие и идиоты. Каждый, кто имеет опыт работы с php, использует шаблонизатор.

Если вы спрашиваете, почему никто не добавляет каждую html-таблицу в код, как в вашем примере, это очевидно: потому что это кошмар обслуживания. Собираетесь ли вы дать свой код дизайнеру и пожелать ему удачи в этом? Собираетесь ли вы вручную конвертировать каждую html-страницу в страницы и страницы кода?

1 голос
/ 04 ноября 2008

Вопрос 261338 имеет некоторую колинеральность с этим, но мой ответ там был больше нацелен на php людей, которые плохо знакомы со всей этой программой "разделение проблем? Что это?" люди. (извините php люди, во многом это так)

Вы могли бы быть хорошим игроком на perl и использовать perl для создания html шаблонного дерьма, загружаемого в php, я все еще новичок в perl, но php пахнет, и я использовал его слишком долго, наверняка есть чтобы был способ написать сайт на Perl, который работает на PHP.

В-третьих, я хотел бы увидеть что-то, что делает аугментативную замену вне переменных.

Вроде как в стиле jQuery, но без раздувания, java (носорога) или всего веб-браузера.

$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 /, который по-настоящему разделяет дизайн и логику, все другие шаблонные вещи просто рекурсивно уменьшают языки программирования)

Дополнительная классная часть здесь:

  1. Не нужно сантизировать html, его DOM AWARE!
  2. Нет необходимости в странной специальной разметке шаблона, которая отстой и не будет работать в 90% редакторов и не может быть проверена сама по себе, не пролив на нее курицу.
1 голос
/ 04 ноября 2008

PHP - это язык шаблонов. поэтому естественно, что все поклонники PHP используют шаблонный дизайн.

есть некоторые библиотеки LISP, которые делают то, что вы положили туда. ИМХО, это большое отключение, когда я подхожу к языкам LISP.

0 голосов
/ 03 октября 2009

Я разработал облегченный файл, близкий к металлическому тегу lib, по многим из тех же причин, сохранив тот вкус, который был при использовании lisp для генерации HTML.

Обзор / пример кода здесь xilla_tags

0 голосов
/ 28 мая 2009

Я использую подход xml, xsl для разработки своих форм, используя один шаблон xls для визуализации любой формы, которую я использую на своем портале. Вначале было немного трудно найти правильный формат файла xls, но после того, как это было сделано, было очень легко визуализировать мои формы. В php мне просто нужно создать объект XML и отобразить его.

Очевидно, что будут «особые» вещи, которые я не хочу рендерить с помощью xls, в этом случае я отрисовываю их обычным способом.

Я не люблю много смешивать с php-кодом, поэтому я разработал эти библиотеки ...

...