Аналогично тому, как это делается, например, на сайте:
[spoiler]
Решение достаточно простое:
- в тексте новости используем разделитель #BANNER_BOTTOM#
Вторая часть слова - это "тип" баннеров, которые будут показаны: BOTTOM.
Вот как это выглядит в редакторе:
- используем result_modifier.php, который следует поместить рядом с соотв. шаблоном показа новости или статьи.
Шаблон компонента предварительно скопирован в текущий шаблон сайта.
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die(); $arResult["DETAIL_TEXT"] = preg_replace( "/#BANNER_([A-Za-z-0-9]+)#/e", 'CAdvBanner::GetHTML(CAdvBanner::GetRandom("\1"))', $arResult["DETAIL_TEXT"] ); ?> |
Что получилось, можно видеть на скриншоте:
Может кому пригодится.
Может попробуете посчитать в шаблоне?
...вообще подобные задачи часто решаются через css, плюс не понятно как быть с таргетингом и кешированием, но да ладно.
Что не совсем удобно. Все-таки это показ рекламы.
Если нужно кешировать, то вместо вызова баннера ставим вызов некоторой страницы через JS (можно использовать AJAX библиотеку нашу), на которой будет уже осуществляться ротация баннера. Страница может принимать только тип баннера.
Вопрос с таргетингом можно решить посредством ключевых слов баннеров и соответсвенно ключевых слов новостей. Их также можно передавать в параметрах на страницу, где происходит ротация.
В общем, вопрос может быть решен различными методами.
Касательно результатов поиска - в добавление изменяйте тэмплейт поисковой страницы и из неё вырезайте эти самые коды, тогда будет выглядеть "как будто вы их не используете".
Кроме того в результате запрошенные слова будут выделены <b></b>, прикажете все варианты перебирать и удалять?
А если в контексте эти поисковые слова все же имеют смысл?
Наверное лучше уж (и правильнее) на события OnReindex, BeforeIndex повесить обработчик, который просто будет удалять из $arFields["BODY"] все #BANNER_BOTTOM#, <BREAK/> и т.п.
Все это, конечно, хорошо, только вот на практике размещение рекламы в контексте чаще всего применяется на "популярных" сайтах, где объем информации большой, а количество и расположение рекламных площадок меняется часто. Что, каждый раз пробегаться по всем статьям/новостям? А из-за обязательного кеширования статистика, ротация и таргетинг будут очень большой головной болью.