Open kompolom opened 8 years ago
Про два набора bh-php (один для тегов и стилей, второй для построения дерева) говорить стоит?
@zxqfox ты имеешь ввиду шаблоны или 2 инстанса $BH
?
2 инстанса BH и 2 технологии: bh.php и, условно, bh-tree.php (или bh.tree.php), первый набор из bh.php — из BEMJSON собирает HTML чрез $bh->apply(…)
, второй — как BEMTREE: прокидывает данные (через $ctx->tParam('data', $data)
например, или еще как-то) и строит BEMJSON через $bht->processBemjson(['block' => 'root', 'data' => $data])
.
Вторую можно даже на отдельный уровень частично скинуть для специальных блоков под лайаут: l-admin
или типа того.
А какие будут ограничения по сравнению с обычным bemtree? Когда bemtree был асинхронным и блоки могли ходить за данными. Разница была очевидна. Сейчас все +- одинаково будет работать или я что то упускаю? С bemtree очень мало практики было...
@kompolom учитывая, что в пхп походы за данными синхронные — разницы не было даже с асинхронным bemtree. ;-)
А какие будут ограничения по сравнению с обычным bemtree?
Разница примерно такая же, как между BH и BEMHTML.
В BEMTREE есть произвольный .match(function() {})
, в BH только по блокам/элементам/модификаторам (решается через разводной матчер, который проставляет модификаторы, на которые отдельные матчеры, и через beforeEach — аналог block('*')
).
Еще нет подпредикатов на .tag
, .bem
, .cls
, .content
, etc. Решается через общий матчер, аналог моды .def()
.
@zxqfox $bht->processBemjson()
вернет строку как я понимаю?
@kompolom нет, оно вернет bemjson. в BH (и BH.PHP) сборка HTML-строки вынесена в отдельную стадию, и это даёт возможность отложить сборку.
Например, можно запускать bh.processBemjson
, а после этого результат вставлять в posthtml, потому что там аналогичное дерево, которое, правда, не знает про block/elem/mix/etc, но знает про tag, class, attrs ;-).
И уже после выполнять bh.toHtml.
@zxqfox я имею ввиду с точки зрения php это будет строка или массив?
Толи ArrayObject, толи массив из строк и \BEM\Json
объектов.
@zxqfox тоесть двойного преобразования массив->строка->массив->html не будет?
Будет такое:
Данные →($bht->processBemjson)→ свернутый ArrayObject<BEM\Json>
→($bh->processBemjson)→ Отшаблонизированный ArrayObject<BEM\Json>
→($bh->toHtml)→ HTML-строка.
Данные это ассоц. массив с входными данными типа ['block' => 'root', 'user' => $user, 'data' => $data]
.
Свернутый BEMJSON это то, что обычно лежит в .bemjson.js в бандле.
Отшаблонизированный или развернутый BEMJSON это промежуточное вьюориентированное дерево с расставленными tag, attrs, mix, class, и прочим согласно шаблонам, но еще не сконвертированное в строку.
Итоговая HTML-строка — обычный результат, который мы обычно видим в .html файле в бандле.
Каждый этап можно отдебажить, вроде бы, не должно быть проблем в реализации в любой CMS.
@zxqfox а как в первый раз у нас получается свернутый bemjson, а когда ту же функцию еще раз применяем развернутый?
Свернутый-развернутый — это наши условности. processBemjson просто применяет шаблоны, в первом случае это то, что мы положим в $bht, во втором — в $bh (обычные шаблоны).
И мы уславливаемся, что в первом случае мы строим дерево и делаем всякую магию (из глобала берем данные, например), чтобы построить дерево, а во втором — превращаем в HTML ($bh->apply
это $bh->toHtml($bh->processBemjson($bemjson))
).
upd: Ну и в первом случае наши шаблоны разворачивают дерево (мы их специально так пишем), а во втором — используем наши обычные шаблоны.
@zxqfox Спасибо! пошел пробовать..
Уже как то заходила речь о там что было бы круто выполнять bemtree в php. Это бы позволило сильно упростить написание шаблонов и код почище бы стал.
Можете что-то посоветовать, как организовать шаблонизацию не имея bemtree и не усложняя шаблоны блоков?