Комментарии 44
Я только за написание велосипедов, но в данном случае это избыточно для статьи на хабре, хотя и полезно лично для вас, как учебный проект.
MelonPHP — не шаблонизатор. Он создавался для комфортного написания UI на PHP и вдохновлялся флаттером. Он похож по стилю написания ui на такие фреймворки как: SwiftUI, Jetpack Compose, MAUI. Я не думаю что он является велосипедом, так как на момент его написания я подобных фреймворков на яп пхп не видел.
на момент его написания я подобных фреймворков на яп пхп не видел
Быть может, это потому, что написать UI на серверном языке невозможно? Для UI в вебе, как ни крути, не обойтись без HTML/CSS/Js. А чем вы эту статику будете генерировать — руками в блокноте или в php-коде — ни на что не влияет.
Да, еще можете, к примеру, глянуть Yii — там есть компоненты, отдающие готовый html/js.
Либо, к примеру, InertiaJs — чем не генератор HTML-кода?
Познакомься с функцией sprintf
Генерировать код на стороне сервера… Лет 15 назад норм было.
Даже, если допустить, что такой подход к генерации html и нужен (я не представляю для чего) то никто не будет вот это все использовать. Все эти классы и прочее.
Большое спасибо за sprintf! Я изначально планировал предгенерироать html, но отказался, так как хотел делать rebuild дерева с помощью ajax. Сейчас насколько я вижу модно юзать свои движки для рендеринга (например skia), но у меня бы не хватило на это времени (изначально была цель доделать его до конца семестра, что я и смог сделать). Интересно было узнать что 15 лет назад было модно юзать кодогенерацию html. Так же этот проект скорее — концепт/идея и я не вижу смысла везти его в продакшн.
Даже была одна либа с названием template. Вообще древняя. Разделение кода и html. Ибо в то время js фреймворки только наращивал экспансию. Возьми любую cms и там будет то о чем ты пишешь.
Но проблема этих кодогенераторов ы том, что в результате благие начинания разбиваются о безалаберность писателей. Проще вклинить кусок html в код… Малкнький же кусочек.
Сначала тут, потом там сям… Через год получаем портянку говнокода.
Человеческий фактор.
Я согласен с вами. Я тут ещё подумал. Веб усложняется. Сначала если посмотреть глобально html, потом css, дальше js в вебе. Я думаю что в будущем всеравно появится централизация в вебе, так как чтобы написать простой проект, тебе (нужно быть жонглером?) нужно юзать слишком много не оправданно лишнего.
Я, возможно, что-то просмотрел, но нигде не нашёл HTML-экранирования никакого текста.
Я немного не понял вопроса, но если вы про генерацию чистых html тегов, то этим заниматься класс Tag. Могу скинуть ссылку на него.
Нет, я про то, что строка Привет, <username>
должна отдаваться как Привет, <username>
.
Я знал на момент написания фреймворка о шаблонизаторах, но я решил сделать эксперемент. Я хотел попробовать создать что-то наподобие flutter, где в данной ситуации вы могли бы написать сайт/программу используя только один язык — php. Кроме того я пытался сделать это удобным. Кодогенкрация в html /css была выбрана для быстроты написания, чтобы проверить как будет смотреться и писаться код по тем идеям которые я позаимстовал у флаттера и добавил сам. Это скорее концепт написания UI на пхп и я сделал ошибку в статье сосредоточив внимание на кодогенрации.
Вместо чистого и лаконичного css / html получилось нагромождение php примерно втрое большего объёма.
Более того, посмотрите на Jade — это псевдо-код, очень удобный для генерации, который собирается в HTML, и посмотрите на LESS — тоже отличная штука для CSS.
Печально что вам не понравилась идея написания UI на php.
В целом по количеству кода тут никак меньше не сделать (если про html генерацию), по крайней мере у меня сейчас идей нет.
Понимаете, программно заменять такую гибкую штуку как HTML/CSS имеет смысл только в двух случаях:
- когда нужна последовательная генерация в цикле, вроде рядов таблицы
- когда нужно использование готовых компонентов/виджетов
Вы же пытаетесь сделать какой-то универсальный транслятор, который кроме вас вряд ли кто-то решится использовать — хотя бы потому, что вы смешали дизайн с программированием.
Если на сайте решат сделать кнопки красными, а не синими, или задать не цвет, а смысл (кнопка цвета Submit Secondary), всё это будет жуткой головной болью. Да просто найти по готовому CSS обратно где этот CSS в коде генерится — уже весёлая задачка!
Я уж не говорю про autocomplete и прочие радости нормальной разработки. А вы вообще все свойства собираетесь загнать в константы? А поля 'data-...' будут?
Ну и писать всё это для того, чтобы вывести синюю кнопку с круглыми краями?
<button style='width: auto; padding: 4px 10px; color: white; border-radius: 4px;background-color: blue;'>Press</button>
Button::Create()
->ThemeParameter(Width, Auto)
->ThemeParameter(Padding, [Px(4), Px(10)])
->ThemeParameter(BackgroundColor, Blue)
->ThemeParameter(Color, White)
->ThemeParameter(BorderRadius, Px(4))
->Text("Press")
Дело в том, что HTML/CSS уже и есть лучший инструмент для создания такой кнопки. Единственное, чего там не хватает — процедурной генерации и виджетов.
Хороший вопрос. Как вы и написали есть большое влияние шарпов на код, но как такового основного языка у меня нет. Мне нравится шарпы, плюсы, dart, ts, rust, swift.
Помимо этого, скорей всего лучше воспользоваться doc.nette.org/en/3.0/php-generator =)
Спасибо, я понял в чем проблема
Проблемы как таковой нет, каждый пишет код как хочет и у каждого решения свои пользователи.
Если бы большинство из сообщества пыха были со вторым стеком java или шарп, вероятно текущие стандарты и подходы были бы ближе к вашему коду.
Я бы с радостью "звезданул" ваше решение, если вдруг вы решите когда-то отрефачить его под PSR и заюзать указанную библиотеку как основу)
А минуса, это фанатики джуниоры ставят)
Что касается минусов, то их скорее ставят консерваторы, или люди привыкшие к одному стеку технологий, и не признающие другие стеки.
Нет, минусы ставят люди, знакомые с давно известным, правильным решением.
habr.com/ru/post/511544/#comment_21861056
habr.com/ru/post/511544/#comment_21862526
habr.com/ru/post/511544/#comment_21863082
habr.com/ru/post/511544/#comment_21867796
Я думал об этом, но не стал исправлять. Решил оставить оригинальный код.
автор хочет сказать, что отделение фронта от бека, мух от котлет это не удобно. удобнее 10 уровневые вложения десятков классов, и попробуй не ошибиться в скобочке…
больше похоже на пост-сарказм
Выдумывание своих велосипедов с квадратными колесами это не плохо так то на этапе обучения.
«10 уровневые вложения десятков классов». Код удобно разделять на компоненты. А само дерево если грамотно писать (и делить), то вы не столкнетесь с проблемой вложенности.
Проблему связанная ", и попробуй не ошибиться в скобочке…" не является серьезной. В наше время есть IntelliSense и кода форматеры (хз как это пишется правильно).
Автор, пили есчо. Во всяком случае, я бы таким попользовался.
Как я писал кодогенератор на PHP и что из этого получилось