- ...
-
design
- ...
-
Имя_Вашего_Шаблона
- css
-
html
- ...
- emulator.php
- sape.php
- ...
- images
- js
- ...
- ...
- ...
Скачайте из своего аккаунта на бирже ссылок Sape.ru их скрипт sape.php и скопируйте в ту папку вашего шаблона, где размещены tpl-файлы, то есть в папку http://ваш.сайт/design/папка_шаблона/html. Смотрите, как показано в листинге файлов справа. Интересующий файл помечен красным цветом. Еще один файл помечен зеленым цветом, об этом файле расскажем следом.
Стоит напомнить, Impera CMS поддерживает в шаблонах так называемый хелпер - это файл emulator.php, в котором мы можем разместить какие-нибудь произвольные функции-обработчики, расширяющие движок некими ранее непредусмотренными возможностями. А сами эти вспомогательные функции можем использовать в нужном месте нашего шаблона. Например, записав в хелпере некую функцию sapeLinks, теперь можем вызвать ее с каким-то набором параметров (какие мы неявно обозначили и обрабатываем в коде функции согласно своим представлениям) в некотором tpl-файле шаблона. Скажем, нам захотелось вызвать функцию внизу файла списка новостей:
{* файл news.tpl - центральная часть страницы списка новостей *}
<h1> Новости </h1>
{if empty($all_news)}
<p> Нет новостей! </p>
{else}
<ul id="news-list">
{foreach $all_news as $item}
<li>
<a href="{$site}{$item->url_path}{$item->url}"> {$item->header} </a>
</li>
{/foreach}
</ul>
{$PagesNavigation}
{/if}
<div id="reklama"> {sapeLinks hash='наш-хеш-код-в-sape'} </div>
Так вот чтобы использовать подобный механизм, проверьте наличие файла emulator.php в вашем шаблоне и дополните предложенной далее функцией вывода Sape-ссылок. Если же файла-хелпера нет в шаблоне, создайте файл с тем содержимым, как показано ниже:
<?php
/* ================================================================================
Система: Impera CMS |
Сайт системы: http://imperacms.com/ |
|
Назначение файла: хелпер шаблона клиентской стороны сайта |
Расположение: http://сайт/design/папка_шаблона/html/emulator.php |
|
================================================================================ */
class TemplateEmulator {
// объект Sape (биржа ссылок)
protected $sape = null;
// ===================================================================
/**
* Конструктор класса
*
* -------------------------------------------------------------------
*
* @access public
* @param object $cms объект движка
* @return void
*/
// ===================================================================
public function __construct ( & $cms ) {
// подключаем наши функции и модификаторы Smarty
$this->setSmartyPlugins($cms);
}
// ===================================================================
/**
* Подключение наших функций и модификаторов в шаблонизатор Smarty
*
* -------------------------------------------------------------------
*
* @access protected
* @param object $cms объект движка
* @return void
*/
// ===================================================================
protected function setSmartyPlugins ( & $cms ) {
// регистрируем шаблонизационную функцию sapeLinks
$cms->smarty->registerPlugin('function', 'sapeLinks', array($this, 'sapeLinks'));
}
// ===================================================================
/**
* Обработчик шаблонизационной функции sapeLinks
*
* Действие: выводит html-код ссылок Sape для указанного пользователя
* этой биржы ссылок.
*
* -------------------------------------------------------------------
*
* @access public
* @param array $params массив параметров, указанных в вызове:
* ['hash'] = хеш-код пользователя Sape (обязателен только при первом вызове)
* ['method'] = какой метод вызвать (по умолчанию return_links)
* ['count'] = количество выводимых ссылок (по умолчанию ВСЕ)
* @param object $smarty объект шаблонизатора Smarty
* @return string html-код ссылок
*/
// ===================================================================
public function sapeLinks ( $params = null, & $smarty = null ) {
// если это первый вызов, берем хеш-код пользователя
if (!defined('_SAPE_USER')) {
$field = 'hash';
$hash = isset($params[$field]) ? trim($params[$field]) : '';
if ($hash == '') return '';
define('_SAPE_USER', $hash);
// подключаем скрипт Sape
$file = dirname(__FILE__) . '/sape.php';
if (file_exists($file) && is_file($file)) require_once($file);
}
// создаем объект Sape, если еще нет
$class = 'SAPE_client';
if (!class_exists($class)) return '';
if (empty($this->sape)) $this->sape = new $class();
// берем количество выводимых ссылок
$field = 'count';
$count = isset($params[$field]) ? max(1, intval($params[$field])) : 0;
// выводим ссылки
$field = 'method';
$method = isset($params[$field]) ? trim($params[$field]) : 'return_links';
if ($method == '' || !method_exists($this->sape, $method)) return '';
if (!empty($count)) return $this->sape->$method($count);
return $this->sape->$method();
}
}
?>
Данная функция sapeLinks удобная тем, что:
- безопасна при вызове, когда скрипт sape.php отсутствует в шаблоне;
- с помощью опционального параметра method позволяет обратиться к другому методу Sape;
- безопасна при обращении к несуществующему методу Sape.
Напоследок несколько примеров вызова функции:
<div id="reklama1"> {sapeLinks hash='наш-хеш-код-в-sape'} </div>
<div id="reklama2"> {sapeLinks hash='наш-хеш-код-в-sape' count=5} </div>
<div id="reklama3"> {sapeLinks hash='наш-хеш-код-в-sape' method='return_articles'} </div>
<div id="reklama4"> {sapeLinks hash='наш-хеш-код-в-sape' method='return_articles' count=10} </div>
То есть параметры method и count опциональные. Параметр hash обязателен только в первом вызове на странице, в последующих вызовах он может быть опущен, так как к тому моменту уже известно, с каким пользователем биржы Sape связаны данные вызовы функции.