Кончились дни, когда вам нужно делать проксирование или запускать несчастную ноду для сборки страничек. Теперь это можно делать прямо в пхпшечке!
Делается это посредством bh.php шаблонов (почти 100% клон bh.js
). Вы скажите, но кому он нужен? Ведь в bem-core и bem-components нет шаблонов для блоков? Не отчаивайтесь — PR уже стоят! И в bem-components тоже.
Огромное спасибо @tadatuda за настройку project-stub, где он создал технологий и подключил нужные веточки bem-core и bem-components, да и вообще за идеи и поддержку — project-stub + php-bem-bh. Для запуска дополнительно нужно будет поставить сам пакет в vendor/php-bem-bh
(исторически так вышло, что тестовый стаб работает с php-bem-bh
, когда как через composer пакет ставится в vendor/bem/bh
).
Здесь можно собрать index.bh.php, который при запуске выдаст переменную $bh с готовый к использованию шаблонизатором. Оптимизаций по сборке блоков в один файл пока не делалось, но если вам очень хочется, то можно допилить технологии, чтобы сборка была разной в зависимости от откружения.
От комьюнити хочется больше идей, чтобы выработать какое-то универсальное решение. Кроме того, шаблоны только 2 дня назад увидели свет и багов там немеряно, особенно в bem-components, если найдете чего — чирканите пару строчек. Спасибо ;-)
На самом деле, такие дни кончились бы для любителей php, если бы появился BEM-шаблонизатор, который бы компилировался как в js, так и в php. А так - что делать, если что-то понадобится (а понадобится обязательно) отрендерить на клиенте?
@apsavin да, это не поможет на клиенте — про это надо будет отдельно что-то думать
но ещё замечу, что я часто вижу, как люди хотят рендерить на клиенте то, что в принципе можно было бы и с сервера присылать в виде html
@zxqfox отлично!
про шаблоны в bem-core и bem-components немного сложнее, т.к. кроме первоначальной версии нужно понимать как мы будем поддерживать их в будущем — нужно добавить инфраструктуру по запуску и тестированию их результата на равне с bemhtml и bh
Круто! Спасибо тебе. БЭМ-технологии становятся доступнее с каждым днём :-)
@veged Вообще, если сравнить шаблоны между собой, то там регулярками можно портировать ;-). Еще можно в Ctx или в BH унести все хелперы, типа Array.fn.map и прочих и работать через них, их реализации для каждой платформы будут свои. Но вообще @tadatuta говорит, что там 15 минут тесты запилить ;-)
@apsavin Транспилер нужен, наверное. Но это следующий шаг ;-) Пока этого шага не сделано — дублировать на bemhtml или bh.js нужное для клиента. Это не очень сложно.
@zxqfox, проблема в том, что потом код на php не выпилить без поломки, т.к. пользователи будут писать свои шаблоны на php. Может сразу попробуем сделать совсем хорошо?
@andrewblond Я считаю, что можно собирать bh.php на лету при их отсутствии. В большинстве случаев даже эсприму подключать не обязательно и ast строить. Чтобы сделать все хорошо — надо как минимум в базовых библиотеках заменить Array.isArray → ctx.isArray, [].map → ctx.map([]), и т.д., либо менять подход (на какой?).
Но это фиксы в bh, фиксы в шаблоны в библиотеках (см. шаблоны select, radio-group), и в некоторых местах в нестандартных ключах описываются блоки — для пхп это получаются массивы, они не передаются по ссылке, доступ к свойствам отличается от объектов (
$x->key
vs$x['key']
), и их для простоты лучше переводить в объекты. Т.е. еще какой-то хелпер, чтобы подготавливать данные для работы. В bh.js оно просто будет возвращать результат as is. Я назвал его$ctx->phpize
, но если это будет общий для bh метод — переименуем во что-то более логичное.Ощим, с транспилером не так все просто ;-) Но и не очень сложно.
Ощем, синхронизировал исходники и тесты с 3.2.2, напилил небольшое ридми, переименовал пакет в bem/bh, версию поставил как у материнского пакета, чтобы не было проблем. Вроде бы, сам пакет уже ready to use.
Но без библиотек он как манекен без портного. Надо научиться запускать php и включить отрисовку компонентов в bem-core и bem-components. В идеале, еще хочется по запросу
localhost:8080/desktop.bundles/index/index.php
получать в ответ html, срендеренный через php, т.е. это еще технологии для bem-tools и enb.Еще раз спасибо @tadatuta за содействие.
тесты на блоки заработали, осталось причесать код и завернуть в пакет
@tadatuta Ай маладца!
Чего-то много кто хотел что-то подобного, но как то мало людей радуется (
@voischev предположу, что php-разработчики не подписаны на апдейты нашего форума ;) мы допилим, опубликуем на bem.info и после этого сможем порекламировать пошире.
@zxqfox отлично!
@voischev @tadatuta предположу что проблема не в том что php-разработчики не подписаны. Не было времени оценить php-bem-bh, радоваться пока не понятно чему, надо разобраться и протестировать. Если использовать это решение, будет необходимость поддерживать реализацию блока в двух технологиях.
@zxqfox сравнивал эксперименты с php-v8js и php-bem-bh?
@ilyar пока v8js запускается, bh-php уже успевает сдохнуть ;-) Не устану говорить: создание контекста в v8js — очень дорогая операция, в пхп — дешевая, пхп заточен на то, чтобы быстро стартовать и дохнуть, v8 заточен, чтобы быстро работать. На самом деле кейсов для продакшна использовать v8js под пхп нет, потому что есть nodejs, и php+v8js не нужен. И получается, что у пакета v8js под php в целом крайне мало потребителей.
@ilyar
Это справедливо для случая, когда шаблоны нужны одновременно и на клиенте и на сервере и при условии, что они еще не реализованы в двух технологиях (@zxqfox написал шаблоны для всех блоков из
bem-core
иbem-components
, так что самые нужные штуки уже есть).Как раз хотел отписать, что шаблоны bem-core вроде бы уже проходят тесты (но покрытие там не 100%), а в bem-components 4 валятся (2 select, 2 dropdown):
Осталось сделать нормальных технологий и поправить эти несчастные select и dropdown.
@zxqfox спасибо за пояснение, будет ли развиваться мысль @apsavin
появился BEM-шаблонизатор, который бы компилировался как в js, так и в php
например генерироватьbh.php
на основеbh.js
?@tadatuta я как раз говорю о случае когда шаблоны нужны одновременно и на клиенте и на сервере при условии что написаны шаблоны для всех блоков из
bem-core
иbem-components
@ilyar Нужен ресерч, а это время и желание, у меня есть желание, но со временем беда. Но это реально. Я уже отписал Андрею какие там есть тонкие моменты. И думаю, что путем создания нескольких хелперов можно будет упростить этот транспилер (т.е. он будет быстрый) и писать шаблоны единожды в js синтаксисе.
В пределе появится возможность разрабатывать такие пакеты (движок шаблонизатора + транспилер из js) под любые платформы.
Итого:
В общем, все есть, поздравляю ;-)
@veged инфраструктура есть, посмотрел шаблоны в пхп? сильно сложно?
Всем привет. Очень хорошо что Вы тут делаете. Мы как раз реши попробовать бэм технологию с php. Вот бы ещё инструкцию подробную что берем, как подключаем, где подключаем. Мы совсем недавно начали пробовать разбираться с бэм технологией в общем, и как следствие совсем ничего не понять. Какие то команды вводят, что-то делается на примерах, а вот для совсем новичком не понятно. Расскажите пожалуйста, или может уже есть где инструкция.
@frimen вот здесь @zxqfox подробнее расписал что есть. В самих пакетах есть кое-какая информация. А начинать стоит с https://github.com/bem/project-stub/tree/php-bem-bh