Avatar billede khm1985 Nybegynder
09. juni 2008 - 16:04 Der er 17 kommentarer

Flash AdRotator

Hej Eksperter :)

Jeg sidder og skal lave en adrotator der kan rotere flash bannere, ved selv at gennemse undermapper, der har samme navn som noget af URL'en. Indtil videre har jeg fundet noget C#-kode, der udbygger den alm. AdRotator, ved at give den funktionaliteten til at hente flash reklamer ind. Koden har jeg fundet her: "http://blog.sotirovic.com/index.php/asp-net-csharp-code/web-controls/banner-rotator-adrotator/"

Nu vil jeg så gerne have koden til at lede i undermapper efter alle flash reklamer, der nu måtte være i hver enkelt undermappe, i stedet for at bruge XML fil som advertisement fil.

Jeg har fundet frem til at klassen Request.RawURL, kan forkorte en URL fra eks.: "http://www.testside.dk/produkter.aspx", til bare at være "/produkter.aspx". Jeg har påtænkt at undermapperne, skal hedde det samme som mine undersider på mit website. Jeg bruger Umbraco som CMS system, og bruger ikke querystrings i mine URL'er. Har i bedre forslag, så kom gerne med dem :)


Mhv. khm1985
Avatar billede Syska Mester
09. juni 2008 - 18:35 #1
Hej,

Jeg er ikke helt klar over hvad dit spørgsmål går på ... lyder jo som om du har løst til problem, og jeg kan desvære ikke se nogle direkte spørgsmål i din tekst ... ej heller et eneste spørgsmålstegn ...

Er det måden at lede efter flash filer eller ?

// oUT
Avatar billede khm1985 Nybegynder
10. juni 2008 - 08:30 #2
Hey buzzz

Mit problem består i, at jeg skal have lavet et stykke kode der bruger en bid af min url, for at finde undermapper med tilsvarende navne. Vil bruge Request.RawURL til at forkorte en URL fra "http://www.testside.dk/produkter.aspx" til "/produkter.aspx". Eks. hvis min underside så hedder produkter.aspx, så skal min fysiske undermappe på webserveren hedde ligeledes. Skal have have programmeret det sådan, at den første "/" fjernes, og endelsen ".aspx" kommer væk. Efter dette er gjort, skal jeg finde ud af hvordan der kan ledes efter alle flash reklamer i den undermappe, hvor min adrotator så vilkårligt henter én reklame ind af gangen - Hvordan skal denne C#-kode skrives? :)

Jeg er ikke en haj til C#, så har lidt brug for at finde ud af hvordan jeg laver noget mere kode, der så igen udbygger det assembly fra Sotirovics hjemmeside.

Mhv. khm1985
Avatar billede Syska Mester
10. juni 2008 - 13:32 #3
Jeg kan hjælpe dig på vej ... men komplet kode kommer jeg ikke med ...

// ouT
Avatar billede khm1985 Nybegynder
10. juni 2008 - 13:42 #4
Nej nej det forlanger jeg heller ikke :) så skulle du have betaling for det. Men vil gerne have lidt råd og vejledning. Ved hvordan systemet skal fungere, bare ikke hvordan jeg skal skrive koden helt præcist.
Avatar billede Syska Mester
10. juni 2008 - 13:43 #5
string dir = Request.RawUrl;
        dir = dir.Remove(dir.IndexOf('.')).Remove(0, 1);
        btnSearch.Text = dir;
        System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(Server.MapPath(dir));

        List<System.IO.FileInfo> list = new List<System.IO.FileInfo>();
        if (di.Exists)
        {
            foreach (System.IO.FileInfo fi in di.GetFiles())
            {
                list.Add(fi);
            }
        }

Så har du en liste med de fil objecter som ligger i mappen med samme navn som siden ...
Avatar billede khm1985 Nybegynder
10. juni 2008 - 13:49 #6
Jeg vil lige give det et forsøg :) ellers må min chef sgu lige hjælpe mig gennem det værste.

Tusind tak for hjælpen buzzz..jeg vender lige tilbage. Er ny herinde, så skal lige have en forklaring på det med at give point osv.


Mvh. khm1985
Avatar billede Syska Mester
10. juni 2008 - 14:43 #7
Normalt siger folk når de er tilfredse med det svar de har fået ... og så smider personen et svar, som du så kan acceptere ude til venstre ...

svar

// ouT
Avatar billede khm1985 Nybegynder
11. juni 2008 - 09:02 #8
Hej igen buzzz

jeg har fået det til at virke så langt, at jeg med den kode du gav mig kan læse fra URL'en hvilken sti jeg skal bruge. Nu mangler jeg kun at finde ud af hvordan man trækker bestemte værdier ud af det "list" objekt på baggrund af en Random funktion. Så jeg vilkårligt læser en ny flash reklame ind, hver gang der klikkes på det samme link i menuen. Det lader nemlig ikke til man bare kan bruge GetValue, når man bruger en List???

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        string dir = Request.RawUrl;
        dir.Remove(dir.Length - 5);
        dir = dir.Remove(dir.IndexOf('.')).Remove(0, 1);
        System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(Server.MapPath(dir));

        System.IO.FileInfo fi = new System.IO.FileInfo();

        List<System.IO.FileInfo> list = new List<System.IO.FileInfo>();
     
        TextBox1.Text = di.Exists.ToString();
    //  if (di.Exists)
        {
            foreach (System.IO.FileInfo fi in di.GetFiles())
            {
                list.Add(fi);
            }
            System.Random MyRandom = new System.Random();
            int tmpInt = MyRandom.Next(list.Count);

            TextBox1.Text = "media/" + dir + tmpInt.ToString() + " - " + list.Count.ToString();

        }

    }
}
Avatar billede khm1985 Nybegynder
11. juni 2008 - 09:09 #9
Fejl i førnænvte kode. Denne kode virker.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page
{
    protected void Button1_Click(object sender, EventArgs e)
    {
        string dir = Request.RawUrl;
        dir.Remove(dir.Length - 5);
        dir = dir.Remove(dir.IndexOf('.')).Remove(0, 1);
        System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(Server.MapPath(dir));

        List<System.IO.FileInfo> list = new List<System.IO.FileInfo>();
     
        TextBox1.Text = di.Exists.ToString();
    //  if (di.Exists)
        {
            foreach (System.IO.FileInfo fi in di.GetFiles())
            {
                list.Add(fi);
            }
            System.Random MyRandom = new System.Random();
            int tmpInt = MyRandom.Next(list.Count); // (list.Count);

            TextBox1.Text = "media/" + dir + " - " + tmpInt.ToString() + " - " + list.Count.ToString();// + " - " + MyListValue.ToString();

        }

    }
}
Avatar billede Syska Mester
11. juni 2008 - 09:34 #10
Nu kan jeg ikke huske om den Randon starter fra 0 og til list.Count ... hvis, skal du lave det om til:
MyRandom(1, list.Count);

Billede objectet får du ud ved:
list[tmp - 1];
Avatar billede khm1985 Nybegynder
11. juni 2008 - 09:45 #11
Kan det lade sig gøre, at jeg trækker FileInfo værdierne ud som strings i stedet for integers. Så jeg bare kan smide en flash reklame ind med eks. navnet "ViTesterForDig.swf" i en undermappe, i stedet for at kalde dem "1.swf", "2.swf", "3.swf" osv.? Og så vilkårligt få en ny string til at blive konkateneret med mappen hvor den skal lede.

eks. "produkter/ViTesterForDig.swf", hvor "produkter" er mappenavnet (variablen dir), og "ViTesterForDig.swf" er filnavnet (en ny variabel, eks. filename)
Avatar billede Syska Mester
11. juni 2008 - 14:07 #12
list[tmpInt - 1].Name .... da der i list jo ligger et FileInfo object
Avatar billede khm1985 Nybegynder
11. juni 2008 - 14:19 #13
Jeg fandt ud af det nu. Brugte en ArrayList i stedet for en List, og fra denne kunne jeg så trække værdierne (de forskellige strings) vilkårligt ud.

Jeg siger mange tak for hjælpen buzzz og accepterer dit svar.


Mvh. khm1985
Avatar billede Syska Mester
11. juni 2008 - 14:38 #14
ArrayList og List er faktisk det samme ... udover at ArrayList indeholder object hvor imod List er en Generic og derfor Type safe klasse ...

Jeg vil klart anbefale at bruge List ... da hvis du bruger ArrayList kan komme til at smide alle slags objecter, måske også nogen du ikke ønsker ...

// ouT
Avatar billede khm1985 Nybegynder
12. juni 2008 - 09:14 #15
Hey buzzz

Jeg læste mig også frem til at en List er bedre at bruge, fordi den er type safe, og man derfor kan bestemme at det KUN skal være f.eks. swf-filer man smider ind i sin AdRotator.

Har du nogen idé om, hvorfor jeg får kompileringsfejlene:

BannerRotator.cs(183,26): error CS0103: The name 'Request' does not exist in the current context
BannerRotator.cs(187,70): error CS0103: The name 'Server' does not exist in the current context


Koden er nu som følger:

using System;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

namespace Sotirovic.Web.UI.UIControls.Banners
{
    [ToolboxData("<{0}:BannerRotator runat=server></{0}:BannerRotator>"), DefaultProperty("AdvertisementFile")]
    public class BannerRotator : AdRotator
    {
        // Fields
        private string flashFileExtension = ".swf";
        private string heightKeyPropertyName = "Height";
        private bool? isFlashBanner = null;
        private string navigateUrlBase;
        private AdCreatedEventArgs selectedAdvertArgs;
        private string widthKeyPropertyName = "Width";
        private string wmode = "opaque";
        private const string wmodeDefault = "opaque";
        private string _FileName;

        public string FileName
        {
            get
            {
                return _FileName;
            }
            set
            {
                _FileName = value;
            }
        }

        // Methods
        protected override void OnAdCreated(AdCreatedEventArgs e)
        {
            base.OnAdCreated(e);
            this.selectedAdvertArgs = e;
            this.ResolveTrackingUrl();
        }

        protected override void Render(HtmlTextWriter writer)
        {
            if (base.DesignMode)
            {
                base.Render(writer);
            }
            else if (this.IsFlashBanner)
            {
                this.RenderFlashBanner(writer);
            }
            else
            {
                base.Render(writer);
            }
        }

        private void RenderFlashBanner(HtmlTextWriter writer)
        {
            if ((this.selectedAdvertArgs != null) && !string.IsNullOrEmpty(this.selectedAdvertArgs.ImageUrl))
            {
                FlashControl flash = new FlashControl();
                flash.FlashUrl = FileName;//this.selectedAdvertArgs.ImageUrl;
                if (!string.IsNullOrEmpty(this.wmode))
                {
                    flash.WMode = this.wmode;
                }
                if (!string.IsNullOrEmpty(this.ID))
                {
                    flash.ID = this.ClientID;
                }
                if (!this.Enabled)
                {
                    flash.Enabled = false;
                }
                if (!this.SetDimensions(flash))
                {
                    flash.Width = this.Width;
                    flash.Height = this.Height;
                }
                flash.RenderControl(writer);
            }
        }

        private void ResolveTrackingUrl()
        {
            if (((!string.IsNullOrEmpty(this.navigateUrlBase) && (this.selectedAdvertArgs != null)) && !string.IsNullOrEmpty(this.selectedAdvertArgs.NavigateUrl)) && !this.IsFlashBanner)
            {
                this.selectedAdvertArgs.NavigateUrl = string.Format(this.navigateUrlBase, HttpContext.Current.Server.UrlEncode(this.selectedAdvertArgs.NavigateUrl));
            }
        }

        private bool SetDimensions(FlashControl flash)
        {
            int num;
            int num2;
            if (this.selectedAdvertArgs.AdProperties == null)
            {
                return false;
            }
            string s = (string)this.selectedAdvertArgs.AdProperties[this.widthKeyPropertyName];
            string str2 = (string)this.selectedAdvertArgs.AdProperties[this.heightKeyPropertyName];
            if (!int.TryParse(s, out num))
            {
                return false;
            }
            if (!int.TryParse(str2, out num2))
            {
                return false;
            }
            flash.Width = Math.Abs(num);
            flash.Height = Math.Abs(num2);
            return true;
        }

        // Properties
        protected bool IsFlashBanner
        {
            get
            {
                if (!this.isFlashBanner.HasValue)
                {
                    this.isFlashBanner = false;
                    if (this.selectedAdvertArgs == null)
                    {
                        return this.isFlashBanner.Value;
                    }
                    if (this.selectedAdvertArgs.ImageUrl == null)
                    {
                        return this.isFlashBanner.Value;
                    }
                    if (this.selectedAdvertArgs.ImageUrl.EndsWith(this.flashFileExtension, true, CultureInfo.InvariantCulture))
                    {
                        this.isFlashBanner = true;
                        return true;
                    }
                }
                return this.isFlashBanner.Value;
            }
        }

        [DefaultValue(""), Browsable(true), Category("Behavior")]
        public string NavigateUrlBase
        {
            get
            {
                return this.navigateUrlBase;
            }
            set
            {
                this.navigateUrlBase = value;
            }
        }

        [DefaultValue("opaque"), Category("Behavior"), Browsable(true)]
        public string WMode
        {
            get
            {
                return this.wmode;
            }
            set
            {
                this.wmode = value;
            }
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            string dir = Request.RawUrl;//System.Web.HttpRequest(Request.RawUrl));
            dir.Remove(dir.Length - 5);
            dir = dir.Remove(dir.IndexOf('.')).Remove(0, 1);
           
            System.IO.DirectoryInfo di = new System.IO.DirectoryInfo(Server.MapPath(dir));

            ArrayList stringList = new ArrayList();
            {
                foreach (System.IO.FileInfo fi in di.GetFiles())
                {
                    stringList.Add(fi);
                }
                System.Random MyRandom = new System.Random();
                int tmpInt = MyRandom.Next(stringList.Count);
                FileName = dir + "/" + stringList[tmpInt].ToString();

                if (!di.Exists)
                {
                    FileName = "media/default/default.swf";
                }
            }
        }     
    }
}


Mvh. Kenneth
Avatar billede khm1985 Nybegynder
12. juni 2008 - 09:43 #16
Okay jeg fandt ud af det...Nu har jeg kun problemer med at manifestdestination og reference ikke svarer til hinanden, når jeg prøver at bruge den nye dll fil (assembly'et) på min eksisterende default.aspx. Ser om det vil hjælpe at lave et nyt projekt (en ny default.aspx).


Mvh. khm1985
Avatar billede Syska Mester
12. juni 2008 - 14:54 #17
HttpContext.Current.Request
og
HttpContext.Current.Server
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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



Seneste spørgsmål Seneste aktivitet
I dag 10:28 PDFEngine Af barth i Andet software
I går 22:40 Butte indhold i celler Af lurup i Excel
I går 15:24 Power Query Af djsimonsen i Excel
I går 14:43 Hvis ikke på liste, tilføj værdier til liste Af TheLibrarian i Excel
I går 11:33 Windows 11 Af ranni i Windows