Мне нужно изменить базовый блок page следующим образом при навешивании модификатора sticky-push контент оборачивался оберткой добавлялся блок под контентом и подключался блок футера после данного контейнера
block('page').mod('sticky-push', true)(
def()(function(){
return applyCtx([
{
block: 'page-sticky-footer',
content: [
{
tag: '',
content: this.ctx.content
},
{
block: 'sticky-push'
}
]
},
{
block: 'footer'
}
])
})
);
Я написал следующий код, он не верен так как я юзаю this.ctx.content У меня естественно пропадают теги body и т/д
Блок page генерирует начиная с корневого тега html. Вы уверены, что хотите его оборачивать?
я хочу обернуть его контент. тело все что внутри body
Все я тупанул надо было так
Но тогда js не подключается на страницу(
Вообще, если в шаблонах используются подблоки — нужно их в deps прописывать, потому что пока из шаблонов их в процессе сборки не получить (и эта задача совсем не тривиальная).
Не совсем понял, в deps.js у меня прописаны все блоки, css цепляется, все хорошо в этом решении, но почему-то скрипт который содержит весь js не подключается его тупо нет в html Если я его подключу ручками то все будет работать как я и хотел, но надо что бы его тула собирала
Блок page размещает подключаемые скрипты в самом низу тега body. Вы переопределили моду контент и не используете результаты других шаблонов по этой моде. Вам надо либо самостоятельно включить this.ctx.scripts в вашем шаблоне моды content или получить результат выполнения библиотечной моды content с помощью applyNext(), а затем его оборачивать. Полезные ссылки:
applyNext() не получиться, в моей задаче не просто обернуть нужно, но и добавить внутрь контейнера еще блок, и после обертки блок футера.
а вот эта конструкция помогла, не знал что так можно. Спасибо!
В this.ctx.scripts ожидается bemjson, а не url. Оставьте просто this.ctx.scripts, как это сделано в самом блоке page.
Попробуй ещё вариант:
Кажется в этом случае скрипты тоже добавятся.
Не нет скриптов уже пробовал
Я бы все-таки настоятельно порекомендовал использовать
applyNext()
:А чтобы нормально сматчился шаблон на JS, достаточно явно указать блок в BEMJSON: