Visualizzazione risultati 1 fino 7 di 7

Discussione: Problemi con il Parsing HTML/PHP

  1. #1
    Guest

    Predefinito Problemi con il Parsing HTML/PHP

    Ciao. Oggi sto cercando di fare uno script php un po' particolare. Dovendo fare una pagina la quale ha l'header e il footer costanti ma il content dinamico, ho seguito questa procedura:

    Codice PHP:
    <?php
    //carico l'header
    require_once("header.php");

    //eseguo uno switch che mi consente di ottenere tramite il metodo GET il contenuto richiesto

    switch($_GET["contentID"]) {
    case
    "benvenuto":
    // codice per caricare il tag HTML div con l'ID "benvenuto"
    break;
    case
    "arrivederci":
    // codice per caricare il tag HTML div con l'ID "arrivederci"
    // non c'è il default, chiudo
    }

    //carico il footer
    require_once("footer.php");
    ?>
    Codice HTML:
    <!-- Tag ID benvenuto -->
    <div id="benvenuto">
         <!-- ... codice ... -->
    </div>
    
    <!-- Tag ID arrivederci -->
    <div id="arrivederci">
         <!-- ... codice ... -->
    </div>
    Il problema è che ora non so proprio come fare con lo switch() che legge solo il div richiesto dalla variabile $_GET["contentID"]. Ho letto in giro che devo usare il parsing HTML, ma seguendo dei codici d'esempio non ho ottenuto nulla... non riesco a caricare il div richiesto e a ignorare l'altro codice HTML... come posso fare? Grazie.

  2. #2
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Il metodo più semplice è scrivere il codice la dove ti serve:

    Codice PHP:
    <?php
    //carico l'header
    require_once("header.php");

    //eseguo uno switch che mi consente di ottenere tramite il metodo GET il contenuto richiesto

    switch($_GET["contentID"]) {
    case
    "benvenuto":
    ?>
    <div id="benvenuto">
    <!-- ... codice ... -->
    </div>
    <?php
    break;


    case
    "arrivederci":
    ?>
    <div id="arrivederci">
    <!-- ... codice ... -->
    </div>
    <?php
    // non c'è il default, chiudo
    }

    //carico il footer
    require_once("footer.php");
    ?>
    Anche se non è il più pulito. Forse meglio creare due pagine, ed in ciascuna di essere caricare header e footer, e poi mostrare il contenuto della pagina, senza rigiri via $_GET.

    Se invece $_GET ti serve per altri motivi, spiega quelli, che magari c'è una soluzione migliore

  3. #3
    L'avatar di soulcanada
    soulcanada non è connesso Utente giovane
    Data registrazione
    12-08-2011
    Messaggi
    75

    Predefinito

    Io invece proporrei un metodo quasi inverso: perchè non utilizzi una pagina e dentro carichi dinamicamente il contenuto che ti serve, sempre utilizzando lo switch?

    Codice PHP:
    <?php
    //carico l'header
    require_once("header.php");

    // La pagina di default
    $page = '404';

    //eseguo uno switch che mi consente di ottenere tramite il metodo GET il contenuto richiesto
    switch($_GET["contentID"]) {
    case
    "benvenuto":
    $page = 'benvenuto';
    break;

    case
    "arrivederci":
    $page = 'arrivederci';
    break;

    }

    // carico ora il contenuto
    require_once($page.'.php');

    //carico il footer
    require_once("footer.php");
    ?>
    Con questo approccio devi solamente scrivere le pagine di contenuto che verranno poi incluse secondo necessità.

    Se lo switch del contentID non trova case da matchare, la variabile $page rimane 404 caricando poi la pagina 404.php indicante pagina non trovata.

  4. #4
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,752

    Predefinito

    Oppure:

    Codice PHP:
    <?php
    //carico l'header
    require_once("header.php");

    $pagine = array('contenuto','arrivederci',...); //nota che può esser inizializzato automaticamente ad esempio con la glob!

    if(!in_array($page,$pagine))
    $page = '404';

    // carico ora il contenuto
    require_once($page.'.php');

    //carico il footer
    require_once("footer.php");
    ?>
    Ciao!
    Ultima modifica di alemoppo : 11-09-2012 alle ore 13.16.33

  5. #5
    L'avatar di dreadnaut
    dreadnaut non è connesso Super Moderatore
    Data registrazione
    22-02-2004
    Messaggi
    6,306

    Predefinito

    Notare che qualsiasi metodo di get+include come suggerito sopra ti obbliga a modificare due file ogni volta che vuoi aggiungere una pagina: la pagina e il "controller". Se crei pagine separate, ne modifichi uno solo. Altrimenti, devi scrivere un controller più sveglio che controlli se il file da includere esiste o no (a priori con file_exists o is_readable, o controllando il risultato di include().

    Quindi, o fai le cose per bene (scrivendo un controller più complesso) oppure ti complichi la vita, ed in ogni caso c'è più lavoro da fare rispetto alle pagine singole.

    Bisognerebbe quindi capire se ti serva un controller oppure no, a seconda di quello che stai cercando di fare —la soluzione che hai deciso di applicare potrebbe non essere la più adatta.
    Ultima modifica di dreadnaut : 11-09-2012 alle ore 13.43.46

  6. #6
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,752

    Predefinito

    Come ho scritto nel commento sopra, può esser usata ad esempio una glob.. e il controller non viene complicato...

    ad esempio, creando le pagine nella cartella "pagine", il controller non dev'essere modificato:

    (ah, non l'ho testato... anche perchè è soltanto un'idea...)
    Codice PHP:
    <?php
    //carico l'header
    require_once("header.php");

    $pagine = glob('pagine/*.php');

    if(!
    in_array($page,$pagine))
    $page = '404';

    // carico ora il contenuto
    require_once('pagine/'.$page.'.php');

    //carico il footer
    require_once("footer.php");
    ?>
    Ciao!

  7. #7
    Guest

    Predefinito

    @dreadnaut grazie mille per l'aiuto, anche se non è uno dei più puliti mi è servito a realizzare ciò che volevo in un solo file. Ringrazio anche gli altri per l'aiuto. Nel caso dovessi usare più file farò sicuramente riferimento ai vostri esempi ;)

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •