update ver 3.31

This commit is contained in:
2026-03-28 01:41:26 +05:00
parent 69751b8590
commit b34266e588
12 changed files with 675 additions and 565 deletions

View File

@@ -1,21 +1,30 @@
### media
## Модуль Баннер v2.26.0
## Модуль Баннер v3.31.0
### Модуль позволяет:
### для AVE.CMS ALT ≥ ≥ v3.31
* Модуль позволяет:
* Организовать удобное управление показами рекламных баннеров на вашем сайте.
* Для того, чтобы отобразить рекламный баннер, разместите системный тег [mod_banner:XXX] в нужном месте вашего шаблона сайта или содержимом документа.
* Идентификаторы системных тегов указаны в разделе - Управление категориями.
* Допустимые форматы рекламных баннеров: jpg, jpeg, png, gif, swf.
* Допустимые форматы рекламных баннеров: jpg, jpeg, png, gif, webp.
* Установка:
* Скачайте архив с модулем banner-main.zip и положите его в папку modules, разархивируйте, после чего у вас появится папка media, ее оставляем архив banner-main.zip удаляем.
* Перейдите в раздел управления модулями вкладка Неустановленные модули, установите модуль Баннер.
* Перейдите к управлению модулем, в созданном при установке примере перейдите в раздел Управление категориями, скопируйте системный тег ```[mod_banner:1]``` принадлежащий Категории 1 и разместите его в документе или Основном шаблоне или в шаблоне Рубрики.
* Шаблон вывода в публичной части сайта:
* Верстка публичной части модуля находится в шаблоне modules/media/templates/banner_viewer.tpl
### Changelog:
28.03.2026 - обновление модуля - версия 3.32 - рефакторинг кода для работы в ave.cms ALT v3.31. Добавлен шаблон вывода в публичной части сайта.
04.09.2019 - версия 2.26.0 - адаптация для версии ave.cms 3.26
25.09.2016 - Исправления (css + html) вывода пагинации страниц.
03.06.2016 - Исправлен баг с неправильным формированием пути к изображению баннера, при размещении его на странице с сылкой типа site.ru/folder/link/
03.06.2016 - добавлен атрибут style="width:100%" для изображения баннера, при использовании в адаптивной верстке.
03.06.2016 - добавлен атрибут style="width:100%" для изображения баннера, при использовании в адаптивной верстке.

View File

