После того как страница сверстана, протестирована и готова уйти в Сеть, на радость пользователям, приходят непонятные люди и предлагают обвешать её различными счетчиками, с причудливыми параметрами.
В help метрики можно найти примеры следующего вида:
<a href="/price.zip" onclick="yaCounterXXXXXX.reachGoal('ORDER'); return true;">Прайс</a>
Обычно, решение "в лоб", означает модификацию существующих html-шаблонов, что усложняет их повторное использование и чревато новыми багами.
Есть-ли в стеке технологий BEM архитектурные приёмы и инструменты, которые позволят, в таких случаях, обходиться без модификации уже отлаженного кода -- т.е. реализовать аспект где-то сбоку, ведь он, по сути, ни как не связан с основной логикой -- какой способ решения порекомендуете?
Если я правильно понял что вам надо, то просто вставляйте в content готовый html-код. Выглядеть это будет примерно так: или связка
bemhtml
block b-metrica {
content: '<a href="/price.zip" onclick="yaCounterXXXXXX.reachGoal('ORDER'); return true;">Прайсa>' //Сюда просто вставляете код счётчика
}
+
bemjson
{ block: 'b-metrica' }
или сразу где-то в коде:
{
... /* Какой-то блок */
content: '<a href="/price.zip" onclick="yaCounterXXXXXX.reachGoal('ORDER'); return true;">Прайсa>' //Сюда просто вставляете код счётчика
}
Вот пример как сделано вставка кнопки твиттера: https://github.com/voisch ev/bem-cam/blob/grid1/blo cks/b-follow/b-follow.bem html
Как вариант можно в js-парамы каждого блока, который нужно обсчитывать, записать цель (например, ORDER). Далее создать блок i-ya-metrica, который слушает клики (а может что-то еще) и вызывает yaCounterXXXXXX.reachGoal(e.block.params.goal). i-ya-metrica будет миксоваться ко всем блокам, для которых нужно что-то подсчитать.
В этом случае отлаженный код ты не сломаешь, а аккуратно сверху навесишь "считалочку".
Alexander Tarmolov все правильно написал.
Мы делали похожим образому, расскажу чуть детальнее.
1. Интерактивный блок i-yaMetrika, который при инициализации создает счетчик на странице и инициализирует его (как инициализировать счетчик на странице, не используя стандартный код, можно прочитать в помощи Яндекс.Метрики - советую http://help.yandex.ru/metrika/?id=1113052). Понятное дело, что одним из параметров, которые передаются в блок может быть идентификатор счетчика.
2. Сам объект счетчика инкапсулируется внутри блока, а блок предоставляет интерфейс для того, чтобы дернуть какие-то методы счетчика (hit, reachGoal). Как предоставить интерфейс - ваше дело. Я использую BEM.channel.
Если интересно - могу скинуть исходники как-нибудь.
вы поняли не правильно, но ответили два других моих вопроса.
есть-ли в bemjson синтаксический сахар, для вставки произвольно-многострочных данных (значит - нет).
есть-ли "автоэкранирование" контента в шаблонизаторе? (значит его тоже нет)
если возможно, выложите исходники в публичный репозитарий. задача весьма распространенная и думаю это будет интересно и полезно не только мне.
подскажите, пожалуйста, как реализовать такой блок. миксирование ко всем блокам, это вроде бы именно то, что нужно.
я бы с удовольствием, только как я понимаю, не очень понятно в репе библиотеки блоков, какая ветка сейчас актуальна
сообщалось, что там наводят порядок
тогда, скиньте в почту.
реализация блока привязана к специфичной версии библиотеки (я использую 0.3)?
нет, не привязана
приеду с webconf - скину обязательно
надеюсь не горит до вторника?
ping)
понг
отправил на почту funca на yandex'е