Подскажите как использовать php-скрипты при сборке страницы? Я только начал вникать в БЭМ и не въезжаю где писать серверную часть на php. В bemhtml описываю шаблон, в bemjson структуру блоков... где писать php-скрипты?
Зависит от. Варианты:
php
вместоhtml
и его инклюдить из приложения в качестве темы.если вы хотите задать вопрос команде, то ставьте еще и метку asktheteam ;) спасибо!
@tadatuta по поводу 3 — этот вариант будет работать сильно медленнее, пытался делать https://github.com/zxqfox/php-bem но очень давно остановился, потому что это ну очень медленный вариант. Из-за архитектуры самого php, которое само поднимает контекст и достаточно быстро, ему на каждый запрос придется поднимать еще и контекст js, который поднимается сильно медленнее, это уже особенности архитектуры v8.
Вариант 4 — ну такой, требует много доп. условностей, мне кажется, что мало кому подойдет. Хотя и возможен, конечно. Сложно представить, как генерировать такой код, чтобы он реализовывал все то, что реализовано в bem-xjst. Можно, конечно, собирать из js-ast php код, но это такое, не очень тривиальное.
В общем, самый нормальный вариант 2 — на пхп оставить бекенд с апи, а со всем view-ориентированным работать в node.js, в т.ч. собирать bemjson с помощью bemtree, и html через bemhtml. А тестировать отдельно на enb/bem server.
Есть и вариант попроще, он требует реализации сборки блоков в рантайме и очень сильно зависит от проекта. У нас есть наработки, но они не готовы для выкладки в опенсорс — много зависит от cms, под которую писаны. Но все на пхп, конечно. При чем, часть логики для всяких ручек-сервисов мы уже перенесли на ноду, php совершенно не заточен под это, а нода легко одним процессом (и процессором) все запросы раскидывает. И пхп только собирает блоки в статические страницы без пользовательских данных и оно может кешироваться без проблем на nginx. Но кому-то это может и не нужно, это у нас старый проект с кучей всего, а новый проект можно и без этих лишних телодвижений писать → вариант 1.
@octavnsk А вам какие скрипты нужны на php? Стоит ли это вообще свеч?
Тоже думаю над этим. Перейти полностью на БЭМ не получается т.к. Проекты мелкие, однотипные и хостятся на разделяемом LAMP хостинге, как правило. Соответственно, никто не даст поставить ноду. Есть 2 мысли.
В идеале, было бы здорово иметь возможность делать блоки в технологии php так же как и в .node.js
@kompolom (1) вполне норм вариант, тоже думаю в эту сторону. Но собранные бандлы под ноду надежнее, конечно. Можно попробовать придумать, как из JS AST генерировать php код. Есть там некоторые ограничения, но начиная с 5.3, где появились пусть своеобразные, но колбеки, запилить генератор реально. Есть небольшие непонятки, что делать с хитрым js кодом. Можно, например, писать отдельную моду contentPhp и оборачивать содержимое в (function () { /! / }), правда комменты вырезаются, а эти при сборке нужно будет уметь оставлять. Либо еще как-то. Либо же полностью на пхп сборку переписать, что вообще не интересно делать.
Пока 5 вариант...
А вообще хочется "нативно" из php (yii) иметь. Для RoR решение, вроде как, уже есть.
@belozyorcev Наш дорогой @zxqfox портировал BH на PHP (а заодно и все шаблоны из bem-core/bem-components), так что теперь можно нативно.