Добрый день Разрабатываю на project stub относительно большой проект (вёрстка):
- несколько страниц
- все страницы разные в контексте блоков, общие только шапка и подвал
- на разных страницах свои особенные скрипты, которых нет на других страницах
- разрабатывал страницы отдельно на отдельно взятых project stub заготовках
- css блоков и bemhtml для каждой страницы клал в common.blocks
Теперь нужно всё это (все странички из разных project stub заготовок) собрать воедино, но пока не пойму как. Мне нужна примерно следующая картина в файловой структуре: common.blocks -- common ---- header ------ header.css ------ header.bemhtml.js ---- footer -- catalog ---- filter ---- heading -- index -- contacts desktop.bundles -- index -- catalog ---- catalog.html ---- catalog.bemjson.js ---- catalog.min.css ---- ... -- contacts
Как это реализовать? Где указать условия каким блокам со стилями из каких каталогов в какую страничку подгружаться? Потому что если я сейчас из разных заготовок стили солью в одну папку, у меня к каждой странице будут подгружаться все стили. Т.е. в contacts будет попадать что предназначалось для catalog и т.д.
Я думаю для начала нужно было каждую отдельную страницу делать в
*.bundles
, а не в отдельном проекте.Ок, это не проблема перенести. Дальше какие действия нужны, чтобы каждой странице свои стили и скрипты назначить?
В каждый бандл попадут стили и скрипты только тех блоков, которые реально используются на странице.
Отлично, действительно, всё оказалось проще, чем думалось.
Но остался неясным вопрос с подключением общих элементов. К примеру, у меня одинаковая шапка для 10 разных страниц. Мне бы хотелось сущности для неё описать в bemjson ОДИН раз и затем реиспользовать в остальных, а не 10 раз для каждой страницы описывать. Есть какое-то решение для этого?
Возможно, послужит источником идей моя сборка статичного html-проекта из project-stub https://github.com/alexbaumgertner/hunter-boat
Я видел Вашу сборку. По ней могу задать те же вопросы, которые задаю и своей, сделанной в похожем стиле:
Tl;Dr: @bonjovi, вам поможет bemhtml.
Если описать содержимое блока не в bemjson страницы, а в самом компоненте (в его bemhtml-шаблоне), то достаточно указать только его имя. Опционально можно указать другие параметры, наличие (или отсутствие) которых будет менять лейаут или содержимое самого блока.
Например, я делаю так: в бандле не пишу bemjson вовсе, только *.bemdecl.js приблизительно с таким содержимым:
Соответсвенно, блок
root
вcommon.blocks
:Т. е.
root
просто подменяет себя наpage
, который выглядит так:Блок
header
:Ну и так далее. Надеюсь, общий смысл понятен.
А еще может помочь CommonJS:
@LeonidMalkov7 привет, реклама.