Внесите в код макета(ов) в соответствующие места показ одного баннера из группы баннеров (вместо 1 укажите идентификатор группы баннеров)
<?php if (Core::moduleIsActive('advertisement')) { $Advertisement_Group_Controller_Show = new Advertisement_Group_Controller_Show( Core_Entity::factory('Advertisement_Group', 1) ); $Advertisement_Group_Controller_Show ->xsl( Core_Entity::factory('Xsl')->getByName('ОтображениеБаннера') ) ->show(); } ?>
<?php if (Core::moduleIsActive('advertisement')) { $Advertisement_Group_Controller_Show = new Advertisement_Group_Controller_Show( Core_Entity::factory('Advertisement_Group', 1) ); $Advertisement_Group_Controller_Show ->limit(2) ->xsl( Core_Entity::factory('Xsl')->getByName('ОтображениеБаннера') ) ->show(); } ?>
При наличии модуля статистики посещаемости код баннера можно располагать внутри условия
<?php if (!Core::moduleIsActive('counter') || !Counter_Controller::checkBot( Core_Array::get($_SERVER, 'HTTP_USER_AGENT') )) { // Блок показа баннера } ?>
Контекстный показ баннеров может использоваться с разными источниками контекста — текстом страницы, текстом поискового запроса и т.п.
Для показа баннера в зависимости от содержания страницы получим текст страницы следующим образом:
<?php ob_start(); // здесь показ контента, в зависимости от которого необходимо выводить баннер $sContextualWords = ob_get_clean(); if (Core::moduleIsActive('advertisement')) { $Advertisement_Group_Controller_Show = new Advertisement_Group_Controller_Show( Core_Entity::factory('Advertisement_Group', 1) ); $Advertisement_Group_Controller_Show ->words($sContextualWords) /* Указываем на необходимость показа только баннеров, найденных по контексту. Если ни одного контекстного баннера не будет найдено – ничего не будет показано. */ ->justContext(TRUE) ->xsl( Core_Entity::factory('Xsl')->getByName('ОтображениеБаннера') ) ->show(); }
Добавим в начало каждого макета код, который будет определять поисковый запрос, по которому пришел пользователь и сохранять этот запрос в cookie. При определении поискового запроса используется модуль «Статистика посещаемости». Если модуль «Статистика посещаемости» отключен или отсутствует, нижеприведенный код работать не будет. Добавлять код необходимо в самое начало макета.
<?php if (Core::moduleIsActive('counter')) { $aSearchSystem = Counter_Controller::instance()->isSearchSystem( Core_Array::get($_SERVER, 'HTTP_REFERER') ); if ($aSearchSystem) { $search_query = trim($aSearchSystem['search_query']); if (strlen($search_query) <= 255) { setcookie('hostcms_search_query', $search_query, time() + 31536000, '/'); $_COOKIE['hostcms_search_query'] = $search_query; } } }
Далее остается передать текст поискового запроса контроллеру:
<?php if (Core::moduleIsActive('advertisement')) { $Advertisement_Group_Controller_Show = new Advertisement_Group_Controller_Show( Core_Entity::factory('Advertisement_Group', 1) ); $Advertisement_Group_Controller_Show ->words(Core_Array::get($_COOKIE, 'hostcms_search_query')) /* Указываем на необходимость показа только баннеров, найденных по контексту. Если ни одного контекстного баннера не будет найдено – ничего не будет показано. */ ->justContext(TRUE) ->xsl( Core_Entity::factory('Xsl')->getByName('ОтображениеБаннера') ) ->show(); }
В структуре сайта создайте страницу с именем в меню «Переход по ссылке баннера» и названием раздела «showbanner», отключите отображение данной страницы в меню. Выберите тип страницы «Типовая динамическая страница», из выпадающего списка «Раздел» выберите «Реклама», в выпадающем списке «Страница» выберите «Переход по ссылке баннера».
Если при нажатии на баннер Вы получите сообщение Apache, например «OK. The document has moved here», необходимо заменить серверный редирект на JavaScript, для этого в разделе «Страница» выберите «Переход по ссылке баннера (JavaScript)».
В руководстве ничего не сказано про изменение сортировки выводимых баннеров при выводе на страницу. Пригодится, к примеру, для крутилки акций и спецпредложений на главной странице. Для этого, по аналогии с другими частями системы используется queryBuilder.
Представим, что есть группа баннеров, с чётко определёнными датами начала показа и нам требуется, чтобы сначала выводились старые баннеры, а самые новые были в конце. Пример кода:
$Advertisement_Group_Controller_Show = new Advertisement_Group_Controller_Show(Core_Entity::factory('Advertisement_Group', 1));
$Advertisement_Group_Controller_Show
->xsl(Core_Entity::factory('Xsl')->getByName('ИмяВашегоШаблона'))
->limit(5)
->advertisements()
->queryBuilder()
->clearOrderBy()
->orderBy('start_datetime', 'ASC');
$Advertisement_Group_Controller_Show->show();
Всё довольно обычно для HostCMS, просто про «... ->advertisements() ...» нигде не упоминается.