+ Rispondi al Thread
Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [ASP.Net]Menu con variabili

  1. #1
    perla0279 non è in linea Scolaretto
    Post
    230

    [ASP.Net]Menu con variabili

    ciao

    ho creato un menu per un vecchio sito web in php (allora conoscevo solo quel linguaggio) con una variabile.

    Praticamente il menù è creato con css.
    Adesso funziona così. A seconda della pagina dove mi trovo il tasto nel menù uguale alla pagina dove mi trovo posizionata prende lo stile diverso.....cioè a video conpare con un colore diverso.

    Io l'ho fatto in php:
    codice:
    <?php
    $array_menu = array(
    "chi-siamo.php" => "CHI SIAMO",
    "galleria.php" => "GALLERIA",
    "ultime-novita.php" => "NOVITA'",
    "new-antiques.php" => "TRENDY",
    "ordina.php" => "ORDINA",
    "contatti.php" => "CONTATTI",
    "blog.php" => "BLOG",
    "faq.php" => "F.A.Q.",
    "http://stores.ebay.it/ARTISTIC-antiques-art-collectibles" => "SU EBAY",
    );
    
    
    $pagina_visualizzata = basename($_SERVER['PHP_SELF']);
    
    
    
    echo "<ul id=\"navlist\">";
    
    
    while(list($url, $label) = each($array_menu)) {
    
    if ($url == $pagina_visualizzata){
         $stile = "part";
    } else  {
         $stile = "attivo";
    }
    
    echo "
         <li class=\"$stile\">
            <a href=\"$url\">$label</a>
         </li>
    ";
    
    }
    
    echo "</ul>";
    ?>


    adesso ho ricompilato il progetto in visualstudio............è non sò come applicare la stessa logica.

    Cioè prima il menu era una pagina assestante che veniva inclusa in ogni pagina del sito web.

    Adesso come faccio ad inserirlo, avevo pensato di metterlo nella masterpage.............ma poi come faccio a far si che cambi il tasto della pagina dove mi trovo????

  2. #2
    L'avatar di SignIn
    SignIn non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,026
    ...ora non sò cosa fa il tuo file php perchè sono ignorante ...
    ...ad ogni modo il tuo problema può essere risolto in moltissimi modi....il primo per esempio è quello di eseguire una findControl sull'oggetto master....
    Mi spiego meglio se hai la pagina 1 che implementa la master page x(il menù) allora nell'evento page load della pagina 1 potresti fare una cosa del genere:

    codice:
    Dim ctr As Control = Master.FindControl("btnHome")
            If Not ctr Is Nothing Then
                CType(ctr, Button).Text = "prova"
                CType(ctr, Button).CssClass = "css"
            End If
    ...oppure si potrebbe fare in modo molto più elegante ma lo rimandiamo ad una altro momento

  3. #3
    perla0279 non è in linea Scolaretto
    Post
    230
    Ciao
    ho iniziato a fare il menu......ma faccio fatica ad andare avanti.

    Questo è il codice che ho scritto:
    codice:
    
    PrivateFunction RicMenu(ByVal RiferimentoPagina AsString, ByVal RiferimentoLingua AsString) As DataTableCollection
    Dim da AsNew OleDbDataAdapter
    Dim ds AsNew DataSet
    Try
    Dim strsql AsString = "SELECT Collegamento, Titolo, css FROM MENU1 Where codicevisualizzazione=1 ORDER BY Codice"
    da = New OleDbDataAdapter(strsql, objdb2)
    da.Fill(ds, "menu1")
    Catch ex As Exception
    EndTry
    Return ds.Tables
    EndFunction
     
     
    PrivateSub Bind(ByVal dtMenu1 As DataTable)
    ForEach row As DataRow In dtMenu1.Rows
    Dim lt As Literal = CType(Panel1.FindControl(Trim(row("CodiceCampo").ToString())), Literal)
    Dim LinkNavigateUrl As HyperLink = New HyperLink()
    IfNot (lt IsNothing) Then
    EndIf
    Next
    EndSub
    

    Ho un menu costruito con i css, (che io qui ho messo dentro literal)

    Il menù funziona così, da tabella prendo il nome da visuallizare ed il collegamento di pagina.
    A seconda della pagina dove mi trovo stampa a video un css diverso con il risultato che il bottone della pagina attiva diventa rosso mentre gli altri restano nella formatazione normale.

    Dovrei inserere un controllo che mi facesse questa verifica e mi dasse la diversa formatazione facendo il controllo sul nome della pagina.

    Inserisco il menu sulla masterpage.


    Vi posto anche il codice css:
    codice:
    #navlist ul {
    margin-left: 0;
    padding-left: 0;
    white-space: nowrap;
    font-weight: bold;
    }
    #navlist li.attivo {
    display:inline;
    list-style-type:none;
    }
    #navlist li.attivo a { padding: 3px 10px; }
    #navlist li.attivo a:link, #navlist li.attivo a:visited {
    color:#730400;
    background-color:#E7C35A;
    text-decoration:none;
    }
    #navlist li.attivo a:hover {
    color:#E7C35A;
    background-color:#FF0000;
    text-decoration:none;
    }
    
    #navlist li.part {
    display:inline;
    list-style-type:none;
    }
    #navlist li.part a{ padding: 3px 10px; }
    #navlist li.part a:link, #navlist li.part a:visited {
    color:#730400;
    background-color:#FF0000;
    text-decoration:none;
    }
    #navlist li.part a:hover {
    color:#730400;
    background-color:#FF0000;
    text-decoration:none;
    }

  4. #4
    perla0279 non è in linea Scolaretto
    Post
    230
    Quote Originariamente inviato da SignIn Visualizza il messaggio
    ...ora non sò cosa fa il tuo file php perchè sono ignorante ...
    ...ad ogni modo il tuo problema può essere risolto in moltissimi modi....il primo per esempio è quello di eseguire una findControl sull'oggetto master....
    Mi spiego meglio se hai la pagina 1 che implementa la master page x(il menù) allora nell'evento page load della pagina 1 potresti fare una cosa del genere:

    codice:
    Dim ctr As Control = Master.FindControl("btnHome")
            If Not ctr Is Nothing Then
                CType(ctr, Button).Text = "prova"
                CType(ctr, Button).CssClass = "css"
            End If
    ...oppure si potrebbe fare in modo molto più elegante ma lo rimandiamo ad una altro momento


    Non ho specificato che nelle pagine ho anche inserito il controllo indicato
    codice:
    Dim ctr As Control = Master.FindControl("btnHome")
            If Not ctr Is Nothing Then
                CType(ctr, Button).Text = "prova"
                CType(ctr, Button).CssClass = "css"
            End If
    codice:
    Dim ctr As Control = Master.FindControl("btnChi-siamo")
            If Not ctr Is Nothing Then
                CType(ctr, Button).Text = "prova"
                CType(ctr, Button).CssClass = "css"
            End If
    codice:
    Dim ctr As Control = Master.FindControl("btncontatti")
            If Not ctr Is Nothing Then
                CType(ctr, Button).Text = "prova"
                CType(ctr, Button).CssClass = "css"
            End If
    ecc............
    ma poi non sono stata capace collegarlo alla master page.......

    Quindi mi sono incasinata da sola.

  5. #5
    perla0279 non è in linea Scolaretto
    Post
    230
    Ho fatto qualcosa.............ma mi manca ancora una funzione.....e naturalmente un occhio da voi se il tutto potrebbe funzionare.


    master page
    codice:
    PrivateFunction RicMenu(ByVal RiferimentoPagina AsString, ByVal RiferimentoLingua AsString) As DataTableCollection
    Dim da AsNew OleDbDataAdapter
    Dim ds AsNew DataSet
    Try
    Dim strsql AsString = "SELECT Collegamento, Titolo,css FROM MENU1 Where codicevisualizzazione=1 ORDER BY Codice"
    da = New OleDbDataAdapter(strsql, objdb2)
    da.Fill(ds, "menu1")
    Catch ex As Exception
    EndTry
    Return ds.Tables
    EndFunction
     
     
    PrivateSub Bind(ByVal dtmenu1 As DataTable)
    ForEach row As DataRow In dtmenu1.Rows
    Dim lt As Literal = CType(Panel1.FindControl(Trim(row("Collegamento").ToString())), HtmlWindow.Url)
    IfNot (lt IsNothing) Then
    row("collegamento") = String.Format(" <li class=""part""><a href=""{0}"">{2}</a></li>", row("Collegamento").ToString().Trim(), row("Titolo").ToString().Trim())
     
    Else
    row("collegamento") = String.Format("<li class=""attivo""><a href=""{0}"">{2}</a></li>", row("Collegamento").ToString().Trim(), row("Titolo").ToString().Trim())
    EndIf
    Next
    EndSub
    

    Dim lt As Literal = CType(Panel1.FindControl(Trim(row("Collegamento").ToString())), HtmlWindow.Url)
    Non funziona perchè non è la funzione corretta......
    dovrei dirgli che vada a controllare il nome della pagina che se uguale al nome del colegamento stampi una classe altrimenti un'altra...

    Poi nella pagina devo inserire un controllo che riporti alla Master Page il mone della pagina......

    codice:
    Dim ctr As Control = Master.FindControl("btnHome")
            If Not ctr Is Nothing Then
                
            End If

    come faccio ?????? Quella qui sopra non funziona è sicuramente sbagliata !!!!

  6. #6
    L'avatar di SignIn
    SignIn non è in linea Scribacchino
    Luogo
    Milano
    Post
    1,026
    Ciao,
    il mio esempio, che rivedendolo adesso mi fa abbastanza schifo (dovrei rivedere alcuni concetti sui temi e skin ma credo che si può fare 1000 volte meglio)era per sottolineare che dalle pagine che implementano una master page puoi tramite il metodo FindControl recuperare controlli che sono localizzati appunto sulla master...
    Detto ciò se propio vuoi impostare in questo modo il lavoro, puoi fare una cosa del genere:
    supponiamo di avere una masterpage, due pagine che ovviamente implementano la master, una classe di helper e un foglio di stile.
    ...per quanto rigaurda il foglio di stile:
    codice:
    .navLinkActive
    {    
        background-color: Aqua;
    }
    .navLinkNotActive
    {    
        background-color:Blue;
    }
    Il foglio di stile presenta due classi una per i link "attivi" e l'altra per quelli disattivati.
    Adesso linkiamo il foglio nella master page:
    codice:
    <link href="style.css" type="text/css" rel="stylesheet"/>
    Nella pagina master presenta un controllo panel che conterrà il menù. Lato codice invece, un metodo per la costruzione del menu. Per semplificare il tutto:
    codice:
    Private Sub BindMenu()
            For i As Integer = 0 To 1
                Dim hyItem As HyperLink = New HyperLink()
                Select Case i
                    Case 0
                        hyItem.ID = "btnHome1"
                        hyItem.NavigateUrl = "Default1.aspx"
                        hyItem.Text = "Default1"
                    Case 1
                        hyItem.ID = "btnHome2"
                        hyItem.NavigateUrl = "Default2.aspx"
                        hyItem.Text = "Default2"
                End Select
                pnlMenu.Controls.Add(hyItem)
                Dim ltSeparator As Literal = New Literal
                ltSeparator.ID = "ltSep" + i.ToString()
                ltSeparator.Text = "<br>"
                pnlMenu.Controls.Add(ltSeparator)
            Next
        End Sub
    Come puoi osservare a differenza di quello che hai fatto te non vado a scrivere direttamente l'html, è sicuramente poco elegante da vedere ma soprattutto poco mantenibile(pensa se devi aggiungere un immagine o una formattazione un pò più elaborata). Il risultato di questo codice è una lista di hyperlink a cascata.
    Adesso passiamo alla classe helper:
    codice:
    Public Class Class2
        Public Sub SetStyle(ByVal pageMaster As MasterPage, ByVal idPnlMenu As String, ByVal idHyperlink As String)
            Dim ctrPanel As Control = pageMaster.FindControl(idPnlMenu)
            If Not (ctrPanel Is Nothing) Then
                For Each ctr As Control In ctrPanel.Controls
                    If ctr.GetType() Is GetType(HyperLink) Then
                        If (ctr.ID = idHyperlink) Then
                            CType(ctr, HyperLink).CssClass = "navLinkActive"
                        Else
                            CType(ctr, HyperLink).CssClass = "navLinkNotActive"
                        End If
                    End If
                Next
            End If
        End Sub
    End Class
    Contiene un metodo che cerca nella master page il controllo panel, dato l'id del pannello contenitore del menu cioè il secondo parametro. Se esiste, ciclo su tutti i controlli presenti. Solo per i tipi hyperlink(le voci del menù) verifico quello che presenta la property id uguale al terzo parametro.
    Per quest'ultimo imposto il css attivo per tutti gli altri quello non attivo, attraverso la property CssClass.
    Infine nelle due pagine:
    codice:
    'Pagina 1
    Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
            If Not (IsPostBack) Then
                Dim setC As Class2 = New Class2()
                setC.SetStyle(Master, "pnlMenu", "btnHome1")
            End If
    End Sub
    
    'Pagina 2
    Protected Sub Page_PreRender(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRender
      If Not (IsPostBack) Then
      Dim setC As Class2 = New Class2()
        setC.SetStyle(Master, "pnlMenu", "btnHome2")
      End If
    End Sub
    ...questo è tutto...anche se ripeto personalmente non lo farei così

+ Rispondi al Thread

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi