я реализовывал это через модуль банеры
в классе Banners
есть фукция
show_random_banner()
см. ниже как я реализовал у себя
function show_random_banner($category_id = null, $new_line = null) {
global $CONFIG, $tpl, $main, $db, $server, $lang;
$category_id = (int)$category_id;
$where = ($category_id) ? $where = "category_id = $category_id AND" : "";
$BC = new CBannersCategories_DB($this->table_prefix.'_banners_categories', 'id');
$BD = new CBannersData_DB($this->table_prefix."_banners", "id");
if (count($this->already_displayed) > 0) $not_in_str = " AND id NOT IN (" . implode(",", $this->already_displayed) . ")";
$db->query('SELECT *
FROM '.$this->table_prefix.'_banners
WHERE '.$where.' active = 1 '.$not_in_str.'
ORDER BY RAND()
LIMIT 0, 1');
$db->next_record();
if ($db->f('id')) {
$banner_size = trim($db->f('size'));
$banner_style_css = trim($db->f('style_css'));
switch ($db->f('type')) {
// àíèìèðîâàííûé ãèô
case 1:
$main->include_main_blocks($this->module_name."_gif.html", "main");
if ($db->f('filename')) {
$img_path = $CONFIG['banners_path'].$db->f('filename');
if (file_exists($img_path)) {
$size = getimagesize($img_path);
$w = $size[0];
$h = $size[1];
$banner = " <a href='".$db->f('url')."' target=_blank><img src=\"/". $img_path."\" alt=\"\" width=\"$w\" height=\"$h\" border=\"0\"></a>";
}
}
break;
// ôëåø-áàííåð
case 2:
$main->include_main_blocks($this->module_name."_flash.html", "main");
$html_code = $db->f('text');
$url = $db->f('url');
$filename = $db->f('filename');
$imagename = $db->f('imagename');
$html_code = preg_replace('/EMBED src="?[^"\s]*"?/i', "EMBED src=\"/".$CONFIG["banners_path"]."$filename?link=$url\"", $html_code);
$html_code = preg_replace('/PARAM NAME="?movie"? VALUE="?[^"\s]*"?/i', "PARAM NAME=movie VALUE=\"/" . $CONFIG["banners_path"] . "$filename?link=$url\"", $html_code);
$banner = $html_code;
$banner = str_replace("'", "\'", $banner);
if ($imagename) $alternative_image = "<a href=\"$url\"><img src=\"/".$CONFIG["banners_path"].$imagename."\" border=0></a>";
break;
// òåêñòîâûé áàííåð
case 3:
$main->include_main_blocks($this->module_name."_text.html", "main");
$banner = " <a href=\"".$db->f('url')."\" target=_blank>".$db->f('text')."</a>";
break;
// html áàííåð
case 4:
$main->include_main_blocks($this->module_name."_html.html", "main");
$html_code = html_entity_decode($db->f('text'), ENT_QUOTES);
$url = $db->f('url');
$banner = $html_code;
break;
####### Ðåêëàìíûå Àãåíñòâà ##########
# i-Media
case 5:
$main->include_main_blocks($this->module_name."_html.html", "main");
if ( !defined('IM_RECLAME_DIR') ) { define('IM_RECLAME_DIR', 'im_relame_87c34b85b4f7a89139178'); }
include_once(RP.'mod/banners/addmodule/'.IM_RECLAME_DIR.'/im_reclame.class.php');
$banner = $imedia->showLinks(8);
$banner .= $imedia->showLinks();
$banner = str_replace("</span>", "</span><br><br>", $banner);
break;
# Sape.ru
case 6:
$main->include_main_blocks($this->module_name."_html.html", "main");
if (!defined('_SAPE_USER')){ define('_SAPE_USER', '7256c2991f2c9a795ff637c440aaba'); }
include_once(RP.'mod/banners/addmodule/'._SAPE_USER.'/sape.php');
$sape = new SAPE_client();
$banner = $sape->return_links(9);
$banner = str_replace("::", "<br><br>", $banner);
break;
# LinkFeed.ru
case 7:
$main->include_main_blocks($this->module_name."_html.html", "main");
if ( !defined('LINKFEED_USER') ) { define('LINKFEED_USER', '651a1a021c528c7cdd155791618ff0f9d325'); }
include_once(RP.'mod/banners/addmodule/'.LINKFEED_USER.'/linkfeed.php');
$linkfeed = new LinkfeedClient();
$banner = $linkfeed->return_links(9);
$banner .= $linkfeed->return_links();
$banner = str_replace("::", "<br><br>", $banner);
break;
}
$nl = ($new_line) ? "<br>" : "";
$tpl->prepare();
if ($banner) {
$this->already_displayed[] = $db->f('id');
//âûâîä íà ýêðàí
$tpl->newBlock('block_banner');
$tpl->newBlock('block_size_banner_'.$banner_size);
$tpl->assign(array(
style_css => $banner_style_css,
banner => $banner,
alternative_image => $alternative_image,
nl => $nl, // åñòü ëè ïåðåíîñ íà íîâóþ ñòðîêó
));
$tpl->gotoBlock('block_size_banner_'.$banner_size);
$tpl->gotoBlock("block_banner");
return TRUE;
}
}
return FALSE;
}