首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 實現類 ASP AdRotator 廣告輪播組件

     編輯:PHP 綜合知識

組件簡介

AdRotator 類模仿 ASP 經典 AdRotator 組件,支援從文本配置文件讀取廣告列表,隨機輪播,可設定寬高、邊框、跳轉頁、目標窗口等屬性。

類結構與核心方法

<?php
class AdRotator {
    var $Target = "_blank";      // 鏈接目標窗口
    var $Width = "460";          // 廣告寬度
    var $Height = "60";          // 廣告高度
    var $Border = 0;             // 邊框
    var $Redirect = "";          // 跳轉中轉頁
    var $BannerData = array();   // 廣告數據緩存
    var $RandTemp = 1;           // 上次隨機ID,防連續重複

    function AdRotator() {}      // 構造函數

    // 公開方法:獲取廣告HTML
    function GetAdvertisement($adfile) {
        if (count($this->BannerData) == 0) {
            $this->BannerData = $this->ReadAdFile($adfile);
        }
        $AdData = $this->BannerData;
        $uplimited = count($AdData);

        // 隨機選取,避免連續重複
        srand((double)microtime() * 1000000000000000000);
        $id = @rand(1, $uplimited);
        while ($this->RandTemp == $id) {
            srand((double)microtime() * 1000000000000000000);
            $id = @rand(1, $uplimited);
        }
        $this->RandTemp = $id;

        // 組裝輸出HTML
        $LinkString = " <a href=\"" . $this->Redirect . "?url=" . $AdData[$id]["url"] .
            "\" Target=\"" . $this->Target . "\" Title=\"" . $AdData[$id]["title"] . "\">";
        $LinkString .= " <img border=\"" . $this->Border . "\" src=\"" . $AdData[$id]["image"] .
            "\" width=\"" . $this->Width . "\" height=\"" . $this->Height . "\">";
        $LinkString .= "</a>";
        return $LinkString;
    }

    // 私有方法:解析配置文件
    function ReadAdFile($adfile) {
        $FP = fopen($adfile, "r");
        $switchto = "";
        $i = 0;
        while ($buffer = @fgets($FP, 1024)) {
            if (!eregi("#", $buffer)) { // 跳過註釋行
                if (eregi("^\*", $buffer)) { $switchto = "off"; } // * 後進入廣告數據區
                $SetTemp = split("=", $buffer);
                if ($switchto == "") { // 解析全局設置
                    switch ($SetTemp[0]) {
                        case "REDIRECT": $this->Redirect = $SetTemp[1]; break;
                        case "WIDTH":    $this->Width = $SetTemp[1]; break;
                        case "HEIGHT":   $this->Height = $SetTemp[1]; break;
                        case "BORDER":   $this->Border = $SetTemp[1]; break;
                        case "TARGET":   $this->Target = $SetTemp[1]; break;
                    }
                } else { // 解析單條廣告
                    switch ($SetTemp[0]) {
                        case "image": $i++; $BannerData[$i]["image"] = $SetTemp[1]; break;
                        case "url":   $BannerData[$i]["url"] = $SetTemp[1]; break;
                        case "title": $BannerData[$i]["title"] = $SetTemp[1]; break;
                        case "rate":  $BannerData[$i]["rate"] = $SetTemp[1]; break; // 預留權重
                    }
                }
            }
        }
        return $BannerData;
    }
}
?>

配置文件格式 (banner.txt)

REDIRECT=./adredir.asp
WIDTH=468
HEIGHT=60
BORDER=0
*
# 註釋行以 # 開頭
# 某公司廣告1
image=../banner/1.gif
url=https://www.example.com1
title=One
rate=30
# 廣告2...
image=../banner/2.gif
url=https://www.example.com2
title=Two
rate=70
----結束----
  • * 分隔全局設置與廣告數據區
  • # 開頭為註釋
  • 每組廣告包含 image、url、title、rate(權重,當前版本未啟用)

使用範例

<?php
$banner = new AdRotator();
echo $banner->GetAdvertisement("./banner.txt");
echo $banner->GetAdvertisement("./banner.txt"); // 同頁多處調用不會連續重複
?>

特色與改進方向

  • 純 PHP 實現,無需 COM 組件,跨平台
  • 配置文件文本格式,易維護
  • 防連續重複邏輯提升用戶體驗
  • 改進建議:啟用 rate 加權隨機、支援圖片預緩存、增加點擊統計、改用 preg_* 替代棄用的 eregi/split
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved