Функция getRandomAd() позволяет нам вывести случайное объявление при помощи PHP-функции rand(). Функция возвращает ID основного ключа, ID клиента, URL и прямой пусть до объявления.
Данная функция также обновляет таблицу активности для данного конкретного рекламного объявления. Если в таблице активности нет никаких данных для данного объявления (то есть, данное рекламное объявление отображается впервые), то функция вносит новую запись в таблицу.
function getRandomAd() {
$sql = "SELECT
ad_id,
ad_client_id,
ad_title,
ad_url,
ad_path
FROM
devdrive_ads
WHERE
status=1
AND deleted=0
ORDER BY
rand()
LIMIT 0, 1";
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}
// assign result to array
$aRow = $rsTmp->fetchRow(DB_FETCHMODE_ASSOC);
// assign return array values
$return["Ad Id"] = $aRow["ad_id"];
$return["Client Id"] = $aRow["ad_client_id"];
$return["Title"] = $aRow["ad_title"];
$return["URL"] = $aRow["ad_url"];
$return["Path"] = $aRow["ad_path"];
// update advertisement activity
$sql = "UPDATE devdrive_ads_activity SET
ad_view_cnt=ad_view_cnt+1,
ad_activity_month=".date("m").",
ad_activity_year=".date("Y")."
WHERE
ad_id=".$aRow["ad_id"]."
AND ad_activity_month=".date("m")."
AND ad_activity_year=".date("Y");
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}
// check if update affected any rows
if ($this->_oConn->affectedRows() < 1) {
// add new record for auditing
$sql = "INSERT INTO devdrive_ads_activity (
ad_id,
ad_view_cnt,
ad_activity_month,
ad_activity_year
) values (
".$aRow["ad_id"].",
1,
".date("m").",
".date("Y")."
)";
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}
}
return $return;
}
Функция redirectAd() обновляет таблицу активности, если пользователь кликает по баннеру. Если в таблице активности нет никаких данных для данного объявления (то есть, данное рекламное объявление отображается впервые), то функция вносит новую запись в таблицу.
function redirectAd() {
// update activity logs
$sql = "UPDATE devdrive_ads_activity SET
ad_click_cnt=ad_click_cnt+1,
ad_activity_month=".date("m").",
ad_activity_year=".date("Y")."
WHERE
ad_id=".$this->_id."
AND ad_activity_month=".date("m")."
AND ad_activity_year=".date("Y");
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}
// check if any rows were updated
if ($this->_oConn->affectedRows() < 1) {
// add new activity record
$sql = "INSERT INTO devdrive_ads_activity (
ad_id,
ad_click_cnt,
ad_activity_month,
ad_activity_year
) values (
".$iAdId.",
1,
".date("m").",
".date("Y")."
)";
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}
}
return true;
}
Функция deleteAd() устанавливает статус для записи в таблице ads на deleted и запускает функцию deactivateAd().
function deleteAd() {
$sql = "UPDATE devdrive_ads SET
deleted=1,
deleted_dt=(NOW())
WHERE
ad_id=".$this->_id;
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}
$this->deactivateAd();
return true;
}
Функция deleteClient() устанавливает статус для записи в таблице clients на deleted. Также функция устанавливает статус deleted для всех объявлений данного клиента.
function deleteClient() {
$sql = "UPDATE devdrive_ads_clients SET
status=0,
deleted=1,
deleted_dt=(NOW())
WHERE
ad_client_id=".$this->_id;
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}
$sql = "UPDATE devdrive_ads SET
status=0,
deleted=1,
deleted_dt=(NOW() )
WHERE
ad_client_id=".$this->_id;
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}
}
Функция activateAd() устанавливает статус для записи в таблице ads на active.
function activateAd() {
$sql = "UPDATE devdrive_ads SET
status=1
WHERE
ad_id=".$this->_id;
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}
}
Функция activateClient() устанавливает статус для записи в таблице clients на active.
function activateClient() {
$sql = "UPDATE devdrive_ads_clients SET
status=1
WHERE
ad_client_id=".$this->_id;
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}
}
Функция deactivateAd() устанавливает статус для записи в таблице ads на inactive, но не удаляет эту запись.
function deactivateAd() {
$sql = "UPDATE devdrive_ads SET
status=0
WHERE
ad_id=".$this->_id;
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}
}
Функция deactivateClient() устанавливает статус для записи в таблице clients на inactive, но не удаляет эту запись.
function deactivateClient() {
$sql = "UPDATE devdrive_ads_clients SET
status=0
WHERE
ad_client_id=".$this->_id;
if (DB::isError($rsTmp = $this->_oConn->query($sql))) {
catchExc($rsTmp->getMessage());
return false;
}
}
} // close the class definition
?>
Теперь мы закончили определение функций в классе ads, и можем приступить к разработке интерфейса. В следующем уроке мы расскажем о создании форм, которые позволяют администратору веб-сайта управлять баннерными рекламными кампаниями.