Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    449

    Effetto activelink con php

    Ho creato un file functions.php dove ho messo tra l'altro:
    codice:
    <?php
    function headers () {
        echo
    <<<EOD
    <div id="header">
    <h1>TEATRO IN F<span class="emph">O</span>LLE</h1>
    <div id="navbar_wrapper">
    <div id="navbar">
    <ul>[*]Home[*]Com'&#232; nato[*]Chi siamo[*]Copioni[*]Immagini[*]Spettacoli[*]Contattaci[/list]
    </div>
    </div>
    </div>
    EOD;
    };
    ?>
    e quindi nella varie pagine richiamo la funzione con
    codice:
    <?php
    headers ();
    ?>
    Però nella pagina volevo creare un effetto "activelink"
    definito così nel CSS:
    codice:
    #navbar a#activelink{background:white; color:black; font-weight:bold;}
    mentre gli altri link sono, specularmente, testo bianco su sfondo nero.
    Come posso realizzare questo effetto con php?

    Grazie
    M.

  2. #2
    devi semplicemente usare quel codice, stampandolo con php

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    449
    Scusa, ma essendo niubbissimo...
    Intendi dire che non posso fare altro
    che rinunciare alla funzione?
    Il mio intento era ricorrere a php
    proprio per evitare di riportare
    il codice in molte pagine...

    M.

  4. #4
    Dovresti provare a fare un ciclo che ti sposta la direttiva id="activelink_nb" , confrontando la pagina visualizzata con quella associata al link stesso.

    La stessa cosa però, può essere fatta sfruttando maggiormente i CSS.
    Io farei lo stesso ciclo per evitare di mettere il link alla riga del menu che rimanda alla stessa pagina visualizzata, così da sfruttare al massimo il layout diverso che puoi creare con le semplici direttive da CSS.
    In poche parole:
    crei una direttiva per il tag [*], una per li a ed un'altra ancora per li a:hover.

    Con PHP vai semplicemente a togliere il <a href=""> dalla riga di menu che rimanda alla pagina corrente.
    Il resto lo fa il CSS.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    449
    Sebbene verosimilmente non sono (ancora) in grado di scrivermi
    un ciclo di quel genere, almeno in teoria capisco quello che intendi.
    Non mi è chiaro invece come si potrebbe fare nel CSS.
    Io ho messo:
    codice:
    /*stili per la navigazione menu header*/
    div#navbar_wrapper {width:100%; height:60px; margin:auto; background-color:black; border-top:double #CECECE; border-bottom:double #CECECE;}
    div#navbar ul{list-style:none; margin-top:20px; text-align:center;}
    div#navbar ul{list-style:none; margin:0; padding:20px; text-align:center;}
    div#navbar li{display:inline; margin:3px;}
    div#navbar a{background:#A4A4A4; color:white; margin:0; padding:4px; text-decoration:none;}
    div#navbar a:hover{background:#A4A4A4; color:black; text-decoration:underline;}
    div#navbar a#activelink_nb{background:white; color:black; font-weight:bold;}
    Potresti essere un po' più esplicativo?

    Grazie
    M.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    449
    Ho provato una cosa del genere:
    codice:
    <?php
    function headers () {
        echo
    <<<EOD
    <div id="header">
    <h1>TEATRO IN F<span class="emph">O</span>LLE</h1>
    <div id="navbar_wrapper">
    <div id="navbar">
    <ul>[*]Home[*]Chi siamo[*]Com'&#232; nato[*]Copioni[*]Immagini[*]Spettacoli[*]Contattaci[/list]
    </div>
    </div>
    </div>
    EOD;
    };
    ?>
    (ho solo cambiato la denominazione da activelink a currentpage),
    il menu si vede correttamente ma non ho l'effetto desiderato.
    Dove sta l'errore?

    Grazie
    M.

  7. #7
    Risposta 1: Codice PHP

    Innanzi tutto, $_SERVER['PHP_SELF'] ti ritorna la URL completa dello script comprensiva di http, www e compagnia bella, per cui l'uguaglianza con la quale pensi di associare l'id della classe del CSS non ci sarà mai.

    Ti consiglio di associare a questa variabile la funzione basename().

    Secondo me, però, dovresti crearti un array di link, ciclarlo e far lavorare PHP per crearti il menu.
    Butto giù un po' di codice al volo sperando di non fare errori.

    Codice PHP:
    <?php
    // evito di riportare tutto il codice 
    // della tua funzione headers()
    ########################
    // definisco un array con le combinazioni
    // link//etichetta che comporranno il menù
    $array_link = array(
    "index.php" => "Home Page",
    "chisiamo.php" => "Chi Siamo",
    "comenato.php" => "Come &egrave; Nato",
    "copioni.php" => "Copioni",
    "immagini.php" => "Immagini",
    "spettacoli.php" => "Spettacoli",
    "contattaci.php" => "Contattaci",
    );

    // vado a recuperare l'indirizzo dello script ed 
    // estraggo solo la parte che mi interessa.
    $pagina_corrente basename($_SERVER['PHP_SELF']);

    // scorro l'array e ne estrapolo 
    // le coppie di valori

    foreach($array_link as $link => $label) {

    if (
    $link == $pagina_corrente) {
         
    $selettore_css " id=\"currentpage\" ";
    } else {
         
    $selettore_css "";
    }

    $menu .= "[*]<a href=\"$link\" $selettore_css title=\"Vai alla pagina $label\">$label</a>
    "
    ;
    }
    ?>
    Come puoi vedere, in questo modo, crei al volo una variabile $menu che puoi implementare in qualunque punto della tua pagina dove vvuoi che il menù sia stampato.

    Risposta 1: Codice CSS
    Di sicuro mi sono spiegato male, ma io ti dicevo di sfruttare meglio la potenza dei CSS, senza stare ad aggiunere classi e selettori.
    Supponi che lo script precedente abbia le seguenti istruzioni nel ciclo di FOREACH.....
    Codice PHP:
    if ($link == $pagina_corrente) {
    $menu .= "[*]$label
    "
    ;} else {
    $menu .= "[*]<a href=\"$link\" title=\"Vai alla pagina $label\">$label</a>
    "
    ;} 
    Come puoi capire da te, lo script associa un link ad un'altra pagina quando la variabile $link non corrisponde quella che indica la pagina corrente.... viceversa nell'altro caso.

    Suppondendo di aprire il codice HTML che viene generato dalla pagina PHP scritta qui sopra, il menu che troveresti sarebbe del tipo.....

    codice:
    [*]Home Page[*]Chi Siamo[*]Come &egrave; Nato[*]Copioni
    // eccetera
    Questo per dirti che, se il CSS è ben compilato ti basta solo definire un layout per il semplice li, uno per li a ed uno per li a:hover, senza avere la necessità di aggiungere classi e selettori.

    Spero di essere stato più chiaro ora.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    449
    Sulla semplificazione dei CSS, ora medito...

    Sul codice, ho provato a fare così:
    codice:
    <?php
    // riporto il codice della funzione headers()
    function headers () {
        echo
    <<<EOD
    <div id="header">
    <h1>TEATRO IN F<span class="emph">O</span>LLE</h1>
    <div id="navbar_wrapper">
    <div id="navbar">
    <ul>[*]Home[*]Com'&#232; nato[*]Chi siamo[*]Copioni[*]Immagini[*]Spettacoli[*]Contattaci[/list]
    </div>
    </div>
    </div>
    EOD;
    };
    
    // definisco un array con le combinazioni
    // link//etichetta che comporranno il menù
    $array_link = array(
    "index.php" => "Home Page",
    "chisiamo.php" => "Chi Siamo",
    "comenato.php" => "Come &egrave; Nato",
    "copioni.php" => "Copioni",
    "immagini.php" => "Immagini",
    "spettacoli.php" => "Spettacoli",
    "contattaci.php" => "Contattaci",
    );
    
    // vado a recuperare l'indirizzo dello script ed
    // estraggo solo la parte che mi interessa.
    $pagina_corrente = basename($_SERVER['PHP_SELF']);
    
    // scorro l'array e ne estrapolo
    // le coppie di valori
    
    foreach($array_link as $link => $label) {
    
    if ($link == $pagina_corrente) {
         $selettore_css = " id=\"currentpage\" ";
    } else {
         $selettore_css = "";
    }
    
    $menu .= "[*]<a href=\"$link\" $selettore_css title=\"Vai alla pagina
    $label\">$label</a>
    ";
    }
    ?>
    Nondimeno, l'effetto "currentpage" non compare.
    Di certo ho prodotto qualche nuovo errore...

    M.

    PS
    L'idea dell'array mi era venuta, ma non ero in grado di scriverlo.
    Sto leggendo dei manuali su PHP, ma alcuni sono molto "teorici",
    e poi risulta nient'affatto semplice tradurre la trattazione
    in codice concreto da applicare alla varie esigenze...

  9. #9
    Beh... innanzi tutto, credevo fosse chiaro che se vai a compilarti un menù con un ciclo automatico, è inutile stare a scrivere lo stesso menù anche a mano. Questo per dirti che c'era comunque un errore di base nel tuo script.

    Oltretutto, stavo pensando che probabilmente, il confronto pagina visualizzata/link del menù potrebbe non andare a buon fine per un motivo: ho quasi la certezza che la funzione basename(eccetera) vada a pescare la URI dello script dove la funzione è scritta, non di quello dove è richiamata.
    Cosa comporta questo? Metti che basename ti torni la URL del file dove è scritta la funzione (pagina_con_le_funzioni.php), e non (esempio) index.php oppure contattaci.php, quando vai a fare l'uguaglianza con i link presenti nell'array, questa sarà sempre FALSE.

    Per ovviare questo problema, devi fare come segue.
    In ognuna delle pagine che richiama quella dove è contenuta la funzione headers(), devi mettere il seguente codice:
    Codice PHP:
    // supponiamo che la pagina sia index.php

    // importi la funzione headers()
    include('pagina_con_le_funzioni.php'); 

    // definisci quale sia la pagina corrente
    $pagina_corrente basename($_SERVER['PHP_SELF']);
    // in questo caso il risultato è ==> $pagina_corrente == index.php;

    // rendi la variabile globale per metterla
    // disponibile anche all'interno di una funzione
    global $pagina_corrente


    /*
    qui metti tutto il resto della pagina
    */ 
    La pagina pagina_con_le_funzioni.php contiene la tua bella funzione headers(), che modificherai come segue.
    Codice PHP:
    <?php
    function headers () {
    ?>
    <div id="header">
    <h1>TEATRO IN F<span class="emph">O</span>LLE</h1>
    <div id="navbar_wrapper">
    <div id="navbar">
    <ul>
    <?php

    $array_link 
    = array(
    "index.php" => "Home Page",
    "chisiamo.php" => "Chi Siamo",
    "comenato.php" => "Come è Nato",
    "copioni.php" => "Copioni",
    "immagini.php" => "Immagini",
    "spettacoli.php" => "Spettacoli",
    "contattaci.php" => "Contattaci",
    );

    /* 
    la variabile $pagina_corrente viene passata 
    dallo script sotto forma di variabile globale
    per cui non serve più ricavarla
    */

    foreach($array_link as $link => $label) {

    if (
    $link == $pagina_corrente) {
         
    $selettore_css " id=\"currentpage\" ";
    } else {
         
    $selettore_css "";
    }

    $menu .= "[*]<a href=\"$link\" $selettore_css title=\"Vai alla pagina
    $label\">$label</a>
    "
    ;
    }


    ?>[/list]
    </div>
    </div>
    </div>
    <?php
    };
    ?>
    Un'ultima annotazione. Ma sei sicuro ti sia così necessario andare a nidificare tutti quei DIV per arrivare al tuo menù?
    Secondo me dovresti approfondire tutte le peculiarità dei CSS (vedi l'ereditarietà a cascata), perché si risparmia davvero tanto codice inutile.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  10. #10
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    449
    Adesso vedo di far finalmente funzionare questi headers,
    dopo prendo in considerazione tutti gli altri tuoi utilissimi rilievi.
    Allora, in functions.php ho messo:
    codice:
    <?php
    function headers () {
    ?>
    
    <div id="header">
    <h1>TEATRO IN F<span class="emph">O</span>LLE</h1>
    <div id="navbar_wrapper">
    <div id="navbar">
    <ul>
    <?php
    
    $array_link = array(
    "index.php" => "Home Page",
    "chisiamo.php" => "Chi Siamo",
    "comenato.php" => "Come è Nato",
    "copioni.php" => "Copioni",
    "immagini.php" => "Immagini",
    "spettacoli.php" => "Spettacoli",
    "contattaci.php" => "Contattaci",
    );
    
    /*
    la variabile $pagina_corrente viene passata
    dallo script sotto forma di variabile globale
    per cui non serve più ricavarla
    */
    
    foreach($array_link as $link => $label) {
    
    if ($link == $pagina_corrente) {
         $selettore_css = " id=\"currentpage\" ";
    } else {
         $selettore_css = "";
    }
    
    $menu .= "[*]<a href=\"$link\" $selettore_css title=\"Vai alla pagina
    $label\">$label</a>
    ";
    }
    
    
    ?>[/list]
    </div>
    </div>
    </div>
    <?php
    };
    ?>
    
    
    
    
    <?php
    function footer () {
        echo
    <<<EOD
    <div id="footer">
    
    
    &#169; 2008 - Teatro in f<span class="emph">o</span>lle</p>
    </div>
    EOD;
    };
    ?>
    In index.php invece ho:
    codice:
    <head>
    <title>Teatro in folle</title>
    <meta name="GENERATOR" content="Quanta Plus" />
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="description" content="teatro in folle" />
    <meta name="keywords" content="teatro, attori, attori di strada, venezia,
    mestre" />
    <link rel="stylesheet" type="text/css" href="layout.css" />
    
    
    
    <?php
    // importi la funzione headers()
    include('functions.php');
    
    // definisci quale sia la pagina corrente
    $pagina_corrente = basename($_SERVER['PHP_SELF']);
    // in questo caso il risultato è ==> $pagina_corrente == index.php;
    
    // rendi la variabile globale per metterla
    // disponibile anche all'interno di una funzione
    global $pagina_corrente;
    ?>
    
    
    <body>
    <div id="container">
    
    <?php
    headers ();
    ?>
    
    <div id="navigation">
    <ul>[*]Home[*]Le nostre letture[*]I nostri ascolti[*]I nostri film[*]Segnalazioni[*]Curiosit&#224;[*]Guestbook[*]Blog[*]Link[/list]
    </div>
    
    <div id="content">
    <div class="center">[img]pics/clauele.jpeg[/img]</div>
    </div>
    
    <?php
    footer ();
    ?>
    
    </div>
    </body>
    </html>
    Ora vedo l'intestazione della pagina,
    ma il menu orizzontale incluso negli headers è sparito...

    M.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.