• User

    menu dinamico con css

    ciao

    poco tempo fa ho creato un sito web in php......

    questo sito aveva un menu dinamico che a seconda della pagina in cui mi trovavo mi dava un menu con formatazione diversa.....
    cioè se ero sulla pagina contatti solo quel bottone diventava rosso mentre gli altri restavano normali.

    Ecco il codice:

    $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.",
    "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 mi trovo a dover ricompilare il progetto con visual studio. 
    
    
    Vorrei sapere se qualcuno mi può aiutare nella compilazione di questo menù......perche non riesco a venirne fuori....
    
    I dati del menu sono presi da database, dove ho indicato in una tabella......numero di visualizzazione, nome visualizzato, collegamento html
    
    lo richiamo tramite store procedure che mi riporta l'ordine con cui deve essere visulizato.
    
    

    Private Function RicTesti(ByVal RiferimentoPagina As String, ByVal RiferimentoLingua As String) As DataTableCollection
    Dim da As New OleDb.OleDbDataAdapter
    Dim ds As New DataSet
    Try
    Dim testCMD As OleDb.OleDbCommand = New OleDb.OleDbCommand("RicercaTesti", objdb)
    testCMD.CommandType = CommandType.StoredProcedure

            Dim param1 As OleDb.OleDbParameter = testCMD.Parameters.Add("001", OleDb.OleDbType.Char, 3)
            param1.Direction = ParameterDirection.Input
    
            Dim param2 As OleDb.OleDbParameter = testCMD.Parameters.Add("001", OleDb.OleDbType.Char, 3)
            param1.Direction = ParameterDirection.Input
    
            param1.Value = RiferimentoPagina
            param2.Value = RiferimentoLingua
    
            da.SelectCommand = testCMD
    
            da.Fill(ds, "Articoli")
    
        Catch ex As Exception
    
        End Try
        Return ds.Tables
    End Function
    
     Private Sub Bind(ByVal dtArticoli As DataTable)
        For Each row As DataRow In dtArticoli.Rows
            Dim lt As Literal = CType(Panel1.FindControl(Trim(row("CodiceCampo").ToString())), Literal)
            If Not (lt Is Nothing) Then
                lt.Text = row("Prompt").ToString()
            End If
        Next
    End Sub
    
    Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If Not IsPostBack Then
            Dim dt As DataTableCollection
            dt = RicTesti("001", "001")
            Bind(dt(0))
        End If
    End Sub
    
    
     :confused: 
    
    Adesso come faccio a diversificarlo a seconda della pagina in cui mi trovo?????
    
    Posso inserire il menù nella master page???? Ed in questo caso come faccio ad eseguire il controllo??
    
    Lo devo inserire in ogni pagina indicando in qualche modo in che pagina mi trovo???
    
    
    AIUTO..................
     :dhò:  :dhò:  :dhò: 
    Sono bloccata, confusa, e non so come scrivere quella funzione.

  • Super User

    Puoi avere il nome della pagina con Request.ServerVariables("URL")


  • User

    grazie della risposta...........ma non sò come usarlo...
    provo a spiegarmi meglio sperando che qualche anima pia mi aiuti........

    Ho creato dui stili css:

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

    a video questo è il codice che viene stampato adesso:

    
    <ul id="navlist">
         <li class="part">
            <a href="chi-siamo.php">CHI SIAMO</a>
         </li>
         <li class="attivo">
            <a href="galleria.php">GALLERIA</a>
         </li>
         <li class="attivo">
            <a href="ultime-novita.php">NOVITA'</a>
         </li>
         <li class="attivo">
            <a href="new-antiques.php">TRENDY</a>
         </li>
         <li class="attivo">
            <a href="ordina.php">ORDINA</a>
         </li>
         <li class="attivo">
            <a href="contatti.php">CONTATTI</a>
         </li>
         <li class="attivo">
            <a href="blog.php">BLOG</a>
         </li>
         <li class="attivo">
            <a href="faq.php">F.A.Q.</a>
         </li>
         <li class="attivo">
            <a href="<A href="://stores.ebay.it/xxxxxxx-antiques-art-collectibles">SU">xxxxxxxxxxxx">SU EBAY</a>
         </li>
    </ul></div>
      
    

    Come vedete viene stampato un nome diverso a seconda della pagina in cui mi trovo.....

    Dovrei fare lo stesso con asp.net e Vb.
    Ho scritto questo codice ma mi manca la parte dove inserisco che se il nome della pagina è uguale alla pagina in cui mi trovo stampa a video lo stile css=attivo
    altrimenti stampa lo stile css=part

    codice:

    
    Private Function RicMenu(ByVal RiferimentoPagina As String, ByVal RiferimentoLingua As String) As DataTableCollection
            Dim da As New OleDbDataAdapter
            Dim ds As New DataSet
            Try
                Dim strsql As String = "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
            End Try
            Return ds.Tables
        End Function
      
    

    e qui mi sono bloccata!!!!!!!! Sono sicura che questa parte non è giusta

       Private Sub Bind(ByVal dtMenu1 As DataTable)
            For Each row As DataRow In dtMenu1.Rows
                Dim lt As Literal = CType(Panel1.FindControl(Trim(row("CodiceCampo").ToString())), Literal)
                Dim LinkNavigateUrl As HyperLink = New HyperLink()
                If Not (lt Is Nothing) Then
                    LinkNavigateUrl = HyperLink.Equals()
                End If
            Next
        End Sub  
    

    Qualcuno mi può aiutare non sono molto brava con Vb e asp.net, ho iniziato da poco


  • Super User

    Dove va fatto il confronto tra la pagina corrente e quella nel db per scrivere il css?

    PS: LinkNavigateUrl = HyperLink.Equals() che vuol dire?


  • User

    PS: LinkNavigateUrl = HyperLink.Equals() che vuol dire?

    me l'ho postato un utente.......dovrebbe prendere la pagina corrente ???
    Ma non lo sò usare......

    Il confronto lo devo ancora scrivere....è qui che mi sono bloccata.
    Ho preso i dati dal dabase, poi gli ho inseriti in una tabella.....e adesso pensavo fosse qui che devo scrivere in codice dei collegamenti

       Private Sub Bind(ByVal dtMenu1 As DataTable)
            For Each row As DataRow In dtMenu1.Rows
                Dim lt As Literal = CType(Panel1.FindControl(Trim(row("CodiceCampo").ToString())), Literal)
                Dim LinkNavigateUrl As HyperLink = New HyperLink()
                If Not (lt Is Nothing) Then
                    LinkNavigateUrl = HyperLink.Equals()
                End If
            Next
        End Sub
    

    ma non riesco a buttarlo giù.

    Il menu è inserito nella Master Page, e le pagine sono all'interno di un "
    Content"
    Ce nè uno solo nella parte centrale della pagina.

    poi richiamo qui :

    
    PrivateSub Page_Load(ByVal sender AsObject, ByVal e As System.EventArgs) HandlesMe.Load
    IfNot IsPostBack Then
    Dim dt As DataTableCollection
    dt = RicMenu()
    Bind(dt(0))
    EndIf
    EndSub
    
    

    ma anche qui c'è un errore "dt = RicMenu()" perchè nella funzione originale era richiamato con una store perocedurwe il menu, che passava quei parametri


  • Super User

    Per avere la pagina corrente devi fare Context.Request.Url.AbsolutePath


  • User

    ho provato ma non la riconosce come funzione valida

    uso VB per programmare


  • Super User

    se provi HttpContext.Current.Request....??


  • User

    Ho fatto qualcosa.............ma mi manca ancora una funzione.....e naturalmente un occhio da voi se il tutto potrebbe funzionare.

    master page

    
    PrivateFunction RicMenu(ByVal RiferimentoPagina AsString, ByVal RiferimentoLingua AsString) As DataTableCollectionDim da AsNew OleDbDataAdapterDim ds AsNew DataSetTryDim 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 ExceptionEndTryReturn ds.TablesEndFunction PrivateSub Bind(ByVal dtmenu1 As DataTable)ForEach row As DataRow In dtmenu1.RowsDim lt As Literal = CType(Panel1.FindControl(Trim(row("Collegamento").ToString())), HtmlWindow.Url)IfNot (lt IsNothing) Thenrow("collegamento") = String.Format(" <li class=""part""><a href=""{0}"">{2}</a></li>", row("Collegamento").ToString().Trim(), row("Titolo").ToString().Trim()) Elserow("collegamento") = String.Format("<li class=""attivo""><a href=""{0}"">{2}</a></li>", row("Collegamento").ToString().Trim(), row("Titolo").ToString().Trim())EndIfNextEndSub
     
    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......

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

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