Ссылки по теме:
- Оригинальный пост;
- Сам движок bh-php - порт bem/bh на пхп;
- Технология для enb: enb-bh-php;
- Технологию для тулзов: .bem/techs/bh.php.js (спасибо @tadatuta и @kompolom);
- project-stub с bh-php;
Тест сборки на project-stub.
Roadmap
- Научится генерировать вменяемый
bh.php
код изbh.js
шаблонов, еслиbh.php
отсутствует, аbh.js
в наличии, чтобы уменьшить кол-во работы при поддержке (тулзы не смогут?); - Показать, как можно использовать в WP, Drupal, Joomla(?), etc.(?);
- Упростить API объекта BEMContext и другие мелочи (см. https://github.com/bem/bh-php/issues);
- Причесать технологии, и все остальное по возможности;
- Ну и: Добавить шаблоны в библиотеки, тэги на форум, документацию на bem.info, etc.
Шаблоны для bem-core и bem-components
Делитесь историями успеха, не стесняйтесь!
upd: поправил ссылки — перенсли проект в группу bem
upd: еще поправил ссылки — веточки протухли, вместо PR получились отдельные библиотеки с шаблонами для PHP
@zxqfox "Показать, как можно использовать" лучше прямо сюда писать, или как то отдельно оформить?
@kompolom Можно в этом треде собрать максимум информации, а мы потом ее причешем и опубликуем на bem.info
BH.php в Wordpress
Сразу скажу, что изначально сайт был сделан без БЭМ. В настоящий момент, я переношу Wordpress шаблоны на БЭМ. Получается, что часть кода написана на html, а часть генерируется BH.
структкра темы:
Директория bem содержит библиотеки (bem-core, bem-components), и следующие уровни переопределения:
Каждый бандл, в моем случае, представляет тип страницы. Например, есть бандлы
index
иsingle
. Тут, в общем, все стандартно для методологии:Интеграция в wordpress
Файл
functions.php
Выбираем уровень переопределения.
Тут все зависит от потребностей проекта, условие можно написать любое.
Задаем url для бандлов. Так как статика может лежать на другом сервере, добавим условие.
Задаем путь до бандлов на сервере. Отличается от url тем, что предназначен для php include.
Выбираем бандл.
Подключаем bh шаблон и статику:
Напомню, что проект в переходном состоянии, layout страницы пока еще на html. Подключение js и css реализовано стандартными средствами Wordpress. За это отвечает следующая функция:
Пользуемся
Теперь, когда шаблоны загружены а скрипты и стили подключены на страницу, можно пользоваться шаблонизатором. Разметку блока можно сделать, как в шаблоне Wordpress (написать bemjson-like структуру) так и в bh.php шаблоне. Например, loop.php не задает структуру поста, а отправляет ее шаблонизатору:
Что самое приятное, наличие шаблонизатора на заставляет его использовать на каждый чих, что позволяет писать новый код используя BH, и не торопясь переписывать старый.
@kompolom Спасибо большое за рассказ! Будет очень круто, если в open source появится готовая тема для WP с bem-components ;)
Идея интересная. Попробуем
@kompolom Рассказ прям за душу берет. Молодость вспоминается ;-) У меня сейчас подход такой же, только вместо вордпресса внутренний велосипед. Нет, правда, глобальных переменных, но в остальном все то же ;-) И мы все думаем как лучше формировать bemjson перед apply.
Спасибо за рассказ :+1:
Для wp, глобальные переменные - норма, мне кажется. ))
https://github.com/bem/bem-core/issues/732 — решили, что нужно отдельные репозитории делать с шаблонами для bh.php и там рулить сборкой.
По факту, нужно скопировать всю сборку, взять оба PR, вырезать оттуда bh, bemhtml, оставить только bh.php, и настроить всякие тревисы.
/cc @andrewblond Подскажи, как это лучше сделать, чтобы не париться с синхронизацией сборок?
Сложный вопрос. Мы сейчас между
bem-core
иbem-components
руками синхронизируем.@andrewblond Заодно и между ними синхронизируем ;-)
А как у него с производительностью? Или лучше всё ручками писать при создании шаблонов?
@belozyorcev Можно стянуть PR с bem-components и запустить tmpl-specs с выводом времени работы mocha. Тупо сравнить с js реализациями ;) Разница там, насколько я помню, не очень большая.
@zxqfox задача стоит в использовании на Yii в сравнении со стандартным шаблонизатором.
@belozyorcev Бенчмарки были бы весьма кстати, оптимизировать код готов, там есть куда, но сравнивать не с чем.
Тут вот на хабре пользователь lepism добавил свою статью http://habrahabr.ru/post/249629/ про то, как он учил php и писал свой велосипед для работы с БЭМ, может кому интересно будет
@tavriaforever ох… напомнило мне это наш велосипед на PHP. Все бы не плохо, но когда контроллеры начали напоминать BEMJSON стало понятно что мы не туда движемся :) Такому конечно есть место быть
@tavriaforever смущают следующее название элементов https://github.com/lepism/BemPHP/tree/master/BemPHP/blocks/b-logger/b-logger__button/b-logger__button__arrow_up
@belozyorcev А вы что используете в Yii? Twig?
@zxqfox нет. Пока только нативный шаблонизатор. Была мысль подобрать что-то другое (и время от времени появляется), но пока так.
@belozyorcev Тогда вам не нужны бенчмарки — PHP код в любом случае будет быстрее, чем любые шаблонизаторы.
@zxqfox это да. Сам сейчас с блоками пока работаю хелпером, для генерации классов. Остальное ручками. Классы генерирую BEM::cls('block', array('mod1', 'mod2', 'mod3')) на выходе получаю "blok block_mod1 block_mod2 block_mod3"
@belozyorcev Массивы можно проще:
Еще можно не
class
, аnamespace
и делать так:Но это с 5.6+
@zxqfox это PHP 5.2 нужно сказать
@belozyorcev bh-php 5.4+ требует ;-)
@zxqfox это да. Нужно будет начальство на 5.4 наставить, т.к. пора бы уже
@belozyorcev Да уж года 3 как ;-) http://php.net/ChangeLog-5.php#5.2.17
Всем привет. Очень хорошо что Вы тут делаете. Мы как раз реши попробовать бэм технологию с php. Вот бы ещё инструкцию подробную что берем, как подключаем, где подключаем. Мы совсем недавно начали пробовать разбираться с бэм технологией в общем, и как следствие совсем ничего не понять. Какие то команды вводят, что-то делается на примерах, а вот для совсем новичком не понятно. Расскажите пожалуйста, или может уже есть где инструкция.
@frimen Давайте по порядку, что вы делаете, и что не получается.
@kompolom :+1:
А еще есть project-stub, который вам генерирует готовые php файлы для использования. Может сойдет вместо инструкции https://github.com/bem/project-stub/tree/php-bem-bh — предложение ограничено, эту кису хотят зарезать!
Наткнулись на технологию бэм. Все действительно гениально и просто. Давно пытались при разработке своих проектов приводить к такой структуре. Решили создавать свои новые проекты в этой технологии. А так как работали ранее в основном с php, то перейти полностью на другой язык не так и просто. Узнали что есть ветка php в технологии бэм. Пробовали воспользоваться, не вышло. То не ставится, то еще что нибудь. Если не составит труда, напишите пожалуйста подробную инструкцию по начальной установке и дальнейшему запуску и работе. Для нас новичков это будет полезная информация, т.к. таких инструкций по ветке php подробных нет.