@@ -7,441 +7,476 @@
* @subpackage module_Banner
* @filesource
*/
class ModulBanner {
class ModuleBanner {
/**
* СВОЙСТВА
* СВОЙСТВА
*/
var $_limit = 15;
var $_allowed_files =
array(
'image/jpg',
'image/jpeg',
'image/pjpeg',
'image/x-png',
'image/png',
'image/gif',
'application/x-shockwave-flash'
);
/**
* ВНЕШНИЕ МЕТОДЫ
*/
function displayBanner($id) {
global $AVE_DB;
mt_rand();
$banner_id = '';
$output = '';
$cur_hour = date('G');
$and_time = "AND ((ZStart = '0' AND ZEnde = '0') OR (ZStart <= '$cur_hour' AND ZEnde > '$cur_hour') OR (ZStart > ZEnde AND (ZStart BETWEEN ZStart AND '$cur_hour' OR ZEnde BETWEEN '$cur_hour' AND ZEnde)))";
$and_category = (!empty($id) && is_numeric($id)) ? "AND KatId = '" . $id . "'" : '';
$num = $AVE_DB->Query("
SELECT Id
FROM " . PREFIX . "_modul_banners
WHERE Aktiv = '1'
AND (MaxKlicks = '0' OR (Klicks < MaxKlicks AND MaxKlicks != '0'))
AND (MaxViews = '0' OR (Views < MaxViews AND MaxViews != '0'))
" . $and_time . "
" . $and_category . "
")->NumRows();
$zufall = ($num) ? rand(1,3) : 3;
$sql = $AVE_DB->Query("
SELECT
Id,
Bannertags,
Target,
Bannername,
BildAlt,
Width,
Height
FROM " . PREFIX . "_modul_banners
WHERE Aktiv = '1'
AND (MaxKlicks = '0' OR (Klicks < MaxKlicks AND MaxKlicks != '0'))
AND (MaxViews = '0' OR (Views < MaxViews AND MaxViews != '0'))
" . $and_time . "
" . $and_category . "
AND Gewicht <= '" . $zufall . "'
");
$num = $sql->NumRows();
$banner_id = ($num == 1) ? 0 : rand(0, $num-1);
$sql->DataSeek($banner_id);
$banner = $sql->FetchAssocArray();
if(!empty($banner['Bannertags']))
{
if (stristr($banner['Bannertags'], '.swf') === false)
{
$output = '<a target="' . $banner['Target'] . '" href="index.php?module=' . BANNER_DIR . '&amp;id=' . $banner['Id'] . '"><img style="width:100%" src="'. ABS_PATH .'modules/' . BANNER_DIR . '/files/' . $banner['Bannertags'] . '" alt="' . $banner['Bannername'] . ': ' . $banner['BildAlt'] . '" border="0" /></a>';
}
else
{
$output = '<div style="position:relative;border:0px;width:' . $banner['Width'] . 'px;height:' . $banner['Height'] . 'px;"><a target="' . $banner['Target'] . '" href="index.php?module=' . BANNER_DIR . '&amp;id=' . $banner['Id'] . '" style="position:absolute;z-index:2;width:' . $banner['Width'] . 'px;height:' . $banner['Height'] . 'px;_background:red;_filter:alpha(opacity=0);"></a>';
$output .= ' <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="' . $banner['Width'] . '" height="' . $banner['Height'] . '" id="reklama" align="middle">';
$output .= ' <param name="allowScriptAccess" value="sameDomain" />';
$output .= ' <param name="movie" value="modules/' . BANNER_DIR . '/files/' . $banner['Bannertags'] . '" />';
$output .= ' <param name="quality" value="high" />';
$output .= ' <param name="wmode" value="opaque">';
$output .= ' <embed src="modules/' . BANNER_DIR . '/files/' . $banner['Bannertags'] . '" quality="high" wmode="opaque" width="' . $banner['Width'] . '" height="' . $banner['Height'] . '" name="reklama" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />';
$output .= ' </object>';
$output .= '</div>';
}
if(!empty($banner['Id']))
{
$AVE_DB->Query("
UPDATE " . PREFIX . "_modul_banners
SET Views = Views + 1
WHERE Id = '" . $banner['Id'] . "'
");
}
}
echo $output;
}
function fetch_addclick($id) {
global $AVE_DB;
switch($_REQUEST['action']) {
case '':
case 'addclick':
$sql = $AVE_DB->Query("
SELECT BannerUrl
FROM " . PREFIX . "_modul_banners
WHERE Id = '" . $id . "'
LIMIT 1
");
$banner_url = $sql->GetCell();
if(!empty($banner_url)) {
$AVE_DB->Query("
UPDATE " . PREFIX . "_modul_banners
SET Klicks = Klicks + 1
WHERE Id = '" . $id . "'
");
header('Location:' . $banner_url);
}
exit;
break;
}
}
function showBanner($tpl_dir) {
global $AVE_DB, $AVE_Template;
$limit = $this->_limit;
$sql = $AVE_DB->Query("SELECT Id FROM " . PREFIX . "_modul_banners");
$num = $sql->NumRows();
$seiten = ceil($num / $limit);
$start = get_current_page() * $limit - $limit;
$items = array();
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_modul_banners
LIMIT " . $start . "," . $limit
);
while($row = $sql->FetchRow()) {
array_push($items, $row);
}
if($num > $limit)
{
$page_nav = ' <a class="pnav" href="index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=1&cp=' . SESSION . '&page={s}">{t}</a> ';
$page_nav = get_pagination($seiten, 'page', $page_nav);
$AVE_Template->assign('page_nav', $page_nav);
}
$AVE_Template->assign('items', $items);
$AVE_Template->assign('mod_path', BANNER_DIR);
$AVE_Template->assign('kategs', $this->_showKategs());
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'banners.tpl'));
}
function editBanner($tpl_dir,$id) {
global $AVE_DB, $AVE_Template;
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_modul_banners
WHERE Id = '" . $id . "'
");
$row = $sql->FetchRow();
if (stristr(($row->Bannertags),'.swf') === false) $row->swf = false; else $row->swf = true;
if(@!is_writeable(BASE_DIR . '/modules/' . BANNER_DIR . '/files/')) {
$AVE_Template->assign('folder_protected', 1);
}
$AVE_Template->assign('item', $row);
$AVE_Template->assign('mod_path', BANNER_DIR);
$AVE_Template->assign('formaction', 'index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=quicksave&cp=' . SESSION . '&id=' . $_REQUEST['id'] . '&pop=1');
$AVE_Template->assign('kategs', $this->_showKategs());
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'form.tpl'));
}
function deleteBanner($id) {
global $AVE_DB;
$sql = $AVE_DB->Query("
SELECT
Bannertags,
Bannername
FROM " . PREFIX . "_modul_banners
WHERE Id = '" . $id . "'
");
$row = $sql->FetchRow();
@unlink(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $row->Bannertags);
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_modul_banners
WHERE Id = '" . $id . "'
");
reportLog($_SESSION['user_name'] . ' - удалил баннер (' . $row->Bannername . ')', 2, 2);
header('Location:index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=1&cp=' . SESSION);
exit;
}
function quickSave($id) {
global $AVE_DB, $config_vars;
if(!empty($_POST['del'])) {
$sql = $AVE_DB->Query("
SELECT Bannertags
FROM " . PREFIX . "_modul_banners
WHERE Id = '" . $id . "'
");
$row = $sql->FetchRow();
$AVE_DB->Query("
UPDATE " . PREFIX . "_modul_banners
SET Bannertags = ''
WHERE Id = '" . $id . "'
");
@unlink(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $row->Bannertags);
}
if(!empty($_POST['Bannername'])) {
$d_name = strtolower($_FILES['New']['name']);
$d_name = str_replace(' ','', $d_name);
$d_tmp = $_FILES['New']['tmp_name'];
if(!empty($_FILES['New']['type'])) {
if(in_array($_FILES['New']['type'], $this->_allowed_files)) {
$d_name = preg_replace('/[^ ._a-z0-9-]/', '_', $d_name);
if(file_exists(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name)) $d_name = $this->_Zufall() . '__' . $d_name;
if(@move_uploaded_file($d_tmp, BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name)) {
@chmod(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name, 0777);
echo "<script>alert('" . $config_vars['BANNER_IS_UPLOADED'] . ': ' . $d_name . "');</script>";
$AVE_DB->Query("
UPDATE " . PREFIX . "_modul_banners
SET Bannertags = '" . $d_name . "'
WHERE Id = '" . $id . "'
");
reportLog($_SESSION['user_name'] . ' - заменил изображение баннера на (' . $d_name . ')', 2, 2);
} else {
echo "<script>alert('" . $config_vars['BANNER_NO_UPLOADED'] . ': ' . $d_name . "');</script>";
}
} else {
echo "<script>alert('" . $config_vars['BANNER_WRONG_TYPE'] . ': ' . $d_name . "');</script>";
}
}
$AVE_DB->Query("
UPDATE " . PREFIX . "_modul_banners
SET
Bannername = '" . $_REQUEST['Bannername'] . "',
BannerUrl = '" . $_REQUEST['BannerUrl'] . "',
Gewicht = '" . $_REQUEST['Gewicht'] . "',
Views = '" . $_REQUEST['Anzeigen'] . "',
Klicks = '" . $_REQUEST['Klicks'] . "',
BildAlt = '" . $_REQUEST['BildAlt'] . "',
KatId = '" . $_REQUEST['KatId'] . "',
MaxKlicks = '" . $_REQUEST['MaxKlicks'] . "',
MaxViews = '" . $_REQUEST['MaxViews'] . "',
ZStart = '" . $_REQUEST['ZStart'] . "',
ZEnde = '" . $_REQUEST['ZEnde'] . "',
Aktiv = '" . $_REQUEST['Aktiv'] . "',
Target = '" . $_REQUEST['Target'] . "',
Width = '" . $_REQUEST['Width'] . "',
Height = '" . $_REQUEST['Height'] . "'
WHERE
Id = '" . $id . "'
");
reportLog($_SESSION['user_name'] . ' - изменил параметры баннера (' . stripslashes($_REQUEST['Bannername']) . ')', 2, 2);
}
header('Location:index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=1&cp=' . SESSION);
exit;
}
function newBanner($tpl_dir) {
global $AVE_DB, $AVE_Template, $config_vars;
switch($_REQUEST['sub']) {
case '':
if(!@is_writeable(BASE_DIR . '/modules/' . BANNER_DIR . '/files/')) {
$AVE_Template->assign('folder_protected', 1);
}
$AVE_Template->assign('mod_path', BANNER_DIR);
$AVE_Template->assign('kategs', $this->_showKategs());
$AVE_Template->assign('formaction', 'index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=newbanner&sub=save&cp=' . SESSION . '&pop=1');
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'form.tpl'));
break;
case 'save':
if(!empty($_POST['Bannername'])) {
$file = '';
$d_name = strtolower($_FILES['New']['name']);
$d_name = str_replace(' ', '', $d_name);
$d_tmp = $_FILES['New']['tmp_name'];
if(!empty($_FILES['New']['type'])) {
if(in_array($_FILES['New']['type'], $this->_allowed_files)) {
$d_name = preg_replace('/[^ ._a-z0-9-]/', '_', $d_name);
if(file_exists(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name)) $d_name = $this->_Zufall() . '__' . $d_name;
if(@move_uploaded_file($d_tmp, BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name)) {
@chmod(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name, 0777);
echo "<script>alert('" . $config_vars['BANNER_IS_UPLOADED'] . ': ' . $d_name . "');</script>";
reportLog($_SESSION['user_name'] . ' - добавил изображение баннера (' . $d_name . ')', 2, 2);
$file = $d_name;
} else {
echo "<script>alert('" . $config_vars['BANNER_NO_UPLOADED'] . ': ' . $d_name . "');</script>";
}
} else {
echo "<script>alert('" . $config_vars['BANNER_WRONG_TYPE'] . ': ' . $d_name . "');</script>";
}
}
$AVE_DB->Query("
INSERT
INTO " . PREFIX . "_modul_banners
SET
KatId = '" . $_REQUEST['KatId'] . "',
Bannertags = '" . $file . "',
BannerUrl = '" . $_REQUEST['BannerUrl'] . "',
Gewicht = '" . $_REQUEST['Gewicht'] . "',
Bannername = '" . $_REQUEST['Bannername'] . "',
BildAlt = '" . $_REQUEST['BildAlt'] . "',
MaxKlicks = '" . $_REQUEST['MaxKlicks'] . "',
MaxViews = '" . $_REQUEST['MaxViews'] . "',
ZStart = '" . $_REQUEST['ZStart'] . "',
ZEnde = '" . $_REQUEST['ZEnde'] . "',
Aktiv = '" . $_REQUEST['Aktiv'] . "',
Target = '" . $_REQUEST['Target'] . "',
Width = '" . $_REQUEST['Width'] . "',
Height = '" . $_REQUEST['Height'] . "'
");
reportLog($_SESSION['user_name'] . ' - добавил новый баннер (' . stripslashes($_REQUEST['Bannername']) . ')', 2, 2);
}
header('Location:index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=1&cp=' . SESSION);
exit;
}
}
function bannerKategs($tpl_dir) {
global $AVE_DB, $AVE_Template;
switch($_REQUEST['sub']) {
case '' :
$items = array();
$sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_modul_banner_categories");
while($row = $sql->FetchRow()) {
array_push($items, $row);
}
$AVE_Template->assign('items', $items);
$AVE_Template->assign('mod_path', BANNER_DIR);
$AVE_Template->assign('kategs', $this->_showKategs());
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'kategs.tpl'));
break;
case 'save' :
foreach($_POST['KatName'] as $id => $kateg) {
if(!empty($kateg)) {
$AVE_DB->Query("
UPDATE " . PREFIX . "_modul_banner_categories
SET KatName = '" . $kateg . "'
WHERE Id = '" . $id . "'
");
}
}
foreach($_POST['del'] as $id => $kateg) {
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_modul_banners
WHERE KatId = '" . $id . "'
");
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_modul_banner_categories
WHERE Id = '" . $id . "'
");
reportLog($_SESSION['user_name'] . ' - удалил категорию баннеров (' . $id . ')', 2, 2);
}
header('Location:index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=kategs&cp=' . SESSION);
break;
case 'new' :
if(!empty($_REQUEST['KatName'])) {
$sql = $AVE_DB->Query("
INSERT
INTO " . PREFIX . "_modul_banner_categories
SET KatName = '" . $_REQUEST['KatName'] . "'
");
reportLog($_SESSION['user_name'] . ' - добавил новую категорию (' . stripslashes($_REQUEST['KatName']) . ')', 2, 2);
}
header('Location:index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=kategs&cp=' . SESSION);
break;
}
}
/**
* ВНУТРЕННИЕ МЕТОДЫ
*/
function _Zufall() {
$zufall = rand(1000, 99999);
return $zufall;
}
function _showKategs() {
global $AVE_DB;
$kategs = array();
$sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_modul_banner_categories");
while($row = $sql->FetchRow()) {
array_push($kategs, $row);
}
return $kategs;
}
var $_limit = 15;
var $_allowed_files =
array(
'image/jpg',
'image/jpeg',
'image/pjpeg',
'image/x-png',
'image/png',
'image/gif',
'image/webp'
);
function displayBanner($id) {
global $AVE_DB, $AVE_Template;
mt_rand();
$cur_hour = (int)date('G');
// Сохраняем ваше оригинальное условие времени полностью
$and_time = "AND ((start_hour = '0' AND end_hour = '0') OR (start_hour <= '$cur_hour' AND end_hour > '$cur_hour') OR (start_hour > end_hour AND (start_hour BETWEEN start_hour AND '$cur_hour' OR end_hour BETWEEN '$cur_hour' AND end_hour)))";
$and_category = (!empty($id) && is_numeric($id)) ? "AND category_id = '" . (int)$id . "'" : '';
$num_rows = $AVE_DB->Query("
SELECT id
FROM " . PREFIX . "_module_banners
WHERE is_active = '1'
AND (max_clicks = '0' OR (clicks < max_clicks AND max_clicks != '0'))
AND (max_views = '0' OR (views < max_views AND max_views != '0'))
" . $and_time . "
" . $and_category . "
")->NumRows();
// Ваша логика выбора порога веса
$weight_limit = ($num_rows) ? rand(1, 3) : 3;
$sql = $AVE_DB->Query("
SELECT
id,
banner_file,
target,
banner_name,
image_alt,
width,
height
FROM " . PREFIX . "_module_banners
WHERE is_active = '1'
AND (max_clicks = '0' OR (clicks < max_clicks AND max_clicks != '0'))
AND (max_views = '0' OR (views < max_views AND max_views != '0'))
" . $and_time . "
" . $and_category . "
AND weight <= '" . (int)$weight_limit . "'
");
$num = $sql->NumRows();
if ($num == 0) return;
$target_index = ($num == 1) ? 0 : rand(0, $num - 1);
$sql->DataSeek($target_index);
$banner = $sql->FetchAssocArray();
if(!empty($banner['banner_file']))
{
// Передаем переменные в Smarty
$AVE_Template->assign([
'banner' => $banner,
'mod_path' => BANNER_DIR,
'abs_path' => ABS_PATH
]);
// Выводим через шаблон (путь подставьте свой, обычно так)
$AVE_Template->display(BASE_DIR . '/modules/' . BANNER_DIR . '/templates/banner_viewer.tpl');
if(!empty($banner['id']))
{
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_banners
SET views = views + 1
WHERE id = '" . (int)$banner['id'] . "'
");
}
}
}
function fetch_addclick($id) {
global $AVE_DB;
// Используем ?? '', чтобы не было Warning, если action не передан
$action = $_REQUEST['action'] ?? '';
switch($action) {
case '':
case 'addclick':
$sql = $AVE_DB->Query("
SELECT banner_url
FROM " . PREFIX . "_module_banners
WHERE id = '" . (int)$id . "'
LIMIT 1
");
$banner_url = $sql->GetCell();
if(!empty($banner_url)) {
// Сначала обновляем счетчик кликов
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_banners
SET clicks = clicks + 1
WHERE id = '" . (int)$id . "'
");
// Затем перенаправляем пользователя
header('Location: ' . $banner_url);
} else {
// Если URL пустой или баннер не найден, возвращаем на главную
header('Location: index.php');
}
exit;
break;
}
}
?>
function showBanners($tpl_dir) {
global $AVE_DB, $AVE_Template;
$limit = (int)$this->_limit;
$sql = $AVE_DB->Query("SELECT id FROM " . PREFIX . "_module_banners");
$num = $sql->NumRows();
$seiten = ceil($num / $limit);
$start = (int)(get_current_page() * $limit - $limit);
if ($start < 0) $start = 0;
$items = array();
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_module_banners
LIMIT " . (int)$start . "," . (int)$limit . "
");
while($row = $sql->FetchRow()) {
array_push($items, $row);
}
if($num > $limit)
{
$page_nav = ' <a class="pnav" href="index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=1&cp=' . SESSION . '&page={s}">{t}</a> ';
$page_nav = get_pagination($seiten, 'page', $page_nav);
$AVE_Template->assign('page_nav', $page_nav);
}
$AVE_Template->assign('items', $items);
$AVE_Template->assign('mod_path', BANNER_DIR);
$AVE_Template->assign('kategs', $this->_showCategories());
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'banners.tpl'));
}
function editBanner($tpl_dir,$id) {
global $AVE_DB, $AVE_Template;
$sql = $AVE_DB->Query("
SELECT *
FROM " . PREFIX . "_module_banners
WHERE id = '" . (int)$id . "'
");
$row = $sql->FetchRow();
if (stristr(($row->banner_file),'.swf') === false) $row->swf = false; else $row->swf = true;
if(@!is_writeable(BASE_DIR . '/modules/' . BANNER_DIR . '/files/')) {
$AVE_Template->assign('folder_protected', 1);
}
$AVE_Template->assign('item', $row);
$AVE_Template->assign('mod_path', BANNER_DIR);
$AVE_Template->assign('formaction', 'index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=quicksave&cp=' . SESSION . '&id=' . (int)$id . '&pop=1');
$AVE_Template->assign('kategs', $this->_showCategories());
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'form.tpl'));
}
function deleteBanner($id) {
global $AVE_DB;
$sql = $AVE_DB->Query("
SELECT
banner_file,
banner_name
FROM " . PREFIX . "_module_banners
WHERE id = '" . (int)$id . "'
");
$row = $sql->FetchRow();
@unlink(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $row->banner_file);
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_module_banners
WHERE id = '" . (int)$id . "'
");
reportLog($_SESSION['user_name'] . ' - удалил баннер (' . $row->banner_name . ')', 2, 2);
header('Location:index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=1&cp=' . SESSION);
exit;
}
function quickSave($id) {
global $AVE_DB, $config_vars;
if(!empty($_POST['del'])) {
$sql = $AVE_DB->Query("
SELECT banner_file
FROM " . PREFIX . "_module_banners
WHERE id = '" . (int)$id . "'
");
$row = $sql->FetchRow();
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_banners
SET banner_file = ''
WHERE id = '" . (int)$id . "'
");
@unlink(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $row->banner_file);
}
if(!empty($_POST['banner_name'])) {
$d_name = strtolower($_FILES['New']['name']);
$d_name = str_replace(' ','', $d_name);
$d_tmp = $_FILES['New']['tmp_name'];
if(!empty($_FILES['New']['type'])) {
if(in_array($_FILES['New']['type'], $this->_allowed_files)) {
$d_name = preg_replace('/[^ ._a-z0-9-]/', '_', $d_name);
if(file_exists(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name)) $d_name = $this->_getRandomPrefix() . '__' . $d_name;
if(@move_uploaded_file($d_tmp, BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name)) {
@chmod(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name, 0777);
echo "<script>alert('" . $config_vars['BANNER_IS_UPLOADED'] . ': ' . $d_name . "');</script>";
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_banners
SET banner_file = '" . addslashes($d_name) . "'
WHERE id = '" . (int)$id . "'
");
reportLog($_SESSION['user_name'] . ' - заменил изображение баннера на (' . $d_name . ')', 2, 2);
} else {
echo "<script>alert('" . $config_vars['BANNER_NO_UPLOADED'] . ': ' . $d_name . "');</script>";
}
} else {
echo "<script>alert('" . $config_vars['BANNER_WRONG_TYPE'] . ': ' . $d_name . "');</script>";
}
}
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_banners
SET
banner_name = '" . addslashes($_REQUEST['banner_name']) . "',
banner_url = '" . addslashes($_REQUEST['banner_url']) . "',
weight = '" . (int)$_REQUEST['weight'] . "',
views = '" . (int)$_REQUEST['views'] . "',
clicks = '" . (int)$_REQUEST['clicks'] . "',
image_alt = '" . addslashes($_REQUEST['image_alt']) . "',
category_id = '" . (int)$_REQUEST['category_id'] . "',
max_clicks = '" . (int)$_REQUEST['max_clicks'] . "',
max_views = '" . (int)$_REQUEST['max_views'] . "',
start_hour = '" . (int)$_REQUEST['start_hour'] . "',
end_hour = '" . (int)$_REQUEST['end_hour'] . "',
is_active = '" . (int)$_REQUEST['is_active'] . "',
target = '" . addslashes($_REQUEST['target']) . "',
width = '" . (int)$_REQUEST['width'] . "',
height = '" . (int)$_REQUEST['height'] . "'
WHERE
id = '" . (int)$id . "'
");
reportLog($_SESSION['user_name'] . ' - изменил параметры баннера (' . stripslashes($_REQUEST['banner_name']) . ')', 2, 2);
}
header('Location:index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=1&cp=' . SESSION);
exit;
}
function newBanner($tpl_dir) {
global $AVE_DB, $AVE_Template, $config_vars;
// Определяем под-действие (создание или сохранение)
$sub = $_REQUEST['sub'] ?? '';
switch($sub) {
case '':
if(!@is_writeable(BASE_DIR . '/modules/' . BANNER_DIR . '/files/')) {
$AVE_Template->assign('folder_protected', 1);
}
// Инициализируем пустой объект для Smarty, чтобы PHP 8.4 не ругался на отсутствие свойств
$item = new stdClass();
$item->id = 0;
$item->banner_name = '';
$item->category_id = 0;
$item->is_active = 1;
$item->target = '_blank';
$item->banner_file = '';
$item->banner_url = 'https://';
$item->image_alt = '';
$item->weight = 1;
$item->max_clicks = 0;
$item->max_views = 0;
$item->start_hour = 0;
$item->end_hour = 24;
$item->width = 0;
$item->height = 0;
$AVE_Template->assign('item', $item);
$AVE_Template->assign('mod_path', BANNER_DIR);
$AVE_Template->assign('kategs', $this->_showCategories());
$AVE_Template->assign('formaction', 'index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=newbanner&sub=save&cp=' . SESSION . '&pop=1');
// Рендерим шаблон формы
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'form.tpl'));
break;
case 'save':
if(!empty($_POST['banner_name'])) {
$file = '';
// Проверяем, был ли загружен файл
if(!empty($_FILES['New']['name']) && $_FILES['New']['error'] == UPLOAD_ERR_OK) {
$d_name = strtolower($_FILES['New']['name']);
$d_name = str_replace(' ', '', $d_name);
$d_tmp = $_FILES['New']['tmp_name'];
if(in_array($_FILES['New']['type'], $this->_allowed_files)) {
$d_name = preg_replace('/[^ ._a-z0-9-]/', '_', $d_name);
if(file_exists(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name)) {
$d_name = $this->_getRandomPrefix() . '__' . $d_name;
}
if(@move_uploaded_file($d_tmp, BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name)) {
@chmod(BASE_DIR . '/modules/' . BANNER_DIR . '/files/' . $d_name, 0777);
echo "<script>alert('" . ($config_vars['BANNER_IS_UPLOADED'] ?? 'Uploaded') . ': ' . $d_name . "');</script>";
reportLog($_SESSION['user_name'] . ' - добавил изображение баннера (' . $d_name . ')', 2, 2);
$file = $d_name;
} else {
echo "<script>alert('" . ($config_vars['BANNER_NO_UPLOADED'] ?? 'Error') . ': ' . $d_name . "');</script>";
}
} else {
echo "<script>alert('" . ($config_vars['BANNER_WRONG_TYPE'] ?? 'Wrong Type') . ': ' . $d_name . "');</script>";
}
}
// Выполняем запрос к БД с очисткой данных
$AVE_DB->Query("
INSERT
INTO " . PREFIX . "_module_banners
SET
category_id = '" . (int)($_REQUEST['category_id'] ?? 0) . "',
banner_file = '" . addslashes($file) . "',
banner_url = '" . addslashes($_REQUEST['banner_url'] ?? '') . "',
weight = '" . (int)($_REQUEST['weight'] ?? 1) . "',
banner_name = '" . addslashes($_REQUEST['banner_name'] ?? '') . "',
image_alt = '" . addslashes($_REQUEST['image_alt'] ?? '') . "',
max_clicks = '" . (int)($_REQUEST['max_clicks'] ?? 0) . "',
max_views = '" . (int)($_REQUEST['max_views'] ?? 0) . "',
start_hour = '" . (int)($_REQUEST['start_hour'] ?? 0) . "',
end_hour = '" . (int)($_REQUEST['end_hour'] ?? 24) . "',
is_active = '" . (int)($_REQUEST['is_active'] ?? 1) . "',
target = '" . addslashes($_REQUEST['target'] ?? '_blank') . "',
width = '" . (int)($_REQUEST['width'] ?? 0) . "',
height = '" . (int)($_REQUEST['height'] ?? 0) . "'
");
reportLog($_SESSION['user_name'] . ' - добавил новый баннер (' . stripslashes($_REQUEST['banner_name']) . ')', 2, 2);
}
header('Location:index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=1&cp=' . SESSION);
exit;
}
}
function bannerCategories($tpl_dir) {
global $AVE_DB, $AVE_Template;
switch($_REQUEST['sub']) {
case '' :
$items = array();
$sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_module_banner_categories");
while($row = $sql->FetchRow()) {
array_push($items, $row);
}
$AVE_Template->assign('items', $items);
$AVE_Template->assign('mod_path', BANNER_DIR);
$AVE_Template->assign('kategs', $this->_showCategories());
$AVE_Template->assign('content', $AVE_Template->fetch($tpl_dir . 'kategs.tpl'));
break;
case 'save' :
if (isset($_POST['category_name'])) {
foreach($_POST['category_name'] as $id => $kateg) {
if(!empty($kateg)) {
$AVE_DB->Query("
UPDATE " . PREFIX . "_module_banner_categories
SET category_name = '" . addslashes($kateg) . "'
WHERE id = '" . (int)$id . "'
");
}
}
}
if (isset($_POST['del'])) {
foreach($_POST['del'] as $id => $kateg) {
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_module_banners
WHERE category_id = '" . (int)$id . "'
");
$AVE_DB->Query("
DELETE
FROM " . PREFIX . "_module_banner_categories
WHERE id = '" . (int)$id . "'
");
reportLog($_SESSION['user_name'] . ' - удалил категорию баннеров (' . (int)$id . ')', 2, 2);
}
}
header('Location:index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=kategs&cp=' . SESSION);
break;
case 'new' :
if(!empty($_REQUEST['category_name'])) {
$sql = $AVE_DB->Query("
INSERT
INTO " . PREFIX . "_module_banner_categories
SET category_name = '" . addslashes($_REQUEST['category_name']) . "'
");
reportLog($_SESSION['user_name'] . ' - добавил новую категорию (' . stripslashes($_REQUEST['category_name']) . ')', 2, 2);
}
header('Location:index.php?do=modules&action=modedit&mod=' . BANNER_DIR . '&moduleaction=kategs&cp=' . SESSION);
break;
}
}
/**
* ВНУТРЕННИЕ МЕТОДЫ
*/
function _getRandomPrefix() {
return rand(1000, 99999);
}
function _showCategories() {
global $AVE_DB;
$categories = array();
$sql = $AVE_DB->Query("SELECT * FROM " . PREFIX . "_module_banner_categories");
while($row = $sql->FetchRow()) {
array_push($categories, $row);
}
return $categories;
}
}
?>

View File

Before

Width:  |  Height:  |  Size: 8.1 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

@@ -4,7 +4,7 @@
$module = array(
'ModuleSysName' => 'media',
'ModuleVersion' => '2.26.0',
'ModuleVersion' => '3.31.0',
'ModuleAutor' => 'AVE.cms Team',
'ModuleCopyright' => '&copy; 2007-' . date('Y') . ' AVE.cms',
'ModuleStatus' => 1,

View File

@@ -1,6 +1,6 @@
[name]
MODULE_NAME = "Баннер"
MODULE_DESCRIPTION = "Данный модуль позволяет организовать удобное управление показами рекламных баннеров на вашем сайте. Для того, чтобы отобразить рекламный баннер, разместите системный тег <strong>[mod_banner:XXX]</strong> в нужном месте вашего шаблона сайта или содержимом документа.<br>Допустимые форматы рекламных баннеров: jpg, jpeg, png, gif, swf"
MODULE_DESCRIPTION = "Данный модуль позволяет организовать удобное управление показами рекламных баннеров на вашем сайте. Для того, чтобы отобразить рекламный баннер, разместите системный тег <strong>[mod_banner:XXX]</strong> в нужном месте вашего шаблона сайта или содержимом документа.<br>Допустимые форматы рекламных баннеров: jpg, jpeg, png, gif, webp"
[module]
BANNER_MODULE_NAME = "Управление модулем баннер"
@@ -34,8 +34,8 @@ BANNER_ENTER_NAME = "Пожалуйста, укажите название
BANNER_PLEASE_NAME = "Пожалуйста, укажите название баннера"
BANNER_NEW_CREATE = "Добавление нового баннера"
BANNER_EDIT = "Редактирование баннера"
BANNER_EDIT_INFO = "В данном разделе вы можете отредактировать параметры баннера, а также сменить текущее изображение на новое.<br>Допустимые форматы файлов: jpg, jpeg, png, gif, swf"
BANNER_NEW_INFO = "В данном разделе вы можете добавить новый баннер, установить количество и время показов баннера.<br>Допустимые форматы файлов: jpg, jpeg, png, gif, swf"
BANNER_EDIT_INFO = "В данном разделе вы можете отредактировать параметры баннера, а также сменить текущее изображение на новое.<br>Допустимые форматы файлов: jpg, jpeg, png, gif, webp"
BANNER_NEW_INFO = "В данном разделе вы можете добавить новый баннер, установить количество и время показов баннера.<br>Допустимые форматы файлов: jpg, jpeg, png, gif, webp"
BANNER_STATUS = "Активировать баннер?"
BANNER_NAME_FORM = "Название баннера:"
BANNER_CATEGORY_FORM = "Относится к категории:"
@@ -70,10 +70,11 @@ BANNER_WRONG_TYPE = "Баннер не загружен. Данный тип
BANNER_TARGET_TYPE = "Открывать в:"
BANNER_OPEN_IN_NEW = "В новом окне"
BANNER_OPEN_IN_THIS = "В текущем окне"
BANNER_WIDTH_SWF = "Ширина:"
BANNER_HEIGHT_SWF = "Высота:"
BANNER_FOR_SWF = "(для swf баннера)"
BANNER_WIDTH = "Ширина изображения баннера:"
BANNER_HEIGHT = "Высота изображения баннера:"
BANNER_FOR_SWF = "(0 - оставить как есть)"
BANNER_MOD_ALLOWS = "Модуль позволяет:"
BANNER_MOD_ALLOWS_A = "Организовать удобное управление показами рекламных баннеров на вашем сайте."
BANNER_MOD_ALLOWS_B = "Для того, чтобы отобразить рекламный баннер, разместите системный тег [mod_banner:XXX] в нужном месте вашего шаблона сайта или содержимом документа. Идентификаторы тегов указаны в разделе - Управление категориями."
BANNER_MOD_ALLOWS_C = "Допустимые форматы рекламных баннеров: jpg, jpeg, png, gif, swf."
BANNER_MOD_ALLOWS_C = "Допустимые форматы рекламных баннеров: jpg, jpeg, png, gif, webp."
BANNER_SET_COPY = "Скопировать в буфер обмена"

View File

@@ -12,8 +12,6 @@ if(!defined('BASE_DIR')) exit;
if(!defined('BANNER_DIR')) define('BANNER_DIR', 'media');
echo BANNER_DIR;
/**
* Обработка тэга модуля
*
@@ -22,7 +20,7 @@ echo BANNER_DIR;
function mod_banner($banner_id)
{
require_once(BASE_DIR . '/modules/' . BANNER_DIR . '/class/banner.php');
$banner = new ModulBanner;
$banner = new ModuleBanner;
$banner->displayBanner(stripslashes($banner_id));
}
@@ -31,7 +29,7 @@ if (isset($_REQUEST['module']) && $_REQUEST['module'] == BANNER_DIR)
if (is_numeric($_REQUEST['id']))
{
require_once(BASE_DIR . '/modules/' . BANNER_DIR . '/class/banner.php');
$banner = new ModulBanner;
$banner = new ModuleBanner;
$banner->fetch_addclick($_REQUEST['id']);
}
}
@@ -46,7 +44,7 @@ if (defined('ACP') && !empty($_REQUEST['moduleaction']))
$lang_file = BASE_DIR . '/modules/' . BANNER_DIR . '/lang/' . $_SESSION['user_language'] . '.txt';
$AVE_Template->config_load($lang_file, 'module');
$banner = new ModulBanner;
$banner = new ModuleBanner;
$AVE_Template->config_load($lang_file, 'module');
$config_vars = $AVE_Template->get_config_vars();
@@ -55,7 +53,7 @@ if (defined('ACP') && !empty($_REQUEST['moduleaction']))
switch($_REQUEST['moduleaction'])
{
case '1':
$banner->showBanner($tpl_dir);
$banner->showBanners($tpl_dir);
break;
case 'quicksave':
@@ -63,7 +61,7 @@ if (defined('ACP') && !empty($_REQUEST['moduleaction']))
break;
case 'kategs':
$banner->bannerKategs($tpl_dir);
$banner->bannerCategories($tpl_dir);
break;
case 'editbanner':

83
sql.php
View File

@@ -1,57 +1,62 @@
<?php
if (!defined('BASE_DIR')) exit;
/**
* AVE.cms - Модуль Баннеры
*
* @package AVE.cms
* @subpackage module_Banner
* @filesource
*/
/**
* mySQL-запросы для установки, обновления и удаления модуля
* AVE.cms - Модуль Баннеры (Modernized)
*/
$module_sql_install = array();
$module_sql_deinstall = array();
$module_sql_update = array();
$module_sql_deinstall[] = "DROP TABLE IF EXISTS `%%PRFX%%_modul_banner_categories`;";
$module_sql_deinstall[] = "DROP TABLE IF EXISTS `%%PRFX%%_modul_banners`;";
// УДАЛЕНИЕ
$module_sql_deinstall[] = "DROP TABLE IF EXISTS `%%PRFX%%_module_banner_categories`;";
$module_sql_deinstall[] = "DROP TABLE IF EXISTS `%%PRFX%%_module_banners`;";
$module_sql_install[] = "CREATE TABLE `%%PRFX%%_modul_banner_categories` (
`Id` mediumint(5) unsigned NOT NULL auto_increment,
`KatName` varchar(100) NOT NULL default '',
PRIMARY KEY (`Id`)
// УСТАНОВКА: Категории
$module_sql_install[] = "CREATE TABLE `%%PRFX%%_module_banner_categories` (
`id` mediumint(5) unsigned NOT NULL auto_increment,
`category_name` varchar(100) NOT NULL default '',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
$module_sql_install[] = "CREATE TABLE `%%PRFX%%_modul_banners` (
`Id` int(10) unsigned NOT NULL auto_increment,
`KatId` mediumint(5) unsigned NOT NULL default '1',
`Bannertags` varchar(255) NOT NULL default '',
`BannerUrl` varchar(255) NOT NULL default '',
`Gewicht` tinyint(3) unsigned NOT NULL default '0',
`Bannername` varchar(100) NOT NULL default '',
`Views` int(10) unsigned NOT NULL default '0',
`Klicks` int(10) unsigned NOT NULL default '0',
`BildAlt` varchar(255) NOT NULL default '',
`MaxKlicks` int(10) unsigned NOT NULL default '0',
`MaxViews` int(10) unsigned NOT NULL default '0',
`ZStart` smallint(2) unsigned NOT NULL default '0',
`ZEnde` smallint(2) unsigned NOT NULL default '0',
`Aktiv` tinyint(1) unsigned NOT NULL default '1',
`Target` varchar(255) NOT NULL default '_blank',
`Width` int(10) unsigned NOT NULL default '0',
`Height` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`Id`)
// УСТАНОВКА: Баннеры
$module_sql_install[] = "CREATE TABLE `%%PRFX%%_module_banners` (
`id` int(10) unsigned NOT NULL auto_increment,
`category_id` mediumint(5) unsigned NOT NULL default '1',
`banner_file` varchar(255) NOT NULL default '',
`banner_url` varchar(255) NOT NULL default '',
`weight` tinyint(3) unsigned NOT NULL default '0',
`banner_name` varchar(100) NOT NULL default '',
`views` int(10) unsigned NOT NULL default '0',
`clicks` int(10) unsigned NOT NULL default '0',
`image_alt` varchar(255) NOT NULL default '',
`max_clicks` int(10) unsigned NOT NULL default '0',
`max_views` int(10) unsigned NOT NULL default '0',
`start_hour` smallint(2) unsigned NOT NULL default '0',
`end_hour` smallint(2) unsigned NOT NULL default '0',
`is_active` tinyint(1) unsigned NOT NULL default '1',
`target` varchar(255) NOT NULL default '_blank',
`width` int(10) unsigned NOT NULL default '0',
`height` int(10) unsigned NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;";
$module_sql_install[] = "INSERT INTO `%%PRFX%%_modul_banner_categories` VALUES ('1', 'Категория 1');";
$module_sql_install[] = "INSERT INTO `%%PRFX%%_modul_banner_categories` VALUES ('2', 'Категория 2');";
$module_sql_install[] = "INSERT INTO `%%PRFX%%_module_banner_categories` VALUES (1, 'Категория 1');";
$module_sql_install[] = "INSERT INTO `%%PRFX%%_module_banner_categories` VALUES (2, 'Категория 2');";
$module_sql_install[] = "INSERT INTO `%%PRFX%%_modul_banners` VALUES ('', '1', 'media_ave.jpg', 'http://ave-cms.ru', '1', 'AVE.CMS-Banner', '0', '0', 'AVE.CMS- это бесплатная многофункциональная система управления сайтом.', '0', '0', '0', '0', '1', '_self', '0', '0');";
$module_sql_install[] = "INSERT INTO `%%PRFX%%_modul_banners` VALUES ('', '1', 'media_gitget.jpg', 'https://gitget.ru', '1', 'GitGet-Banner', '0', '0', 'Репозитории сообщества AVE.CMS. Все от сборки до модуля.', '0', '0', '0', '0', '1', '_blank', '0', '0');";
$module_sql_install[] = "INSERT INTO `%%PRFX%%_module_banners` VALUES (0, 1, 'media_ave.jpg', 'https://ave-cms.ru', 1, 'AVE.CMS-Banner', 0, 0, 'Бесплатная система управления сайтом.', 0, 0, 0, 0, 1, '_self', 0, 0);";
$module_sql_install[] = "INSERT INTO `%%PRFX%%_module_banners` VALUES (0, 1, 'media_gitget.jpg', 'https://gitget.ru', 1, 'GitGet-Banner', 0, 0, 'Репозитории сообщества AVE.CMS.', 0, 0, 0, 0, 1, '_blank', 0, 0);";
$module_sql_update[] = "UPDATE %%PRFX%%_module SET ModuleAveTag = '" . $modul['ModuleAveTag'] . "', ModulePHPTag = '" . $modul['ModulePHPTag'] . "', ModuleVersion = '" . $modul['ModuleVersion'] . "' WHERE ModuleSysName = '" . BANNER_DIR . "' LIMIT 1;";
$module_sql_update[] = "
UPDATE `%%PRFX%%_module`
SET
ModuleAveTag = '" . $module['ModuleAveTag'] . "',
ModulePHPTag = '" . $module['ModulePHPTag'] . "',
ModuleVersion = '" . $module['ModuleVersion'] . "'
WHERE
ModuleSysName = '" . $module['ModuleSysName'] . "'
LIMIT 1;
";
?>

View File

@@ -0,0 +1,13 @@
<div class="media-container mb-3">
<a target="{$banner.target|default:'_blank'}"
href="index.php?module={$mod_path}&amp;id={$banner.id}"
class="d-block">
<img src="{$abs_path}modules/{$mod_path}/files/{$banner.banner_file}"
class="img-fluid rounded"
alt="{$banner.banner_name|escape}: {$banner.image_alt|escape}"
title="{$banner.banner_name|escape}"
{if $banner.width > 0}width="{$banner.width}"{/if}
{if $banner.height > 0}height="{$banner.height}"{/if}
loading="lazy">
</a>
</div>

View File

@@ -21,13 +21,28 @@
</div>
</div>
<div class="widget">
<div class="head">
<h5>{#BANNER_SHOW_ALL#} |&nbsp;
<a href="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=newbanner&cp={$sess}&pop=1&onlycontent=1" data-height="650" data-width="950" data-modal="true" class="openDialog">{#BANNER_NEW_LINK#}</a> |&nbsp;
<a href="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=kategs&cp={$sess}">{#BANNER_CATEG_LINK#}</a></h5>
</div>
<ul class="tabs">
<li class="activeTab">
<a href="#tab1">{#BANNER_SHOW_ALL#}</a>
</li>
<li class="">
<a href="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=newbanner&cp={$sess}&pop=1&onlycontent=1" data-height="650" data-width="950" data-modal="true" class="openDialog">{#BANNER_NEW_LINK#}</a>
</li>
<li class="">
<a href="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=kategs&cp={$sess}">{#BANNER_CATEG_LINK#}</a>
</li>
</ul>
</div>
<table width="100%" border="0" cellpadding="8" cellspacing="1" class="tableStatic mainForm">
<thead>
<tr>
<td class="" colspan="9">&nbsp;</td>
</tr>
</thead>
<tr class="tableheader">
<td width="10">&nbsp;</td>
<td>{#BANNER_NAME_TABLE#} </td>
@@ -39,7 +54,8 @@
<td colspan="2">{#BANNER_ACTIONS#}</td>
</tr>
{foreach from=$items item=item}
{if ($item->Aktiv != 1) || ($item->Bannertags=='') || ($item->Klicks >= $item->MaxKlicks && $item->MaxKlicks != 0) || ($item->Views >= $item->MaxViews && $item->MaxViews != 0)}
{* Логика активности: Aktiv->is_active, Bannertags->banner_file, Klicks->clicks, Views->views *}
{if ($item->is_active != 1) || ($item->banner_file=='') || ($item->clicks >= $item->max_clicks && $item->max_clicks != 0) || ($item->views >= $item->max_views && $item->max_views != 0)}
{assign var=active value=0}
{else}
{assign var=active value=1}
@@ -52,21 +68,26 @@
<span class="toprightDir icon_sprite ico_unlock" title="{#BANNER_IS_ACTIVE#}">&nbsp;</span>
{/if}
</td>
<td><a href="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=editbanner&cp={$sess}&id={$item->Id}&pop=1&onlycontent=1" data-height="650" data-width="950" data-modal="true" class="toprightDir openDialog" title="{#BANNER_EDIT_LINK#}">{$item->Bannername}</a></td>
<td><a class="toprightDir fancy preview" href="../modules/{$mod_path}/files/{$item->Bannertags}" title="{#BANNER_VIEW_LINK#}" target="_blank">{$item->Bannertags}</a></td>
{* Id -> id, Bannername -> banner_name *}
<td><a href="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=editbanner&cp={$sess}&id={$item->id}&pop=1&onlycontent=1" data-height="700" data-width="950" data-modal="true" class="toprightDir openDialog" title="{#BANNER_EDIT_LINK#}">{$item->banner_name}</a></td>
{* Bannertags -> banner_file *}
<td><a class="toprightDir fancy preview" href="../modules/{$mod_path}/files/{$item->banner_file}" title="{#BANNER_VIEW_LINK#}" target="_blank">{$item->banner_file}</a></td>
<td>
{foreach from=$kategs item=k}
{if $k->Id==$item->KatId}{$k->KatName}{/if}
{* Id -> id, KatId -> category_id, KatName -> category_name *}
{if $k->id==$item->category_id}{$k->category_name}{/if}
{/foreach}
</td>
<td align="center">{if $item->ZStart<10}0{/if}{$item->ZStart}:00 - {if $item->ZEnde<10}0{/if}{$item->ZEnde}:00</td>
<td align="center">{$item->Klicks} / {if $item->MaxKlicks==0}~{else}{$item->MaxKlicks}{/if}</td>
<td align="center">{$item->Views} / {if $item->MaxViews==0}~{else}{$item->MaxViews}{/if}</td>
{* ZStart/ZEnde -> start_hour/end_hour *}
<td align="center">{if $item->start_hour<10}0{/if}{$item->start_hour}:00 - {if $item->end_hour<10}0{/if}{$item->end_hour}:00</td>
{* Klicks/Views -> clicks/views *}
<td align="center">{$item->clicks} / {if $item->max_clicks==0}~{else}{$item->max_clicks}{/if}</td>
<td align="center">{$item->views} / {if $item->max_views==0}~{else}{$item->max_views}{/if}</td>
<td width="1%" align="center">
<a class="topleftDir icon_sprite ico_edit openDialog" title="{#BANNER_EDIT_LINK#}" href="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=editbanner&cp={$sess}&id={$item->Id}&pop=1&onlycontent=1" data-height="650" data-width="950" data-modal="true">&nbsp;</a>
<a class="topleftDir icon_sprite ico_edit openDialog" title="{#BANNER_EDIT_LINK#}" href="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=editbanner&cp={$sess}&id={$item->id}&pop=1&onlycontent=1" data-height="700" data-width="950" data-modal="true">&nbsp;</a>
</td>
<td width="1%" align="center">
<a class="topleftDir icon_sprite ico_delete ConfirmDelete" title="{#BANNER_DELETE_LINK#}" dir="Удалить" name="{#BANNER_DELETE_CONFIRM#}" href="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=delbanner&cp={$sess}&id={$item->Id}">&nbsp;</a>
<a class="topleftDir icon_sprite ico_delete ConfirmDelete" title="{#BANNER_DELETE_LINK#}" dir="Удалить" name="{#BANNER_DELETE_CONFIRM#}" href="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=delbanner&cp={$sess}&id={$item->id}">&nbsp;</a>
</td>
</tr>
{/foreach}

View File

@@ -1,21 +1,24 @@
<script type="text/javascript" language="JavaScript">
function check_name() {ldelim}
if (document.getElementById('Bannername').value == '') {ldelim}
if (document.getElementById('banner_name').value == '') {ldelim}
alert("{#BANNER_PLEASE_NAME#}");
document.getElementById('Bannername').focus();
document.getElementById('banner_name').focus();
return false;
{rdelim}
return true;
{rdelim}
</script>
<div class="title">
<h5>{if $smarty.request.moduleaction!='newbanner'}{#BANNER_EDIT#}{else}{#BANNER_NEW_CREATE#}{/if}</h5>
</div>
<div class="widget">
<div class="body">
{if $smarty.request.moduleaction!='newbanner'}{#BANNER_EDIT_INFO#}{else}{#BANNER_NEW_INFO#}{/if}
{if $smarty.request.moduleaction!='newbanner'}{#BANNER_EDIT_INFO#}{else}{#BANNER_NEW_INFO#}{/if}
</div>
</div>
</div>
{if $folder_protected==1 && $smarty.request.moduleaction=='newbanner'}
<br />{#BANNER_NOT_WRITABLE#}
{else}
@@ -27,54 +30,48 @@ function check_name() {ldelim}
</tr>
<tr>
<td class="first">{#BANNER_STATUS#}</td>
<td class="second"><input name="Aktiv" type="checkbox" id="Aktiv" value="1" {if $item->Aktiv==1}checked{/if} /></td>
<td class="second"><input name="is_active" type="checkbox" id="is_active" value="1" {if $item->is_active==1}checked{/if} /></td>
</tr>
<tr>
<td width="300" class="first">{#BANNER_NAME_FORM#} </td>
<td class="second"><input style="width:300px" name="Bannername" id="Bannername" type="text" value="{$item->Bannername}" /></td>
<td class="second"><input style="width:300px" name="banner_name" id="banner_name" type="text" value="{$item->banner_name}" /></td>
</tr>
<tr>
<td width="300" class="first">{#BANNER_CATEGORY_FORM#}</td>
<td class="second">
<select name="KatId" id="KatId">
<select name="category_id" id="category_id">
{foreach from=$kategs item=k}
<option value="{$k->Id}" {if $k->Id==$item->KatId}selected{/if}>{$k->KatName}</option>
<option value="{$k->id}" {if $k->id==$item->category_id}selected{/if}>{$k->category_name}</option>
{/foreach}
</select>
</td>
</tr>
<tr>
<td width="300" class="first">{#BANNER_TARGET_URL#}</td>
<td class="second"><input style="width:300px" name="BannerUrl" type="text" value="{$item->BannerUrl|default:'http://'}" /></td>
<td class="second"><input style="width:300px" name="banner_url" type="text" value="{$item->banner_url|default:'https://'}" /></td>
</tr>
<tr>
<td width="300" class="first">{#BANNER_TARGET_TYPE#}</td>
<td class="second">
<select name="Target">
<option value="_blank" {if $item->Target == '_blank'}selected{/if}>{#BANNER_OPEN_IN_NEW#}</option>
<option value="_self" {if $item->Target == '_self'}selected{/if}>{#BANNER_OPEN_IN_THIS#}</option>
<select name="target">
<option value="_blank" {if $item->target == '_blank'}selected{/if}>{#BANNER_OPEN_IN_NEW#}</option>
<option value="_self" {if $item->target == '_self'}selected{/if}>{#BANNER_OPEN_IN_THIS#}</option>
</select>
</td>
</tr>
{if $smarty.request.moduleaction != 'newbanner'}
<tr>
<td width="300" class="first">{#BANNER_OLD_IMAGE#}</td>
<td class="second">
{if $item->Bannertags==''}-{else}
{if $item->swf == false}
<img src="../modules/{$mod_path}/files/{$item->Bannertags}" alt="" border="" />
{else}
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="https://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" width="{$item->Width}" height="{$item->Height}" id="reklama" align="middle">
<param name="allowScriptAccess" value="sameDomain" />
<param name="movie" value="../modules/{$mod_path}/files/{$item->Bannertags}" />
<param name="quality" value="high" />
<embed src="../modules/{$mod_path}/files/{$item->Bannertags}" quality="high" width="{$item->Width}" height="{$item->Height}" name="reklama" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="https://www.macromedia.com/go/getflashplayer" />
</object>
{/if}
{if $item->banner_file==''}-{else}
{* Убрали проверку на SWF, выводим только картинку *}
<img src="../modules/{$mod_path}/files/{$item->banner_file}" alt="" style="max-width: 200px; height: auto;" />
{/if}
</td>
</tr>
{/if}
<tr>
<td width="300" class="first">
{if $smarty.request.moduleaction != 'newbanner'}
@@ -85,7 +82,7 @@ function check_name() {ldelim}
</td>
<td class="second">{if $folder_protected==1 && $smarty.request.moduleaction!='newbanner'} {#BANNER_NOT_WRITABLE2#} {else} <input name="New" type="file" size="55" />{/if}</td>
</tr>
{if $item->Bannertags!='' && $smarty.request.moduleaction!='newbanner'}
{if $item->banner_file!='' && $smarty.request.moduleaction!='newbanner'}
<tr>
<td width="300" class="first">{#BANNER_OLD_DELETE#}</td>
<td class="second"><input name="del" type="checkbox" id="del" value="1"></td>
@@ -93,15 +90,15 @@ function check_name() {ldelim}
{/if}
<tr>
<td width="300" class="first">{#BANNER_ALT_TEXT#}</td>
<td class="second"><input style="width:300px" name="BildAlt" type="text" id="BildAlt" value="{$item->BildAlt}" /></td>
<td class="second"><input style="width:300px" name="image_alt" type="text" id="image_alt" value="{$item->image_alt}" /></td>
</tr>
<tr>
<td width="300" class="first">{#BANNER_PRIOR#}</td>
<td class="second">
<select style="width:50px" name="Gewicht" id="Gewicht">
<option value="1" {if $item->Gewicht==1}selected{/if}>1</option>
<option value="2" {if $item->Gewicht==2}selected{/if}>2</option>
<option value="3" {if $item->Gewicht==3}selected{/if}>3</option>
<select style="width:50px" name="weight" id="weight">
<option value="1" {if $item->weight==1}selected{/if}>1</option>
<option value="2" {if $item->weight==2}selected{/if}>2</option>
<option value="3" {if $item->weight==3}selected{/if}>3</option>
</select>
<small>{#BANNER_PRIOR_DESC#}</small>
</td>
@@ -109,29 +106,29 @@ function check_name() {ldelim}
{if $smarty.request.moduleaction!='newbanner'}
<tr>
<td width="300" class="first">{#BANNER_VIEW_RESET#}</td>
<td class="second"><input name="Anzeigen" type="text" id="Anzeigen" value="{$item->Views}" size="6" /> </td>
<td class="second"><input name="views" type="text" id="views" value="{$item->views}" size="6" /> </td>
</tr>
{/if}
<tr>
<td width="300" class="first">{#BANNER_VIEWS_MAX#}<br /><small>{#BANNER_VIEWS_INFO#}</small></td>
<td class="second"><input name="MaxViews" type="text" id="MaxViews" value="{$item->MaxViews|default:'0'}" size="6" /> <small>{#BANNER_UNLIMIT#}</small></td>
<td class="second"><input name="max_views" type="text" id="max_views" value="{$item->max_views|default:'0'}" size="6" /> <small>{#BANNER_UNLIMIT#}</small></td>
</tr>
{if $smarty.request.moduleaction!='newbanner'}
<tr>
<td width="300" class="first">{#BANNER_CLICK_RESET#}</td>
<td class="second"><input name="Klicks" type="text" id="Klicks" value="{$item->Klicks}" size="6" /></td>
<td class="second"><input name="clicks" type="text" id="clicks" value="{$item->clicks}" size="6" /></td>
</tr>
{/if}
<tr>
<td width="300" class="first">{#BANNER_CLICKS#}<br><small>{#BANNER_CLICKS_INFO#}</small></td>
<td class="second"><input name="MaxKlicks" type="text" id="MaxKlicks" value="{$item->MaxKlicks|default:'0'}" size="6" /> <small>{#BANNER_UNLIMIT#}</small></td>
<td class="second"><input name="max_clicks" type="text" id="max_clicks" value="{$item->max_clicks|default:'0'}" size="6" /> <small>{#BANNER_UNLIMIT#}</small></td>
</tr>
<tr>
<td class="first">{#BANNER_HOUR_START#}<br /><small>{#BANNER_START_INFO#}</small></td>
<td class="second">
<select style="width:50px" name="ZStart" id="ZStart">
<select style="width:50px" name="start_hour" id="start_hour">
{section name=s loop=25 start=1}
<option value="{$smarty.section.s.index-1}" {if $item->ZStart==$smarty.section.s.index-1}selected{/if}>{$smarty.section.s.index-1}</option>
<option value="{$smarty.section.s.index-1}" {if $item->start_hour==$smarty.section.s.index-1}selected{/if}>{$smarty.section.s.index-1}</option>
{/section}
</select>
<small>{#BANNER_START_INFO2#}</small>
@@ -140,21 +137,21 @@ function check_name() {ldelim}
<tr>
<td class="first">{#BANNER_HOUR_END#}<br /><small>{#BANNER_END_INFO#}</small></td>
<td class="second">
<select style="width:50px" name="ZEnde" id="ZEnde">
<select style="width:50px" name="end_hour" id="end_hour">
{section name=e loop=25 start=1}
<option value="{$smarty.section.e.index-1}" {if $item->ZEnde==$smarty.section.e.index-1}selected{/if}>{$smarty.section.e.index-1}</option>
<option value="{$smarty.section.e.index-1}" {if $item->end_hour==$smarty.section.e.index-1}selected{/if}>{$smarty.section.e.index-1}</option>
{/section}
</select>
<small>{#BANNER_END_INFO2#}</small>
</td>
</tr>
<tr>
<td class="first">{#BANNER_WIDTH_SWF#}<br /><small>{#BANNER_FOR_SWF#}</small></td>
<td class="second"><input name="Width" type="text" id="Width" value="{$item->Width|default:'0'}" size="6" /></td>
<td class="first">{#BANNER_WIDTH#}<br /><small>{#BANNER_FOR_SWF#}</small></td>
<td class="second"><input name="width" type="text" id="width" value="{$item->width|default:'0'}" size="6" /> <small>(px)</small></td>
</tr>
<tr>
<td class="first">{#BANNER_HEIGHT_SWF#}<br /><small>{#BANNER_FOR_SWF#}</small></td>
<td class="second"><input name="Height" type="text" id="Height" value="{$item->Height|default:'0'}" size="6" /></td>
<td class="first">{#BANNER_HEIGHT#}<br /><small>{#BANNER_FOR_SWF#}</small></td>
<td class="second"><input name="height" type="text" id="height" value="{$item->height|default:'0'}" size="6" /> <small>(px)</small></td>
</tr>
</table><br />
{if $smarty.request.moduleaction == 'newbanner'}

View File

@@ -1,16 +1,20 @@
<script type="text/javascript" language="JavaScript">
function check_name() {ldelim}
if (document.getElementById('Name').value == '') {ldelim}
// Name -> category_name
if (document.getElementById('category_name_new').value == '') {ldelim}
alert("{#BANNER_ENTER_NAME#}");
document.getElementById('Name').focus();
document.getElementById('category_name_new').focus();
return false;
{rdelim}
return true;
{rdelim}
var clipboard = new Clipboard('.copyBtn');
</script>
<div class="title">
<h5>{#BANNER_MODULE_NAME#}</h5>
</div>
<div class="widget">
<div class="body">
<strong>{#BANNER_MOD_ALLOWS#}</strong>
@@ -21,25 +25,41 @@ function check_name() {ldelim}
</ul>
</div>
</div>
<div class="breadCrumbHolder module">
<div class="breadCrumb module">
<ul>
<li class="firstB"><a href="index.php" title="{#MAIN_PAGE#}">{#MAIN_PAGE#}</a></li>
<li><a href="index.php?do=modules&amp;cp={$sess}">{#MODULES_SUB_TITLE#}</a></li>
<li><a href="index.php?do=modules&action=modedit&mod=media&moduleaction=1&cp={$sess}">{#BANNER_SHOW_ALL#}</a>
<li><strong class="code">{#BANNER_CATEG_LINK#}</strong></li>
<li><a href="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=1&cp={$sess}">{#BANNER_SHOW_ALL#}</a></li>
<li><strong class="code">{#BANNER_CATEG_LINK#}</strong></li>
</ul>
</div>
</div>
<div class="widget">
<div class="head">
<h5><a href="index.php?do=modules&action=modedit&mod=media&moduleaction=1&cp={$sess}"><span style="color:#177BBB;">{#BANNER_SHOW_ALL#}</span></a> |&nbsp;
<a href="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=newbanner&cp={$sess}&pop=1&onlycontent=1" data-height="650" data-width="950" data-modal="true" class="openDialog">{#BANNER_NEW_LINK#}</a> |&nbsp;
<a href="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=kategs&cp={$sess}"><span style="color:#FFF;">{#BANNER_CATEG_LINK#}</span></a></h5>
</div>
<ul class="tabs">
<li class="">
<a href="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=1&cp={$sess}">{#BANNER_SHOW_ALL#}</a>
</li>
<li class="">
<a href="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=newbanner&cp={$sess}&pop=1&onlycontent=1" data-height="650" data-width="950" data-modal="true" class="openDialog">{#BANNER_NEW_LINK#}</a>
</li>
<li class="activeTab">
<a href="#tab3">{#BANNER_CATEG_LINK#}</a>
</li>
</ul>
</div>
<form method="post" action="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=kategs&cp={$sess}&sub=save" enctype="multipart/form-data">
<table width="100%" border="0" cellpadding="8" cellspacing="1" class="tableStatic mainForm">
<thead>
<tr>
<td class="" colspan="9">&nbsp;</td>
</tr>
</thead>
<tr class="tableheader">
<td width="1%" align="center"><span class="icon_sprite ico_delete">&nbsp;</span></td>
<td width="100">{#BANNER_CATEGORY_TAG#}</td>
@@ -48,33 +68,44 @@ function check_name() {ldelim}
{foreach from=$items item=item}
<tr id="table_rows">
<td width="1%">
<input title="{#BANNER_MARK_DELETE#}" name="del[{$item->Id}]" type="checkbox" id="del[{$item->Id}]" value="1" />
{* Id -> id *}
<input title="{#BANNER_MARK_DELETE#}" name="del[{$item->id}]" type="checkbox" id="del[{$item->id}]" value="1" />
</td>
<td width="100">
<input name="textfield" type="text" value="[mod_banner:{$item->Id}]" readonly/>
<div style="display: flex; align-items: center; gap: 5px;">
<input id="tag_{$item->id}" name="textfield" type="text" value="[mod_banner:{$item->id}]" readonly size="32" style="width: 114px;"/>
<a style="text-align: center; padding: 5px 3px 4px 3px;" class="whiteBtn copyBtn topDir" href="javascript:void(0);" data-clipboard-action="copy" data-clipboard-target="#tag_{$item->id}" title="{#BANNER_SET_COPY#}">
<img style="margin-top: -3px; position: relative; top: 1px; padding: 0 3px;" class="clippy" src="{$ABS_PATH}admin/templates/images/clippy.svg" width="13"></a>
</div>
</td>
<td>
<input name="KatName[{$item->Id}]" type="text" id="KatName[{$item->Id}]" value="{$item->KatName|escape:html|stripslashes}" size="60">
{* KatName -> category_name *}
<input name="category_name[{$item->id}]" type="text" id="category_name[{$item->id}]" value="{$item->category_name|escape:html|stripslashes}" size="60">
</td>
</tr>
{/foreach}
</table><br />
<input type="submit" style="margin-left:10px;" class="button basicBtn" value="{#BANNER_BUTTON_SAVE#}" />
</form>
<div class="widget">
<div class="head">
<h5>{#BANNER_CATEGORY_NEW#}</h5>
</div>
</div>
</div>
<form action="index.php?do=modules&action=modedit&mod={$mod_path}&moduleaction=kategs&cp={$sess}&sub=new" method="post" onSubmit="return check_name();">
<table width="100%" border="0" cellpadding="8" cellspacing="1" class="tableStatic mainForm">
<tr>
<td class="tableheader">{#BANNER_CATEGORY#}</td>
</tr>
<tr>
<td class="second">
<input name="KatName" type="text" id="Name" size="60">&nbsp;
<input name="submit" type="submit" style="margin-left:-5px; margin-top:10px;" class="button basicBtn" value="{#BANNER_BUTTON_ADD#}" />
<div style="display: flex; align-items: center; gap: 15px;">
<span style="font-weight: bold;">{#BANNER_CATEGORY#}</span>
<input name="category_name" type="text" id="category_name_new" size="30" style="width: 250px; margin: 0;">
<input name="submit" type="submit" class="button basicBtn" style="margin: 0;" value="{#BANNER_BUTTON_ADD#}" />
</div>
</td>
</tr>
</table>