Avatar billede Slettet bruger
16. april 2008 - 16:01 Der er 11 kommentarer og
1 løsning

Banner sortering (Avanceret)

Hej eksperter.
For et par år tilbage lavede jeg denne funktion som 'vælger' et banner.

Kort om funktionen:
Først henter vi bannerne ud, men regner så også ud et slags priotets % for hvert banner.
[id] er vores id
[navn] vores navn
[start] vores start tal (af priotets udregningen)
[end] vores slut tal som bliver den næstes start tal
[priority] prioteten på banneret (0-100 i databasen)
Så smider den bannerne i et array (output):
   
######### OUTPUT DELEN START ##########
Array
(
    [0] => Array
        (
            [id] => 1
            [navn] => adtech.png
            [start] => 0
            [end] => 7
            [priority] => 10
        )

    [1] => Array
        (
            [id] => 2
            [navn] => exp.jpg
            [start] => 7
            [end] => 43
            [priority] => 50
        )

    [2] => Array
        (
            [id] => 3
            [navn] => 1sol25sep07.swf
            [start] => 43
            [end] => 100
            [priority] => 78
        )

)
######### OUTPUT DELEN SLUT ##########
Så laver vi et random tal (0-100)

Og finder frem til det banner der skal vælges ved hjælp af det random tal.
Lad os antage random tal = 48;
Den finder det banner der har [start] tal under random og [end] tal over/ligmed random. (så bannerets 'tal' er i midten)

Og så returnere den banneret.

Hvis det skulle opstå den ikke finder noget, sætter vi den til at starte forfra (ved kald af funktionens egen navn)

######### KODE DELEN START ##########

function getRandomBanner()
{
    $sql = "
        SELECT b.bannerID, b.billede, ROUND(b.prioritet * 100 / SUM(b2.prioritet)) AS diff, b.prioritet
        FROM banner b
        LEFT JOIN banner b2 ON (b2.til > NOW() AND b2.fra < NOW() AND b2.visninger < b.maksvisning)
        WHERE b.til > NOW() AND b.fra < NOW() AND b.visninger < b.maksvisning
        GROUP BY b.bannerID
        ";
        $banner_row = mysql_query($sql);
       
        $arr = array();
        $start = 0;
        while($r = mysql_fetch_array($banner_row))
        {   
            $arr[] = array("id"=>$r['bannerID'],"navn"=>$r['billede'],"start"=>$start,"end"=>$r['diff']+$start,"priority"=>$r['prioritet']);
            $start += $r['diff'];
    }
/*
echo "<pre>";
print_r($arr);
//echo $sql;
echo "</pre>";
*/

    $random = rand(0, 100);
    //echo "rand: ".$random;

    foreach ($arr as $array)
    {
        if($array['start'] < $random && $array['end'] >= $random) {
            $sql2 = "
                    UPDATE banner SET visninger = visninger+1, lastip = '".$_SERVER['REMOTE_ADDR']."'
                    WHERE bannerID = '$array[id]' AND lastip <> '".$_SERVER['REMOTE_ADDR']."'
                    ";
            mysql_query($sql2);
                return "<a href=\"banner.php?id=". $array['id'] ."\" target=\"_blank\"><img src=\"banner/". $array['navn'] ."\" style=\"border: 0px;\"></a>";
        }
    }
    reset($arr);
    return getRandomBanner($arr);
}
######### KODE DELEN SLUT ##########



Det jeg ønsker er at den også kan smide mig en Flash fil ud som banner.

Men jeg benytter mig af den nyere måde end embed (SWFObject)
Hvor jeg har et div/span tag.

Her kommer billederne ud: (men også den jeg bruger til flash:
<div id="flashcontent"><?PHP echo getRandomBanner(); ?></div>


            <script type="text/javascript">
              var so = new SWFObject("swfFilen.php", "swf", "600", "80", "8");
              so.write("flashcontent");
            </script>
Avatar billede fant0mas Nybegynder
16. april 2008 - 16:27 #1
Se jakobdos script http://www.eksperten.dk/artikler/1141
Brug den switch til at bestemme typen.
Så skal en swf case selvfølgelig tilføjes.
Avatar billede Slettet bruger
16. april 2008 - 16:49 #2
Det er jo en resizer og ikke et banner rotations system
Avatar billede Slettet bruger
16. april 2008 - 17:35 #3
hehe i linjen:
var so = new SWFObject("swfFilen.php", "swf", "600", "80", "8");

->

var so = new SWFObject("swfFilen.swf", "swf", "600", "80", "8");
Avatar billede fant0mas Nybegynder
16. april 2008 - 17:47 #4
Haha. det er tilladt at tænke lidt selv.

$ext = strtolower( pathinfo( $filename, PATHINFO_EXTENSION ) );
switch ($ext) {
    case 'jpeg':
    case 'jpg':
    case 'gif':
    case 'png':
    case 'bmp':
        $output = '<a href="banner.php?id="'.$array['id'].'" target="_blank"><img src="banner/'.$array['navn'].'" style="border: 0px;"></a>';   
        break;
    case 'swf':
        $output = '<script type="text/javascript">
                    var so = new SWFObject("'.$array['navn'].'", "swf", "600", "80", "8");
                    so.write("flashcontent");
                    </script>';
        break;
    default:
        break;
    return $output;
}
Avatar billede Slettet bruger
17. april 2008 - 00:54 #5
F**k ja self!!
Smid du lige et svar!?
Avatar billede fant0mas Nybegynder
17. april 2008 - 01:21 #6
:D Svar
Avatar billede Slettet bruger
17. april 2008 - 12:55 #7
Men måske du kan hjælpe mig med mit ekstra spm?
Jeg laver en ny tråd til dig på 100 pts. hvis du kan svare:

Pt. kører mit system på at der både er visning og klik tilbage for at blive vist.
Men hvad nu hvis man laver en aftale med en, at de kan få 5000 klik, og ikke noget med visninger, det er bare ekstra bonus.
Hvordan kan jeg så evt. lave det i databasen?

Vil gerne ha' muligheden for både at sætte en maks på visninger og klik.
Men ville være rart hvis man kunne sætte den en af dem uendeligt - alt efter hvad type reklame spot der er blevet solgt, hvis du kan forstå mig?
Avatar billede fant0mas Nybegynder
17. april 2008 - 14:40 #8
Det er jeg ikke sikker på jeg kan.
Men er det du vil, at sætte prioriteringen ned, hvis x antal klik er opnået?
Avatar billede Slettet bruger
17. april 2008 - 14:47 #9
Nej mere at lave så du kan skrive:
Banner #1:> Skal vises 5000 gange (så er det lige meget med 1 klik eller 5mill) den skal blive vist indtil de 5000 visninger er blevet vist.
Banner #2:> Maksklik 500, kan være den kun bliver vist 500 gange, men kan også være mange flere visninger.

Banner #3:> (Sådan som systemet er opbygget nu): kan vises 5000 gange, eller maks få 500 klik.
Avatar billede fant0mas Nybegynder
17. april 2008 - 15:13 #10
Jamen det er vel en smal sag. -Der skal bare tilføjes nogle parametre til din funktion, samt rettes i din query.
function getRandomBanner($click=null, $show=null){
Avatar billede Slettet bruger
17. april 2008 - 16:08 #11
Tror du misforstår mig.
Men smider i hvert fald lige et nyt spm under MySQL kategorien.
Avatar billede Slettet bruger
17. april 2008 - 16:22 #12
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester