bem-site / bem-forum-content-ru

Content BEM forum for Russian speak users
MIT License
56 stars 6 forks source link

BH PHP #122

Open qfox opened 9 years ago

qfox commented 9 years ago

Кончились дни, когда вам нужно делать проксирование или запускать несчастную ноду для сборки страничек. Теперь это можно делать прямо в пхпшечке!

Пакет bem/bh

Делается это посредством 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, если найдете чего — чирканите пару строчек. Спасибо ;-)

apsavin commented 9 years ago

На самом деле, такие дни кончились бы для любителей php, если бы появился BEM-шаблонизатор, который бы компилировался как в js, так и в php. А так - что делать, если что-то понадобится (а понадобится обязательно) отрендерить на клиенте?

veged commented 9 years ago

@apsavin да, это не поможет на клиенте — про это надо будет отдельно что-то думать

но ещё замечу, что я часто вижу, как люди хотят рендерить на клиенте то, что в принципе можно было бы и с сервера присылать в виде html

veged commented 9 years ago

@zxqfox отлично!

про шаблоны в bem-core и bem-components немного сложнее, т.к. кроме первоначальной версии нужно понимать как мы будем поддерживать их в будущем — нужно добавить инфраструктуру по запуску и тестированию их результата на равне с bemhtml и bh

tenorok commented 9 years ago

Круто! Спасибо тебе. БЭМ-технологии становятся доступнее с каждым днём :-)

qfox commented 9 years ago

@veged Вообще, если сравнить шаблоны между собой, то там регулярками можно портировать ;-). Еще можно в Ctx или в BH унести все хелперы, типа Array.fn.map и прочих и работать через них, их реализации для каждой платформы будут свои. Но вообще @tadatuta говорит, что там 15 минут тесты запилить ;-)

@apsavin Транспилер нужен, наверное. Но это следующий шаг ;-) Пока этого шага не сделано — дублировать на bemhtml или bh.js нужное для клиента. Это не очень сложно.

blond commented 9 years ago

Но это следующий шаг ;-)

@zxqfox, проблема в том, что потом код на php не выпилить без поломки, т.к. пользователи будут писать свои шаблоны на php. Может сразу попробуем сделать совсем хорошо?

qfox commented 9 years ago

@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 метод — переименуем во что-то более логичное.

Ощим, с транспилером не так все просто ;-) Но и не очень сложно.

qfox commented 9 years ago

Ощем, синхронизировал исходники и тесты с 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 commented 9 years ago

тесты на блоки заработали, осталось причесать код и завернуть в пакет

qfox commented 9 years ago

@tadatuta Ай маладца!

voischev commented 9 years ago

Чего-то много кто хотел что-то подобного, но как то мало людей радуется (

tadatuta commented 9 years ago

@voischev предположу, что php-разработчики не подписаны на апдейты нашего форума ;) мы допилим, опубликуем на bem.info и после этого сможем порекламировать пошире.

ilyar commented 9 years ago

@zxqfox отлично!

@voischev @tadatuta предположу что проблема не в том что php-разработчики не подписаны. Не было времени оценить php-bem-bh, радоваться пока не понятно чему, надо разобраться и протестировать. Если использовать это решение, будет необходимость поддерживать реализацию блока в двух технологиях.

@zxqfox сравнивал эксперименты с php-v8js и php-bem-bh?

qfox commented 9 years ago

@ilyar пока v8js запускается, bh-php уже успевает сдохнуть ;-) Не устану говорить: создание контекста в v8js — очень дорогая операция, в пхп — дешевая, пхп заточен на то, чтобы быстро стартовать и дохнуть, v8 заточен, чтобы быстро работать. На самом деле кейсов для продакшна использовать v8js под пхп нет, потому что есть nodejs, и php+v8js не нужен. И получается, что у пакета v8js под php в целом крайне мало потребителей.

tadatuta commented 9 years ago

@ilyar

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

Это справедливо для случая, когда шаблоны нужны одновременно и на клиенте и на сервере и при условии, что они еще не реализованы в двух технологиях (@zxqfox написал шаблоны для всех блоков из bem-core и bem-components, так что самые нужные штуки уже есть).

qfox commented 9 years ago

Как раз хотел отписать, что шаблоны bem-core вроде бы уже проходят тесты (но покрытие там не 100%), а в bem-components 4 валятся (2 select, 2 dropdown):

  96 passing (2s)
  4 failing

Осталось сделать нормальных технологий и поправить эти несчастные select и dropdown.

ilyar commented 9 years ago

@zxqfox спасибо за пояснение, будет ли развиваться мысль @apsavin появился BEM-шаблонизатор, который бы компилировался как в js, так и в php например генерировать bh.php на основе bh.js?

@tadatuta я как раз говорю о случае когда шаблоны нужны одновременно и на клиенте и на сервере при условии что написаны шаблоны для всех блоков из bem-core и bem-components

qfox commented 9 years ago

@ilyar Нужен ресерч, а это время и желание, у меня есть желание, но со временем беда. Но это реально. Я уже отписал Андрею какие там есть тонкие моменты. И думаю, что путем создания нескольких хелперов можно будет упростить этот транспилер (т.е. он будет быстрый) и писать шаблоны единожды в js синтаксисе.

В пределе появится возможность разрабатывать такие пакеты (движок шаблонизатора + транспилер из js) под любые платформы.

qfox commented 9 years ago

Итого:

В общем, все есть, поздравляю ;-)

qfox commented 9 years ago

@veged инфраструктура есть, посмотрел шаблоны в пхп? сильно сложно?

frimen commented 9 years ago

Всем привет. Очень хорошо что Вы тут делаете. Мы как раз реши попробовать бэм технологию с php. Вот бы ещё инструкцию подробную что берем, как подключаем, где подключаем. Мы совсем недавно начали пробовать разбираться с бэм технологией в общем, и как следствие совсем ничего не понять. Какие то команды вводят, что-то делается на примерах, а вот для совсем новичком не понятно. Расскажите пожалуйста, или может уже есть где инструкция.

tadatuta commented 9 years ago

@frimen вот здесь @zxqfox подробнее расписал что есть. В самих пакетах есть кое-какая информация. А начинать стоит с https://github.com/bem/project-stub/tree/php-bem-bh