Open mpyctam opened 9 years ago
Если коротко, то это делает борщик.
Но как настраивать его — не подскажу ;-)
@mpyctam
Универсально решить задачу в текущей постановке невозможно: блок image
может оказаться в совершенно разных местах (и зачастую одновременно): в библиотеке или на проекте на разных уровнях переопределения. Поэтому, если вообще ничего не менять в указанном BEMJSON, найти картинку не получится.
Однако есть несколько вариантов разный степени сложности, которые потребуют изменений в коде.
1) Самый простой — переложить картинку в бекграунд в CSS.
2) Как [1] + включить инлайнинг с помощью borschik
. Потребуется вот такой конфиг:
{
"freeze_paths" : {
"libs/**": ":base64:",
"libs/**/*.svg": ":encodeURIComponent:",
"*.blocks/**": ":base64:",
"*.blocks/**/*.svg": ":encodeURIComponent:"
}
}
3) Считать BEMJSON динамическим и класть все используемые в нем картинки в отдельную папку, а пути указывать примерно так: url: '/i/cart.svg'
— считаю, что это самый годный вариант.
4) Если же есть уверенность, что это явно статическая картинка, относящаяся к конкретному блоку, но она обязана быть в src
, то можно унести ее из BEMJSON в шаблоны и использовать внутри borschik.link().
5) Как [4], но для BEMJSON. Это будет менее красиво, т.к. придется писать относительные пути от BEMJSON до картинок в блоках.
Еще хотел добавить. Нужно перестать хотеть в этом случае класть картинку в папку блока логотипа, так как:
<div class="logo">
<img class="image logo__picture" src="../../img/logo.svg" alt="Ваш логотип" />
</div>
В этом случае Вы в любом случае будете указывать какой то прямой путь до картинки логотипа, bemjson в этом смысле не отличается.
@tadatuta @tavriaforever ну вы чего человека пугаете? ) Из нашего опыта блок лого
практически на всех проектах используется с одной и той же картинкой, максимум меняется модификатором что-то в лого
.
В таком случае нужно всего лишь преложить вынести шаблон блока лого.
block(‘logo’).content()(function(){
return {
elem: 'name',
content: {
block: 'image',
mix: {block: 'logo', elem: 'pic'},
url: this.ctx.image || 'карзина.svg',
alt: this.ctx.alt || ' альтернативный текст '
}
}
})
А на страницу в BEMJSON подключать блок так
{
block: 'logo',
mix: { block: 'header', elem: 'logo' },
alt : ‘Есть возможность при желании менять из BEMJSON поля блока'
}
Использование блока лого «из проекта в проект» всегда ведет за собой изменение css просто до неузнаваемости. Так что картинку рядом с блоком положить это не затратно.
@voischev почему пугаем? это же и есть мой вариант [4] ;)
Видите, сколько вариантов мы предложили)
спасибо за бем.
@mpyctam бэм ;)
Не могу разобратьcя:
Вопрос: Как сделать чтобы image блок находил картинку которая лежит в папке блока logo, но не хочется менять путь url