Здравствуйте. Извиняюсь, если писать вопросы начинающего сюда это спам. Подскажите, если не прав.
Начал разбираться с БЭМ библиотеками для PHP, имею знание о существовании библиотек =)
Мне удалось установить лишь первую библиотеку через composer(очень удобно), но если верно всё понимаю - ничего не будет работать как минимум без второй.
Вот тут в обсуждении мне подсказали, что есть библиотеки, используемые Node.js, а есть для PHP. Сам пока предпочитаю использовать голый PHP 5.6.
Второй и третьей библиотеки в composer не нашёл, в руководствах по использованию дано указание для установки использовать bower. Если верно понимаю, то composer это менеджер пакетов для PHP, а bower это менеджер пакетов для Node.js Возник диссонанс - зачем мне устанавливать что-то для PHP через bower? Наводит на мысль что делаю что-то неправильно. Вопрос может быть некорректным с высоты опыта опытных=), но хочу ликбеза.
По ссылке выложил свои действия по установке и пробе примеров указанных тут. Номер картинки - это шаг, номер действия. PHP Storm выругался на рисунках 4, 5 и 7, что удалось мне частично исправить на рисунках 8,9. Ну а результат сами видите.
Вопросы: 1) Какие библиотеки мне надо ещё установить и как не бояться bower, если он для работы с php тоже помогает? 2) Возможно это касается настроек самого PHP Storm, но по возможности хотелось бы знать, почему ваши примеры заставляют его ругаться?
Привет я не знаком с php, но bower - это менеджер пакетов для клиентского js. Для node.js есть npm. Может тебе поможет https://github.com/bem/project-stub/tree/php-bem-bh тут вроде должен собираться проект на bh-php.
@Yeti-or спасибо за пояснение с bower. Проект попробую, но похоже он по аналогии с версией для ноды сделан, так сказать всё сразу в одном пакете.
Мне хочется собрать подобный пакет самостоятельно из отдельных частей.Подожду @zxqfox, он обещал помочь)
Как раз, не спам. Для этого и нужен форум ;-)
Судя по скриншотам, почти все получилось. Не хватило только сделать echo.
echo $bh->apply(['block' => 'button']);
По вопросам:
Bower это менеджер пакетов для фронтенд библиотек. В частности, там есть bootstrap, jquery, lodash, mootools, и всякое другое. http://bower.io/search/?q=bem- Bower требует nodejs на машине разработчика. https://nodejs.org/en/ — если еще нет, то рекомендуется использовать LTS версию (4.3.2 на текущий момент) http://bower.io/#install-bower — устанавливаем сам Bower.
Но это не пакетный менеджер для Nodejs, у ноды есть npm ;-)
После этого у нас есть bower и мы можем устанавливать библиотеки с помощью него. По умолчанию он устанавливает в bower_components, но можно переопределить (что мы обычно и делаем): https://github.com/bem/project-stub/blob/bem-core/.bowerrc
По принципу работы bower очень похож на composer (в отличие от npm), только написан на nodejs и в нем в основном публикуются всякие js библиотеки для фронтенда. Использован был потому, что библиотеки bem-*-php требуют bem-core и bem-components, и зависимость было проще описать через bower.json.
Очевидно, он по каким-то причинам не смог правильно определить тип переменных. Если ему помочь, то он перестанет.
В частности, я увидел неточности в phpdoc пакета, которые phpstorm попарсил как смог — если напрягает, с удовольствием приму пулл реквест. Но что именно ему не понравилось, я пока не понял.
https://github.com/bem/bh-php/blob/master/src/BH.php#L162 https://github.com/bem/bh-php/blob/master/src/BH.php#L201
Если есть идеи как улучшить — было бы здорово это поправить.
Не стесняйся, спрашивай что плохо объяснил.
Спасибо @zxqfox, всё познавательно и доступно. С echo очень постыдную ошибку допустил).
К сожалению рекомендации смогу проверить только после праздников.
Попробую так же изучить вопрос phpdoc пакета. О pull говорить пока рано, тут люди про echo забывают))
Всем привет, сегодня вопрос - как используя bh-php подцепить javascript на страницу main.
Код страницы выложил сюда.
Мне нужно сделать alert при инициализации блока button и alert по клику на нему. Каким образом привязать js, если пользуюсь инструментами для php?
Снова большие надежды на @zxqfox и хороших людей)
@alexanderbondarchuk javascript особо нет разницы чем вы сгенерировали html.
@kompolom это само собой разумеется. Только у меня был конкретный вопрос с простой задачей - мне не понятно как решить её пользуясь только библиотекой bh/php. Хочется понять как делать правильно, а не быдлокодить свои велосипеды пользуясь готовыми решениями
@alexanderbondarchuk может я не понял задачу, но, если нужно отрендерить блок на клиенте, стоит использовать bh.js на клиенте, а bh.php на сервере.
@alexanderbondarchuk или сделать ручку на сервер, которая будет рендерить вам html и отдавть строкой
@kompolom возможно некорректно ставлю вопрос, т.к. совсем новичок в методологии.
В примере по ссылке выше я выложил файлы - это всё, что у меня сделано самостоятельно согласно найденным примером. Т.е. я разместил на странице блок
button
и описал его простейшие свойства с помощью bh шаблонизатора (если правильно понимаю тот инструмент, который использую).Далее моя задача - дать css описание данному блоку, а так же прикрутить поведение с помощью javascript (какое поведение нужно - написал выше). Как это сделать с помощью только bh/php я не понимаю - возможно мне надо ещё что-то установить?
Как сделать - особо не принципиально, но мне очень нравится идея методологии, когда для каждого блока создаётся папка, которая содержит описание в css, логика в js и т.д, а сборщик потом собирает из всего только нужное и генерирует файлы. Сделать бы с помощью PHP всё так же и понять как это подключить чтобы сборщик правильно всё собирал, когда таких блоков станет много.
@alexanderbondarchuk для описания поведения блока есть технология
browser.js
в которой можно описывать блоки, а также фреймворк i-bem.js@kompolom это известно. Сайт bem.info прочитал полностью, пример магазина с мобильными телефонами тоже делал. Всё что мне требуется на данный момент - помочь применить знания на практике на конкретном простейшем примере.
Так, видимо двигаюсь с мёртвой точки. У меня проект был без bem-core, без bem-core-php и никто из знатоков мне на это не указал =(
Что сделал: 1) В свой проект поочерёдно установил библиотеки bem-core и bem-core-php 2) Создал CSS и JS файлы для блока button, которые хочу привязать к самому блоку, находящемуся на странице main.php и main.bh.php 3) Закинул на диск скрины, чтобы вам было удобно посмотреть какая структура в итоге получилась
Вопросы - что я сделано не так? Как привязать описание и логику button к документу main.php?
@zxqfox Алексей, прошу прощения за навязчивого, есть мысли и время помочь?
@alexanderbondarchuk Сразу в первом скрине, у вас шаблоны в другом инстансе bh получились
в строке 4 инклуд вернет инстанс bh с шаблонами. Я обычно делаю так:
@kompolom то что вы написали у меня работает, только в другом виде. У меня вопрос исключительно с javascript связан.
Желание есть. Я только не очень понимаю чем я могу помочь.
Вам нужно собрать js и css блоков, и подключить их на странице. Например, используя блок https://ru.bem.info/libs/bem-core/v2.8.0/desktop/page/ из bem-core/bem-core-php (
bemjson
для них будет выглядеть одинаково).Для сборки можно использовать enb с необходимыми технологиями (это общие вопросы, не относящиеся напрямую к bh-php) — у вас собираются js и css файлы?
После их сборки надо будет пробросить в
bemjson
путь до них, как это делается в примере: https://github.com/bem/project-stub/blob/bem-core/desktop.bundles/index/index.bemjson.js#L5-L10В каком именно месте затык?
@zxqfox сегодня решил попробовать с пустого листа, появилась проблема - описал тут.
@zxqfox Алексей, сегодня решил попробовать пути по пути через project-stub.
1) Залил стандартный project-stub 2) Далее обратил внимание на папку libs и вижу, что там нет bem-core-php. По инструкции установки этой библиотеки у меня была следующая ситуация. Признаюсь, не понял что подходящего чему он не смог найти, но выбрал ту, что bem-core 2.8.0, типа версия больше
3) Теперь у меня набор библиотек стал выглядеть вот так, и если верно всё понимаю мне теперь не хватает для начала разработки не хватает только bh-php?
Всё ли правильно пока делаю?