Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    107

    passare a una variabile il contenuto di una pagina

    Ciao!
    si può passare a una variabile il contenuto di una pagina? dove per contenuto intendo diverse righe di codice php.
    Vi spiego il problema: per alleggerire le pagine del mio sito, dato che l'impaginazione è più o meno sempre la stessa, volevo creare un file template.php in cui vi sono appunto i vari div dell'impaginazione, e ogni pagina del sito richiama questo file e contiene solo ciò che la caratterizza diversamente dalle altre (titolo, navigazione, contenuto).

    Mi era stato suggerito di fare così:
    <<crei il file generico "template.php" con il tuo HTML e nei punti "critici" (dove ci sono le parti che cambiano) inserisci delle variabili, p.es.:

    Codice PHP:
    ...
    <title><?php print $TEMPLATE['titolo']; ?></title>
    ...
    <div id="content">
    <?php print $TEMPLATE['contenuto']; ?>
    </div>
    ...

    e nei singoli file una cosa tipo (es.: "index.php" per la home):

    Codice PHP:
    $TEMPLATE['titolo'] = 'Titolo pagina home';
    $contenuto "
    ...blocco HTML...
    "
    ;
    $TEMPLATE['contenuto'] = $contenuto;
    include (
    'template.php'); 
    >>

    Il problema è, appunto, che se il mio contenuto consiste in diverse righe di codice php, come faccio a metterle tutte nella variabile $contenuto?

    Ci sono altri modi per farlo?
    grazie in anticipo per le eventuali risposte...

  2. #2
    Originariamente inviato da pape86
    Il problema è, appunto, che se il mio contenuto consiste in diverse righe di codice php, come faccio a metterle tutte nella variabile $contenuto?
    In che senso diverse righe di codice php, in contenuto non ci va html o ho capito male?

    In ogni caso non c'è problema se hai più righe di "codice" in contenuto in quanto la fine di una riga è solo un carattere speciale (\n) che verrà scritto come tutti gli altri nella variabile.
    Coltiva Linux, Windows si pianta da solo!

  3. #3
    Non credo tu possa inettare del codice php .. però certamente contenuto èpuò essere una stringa contente anche tag html ... Non so bene cosa tu devi rappresentare ma quello che mi viene in mente è di mettere in ogni pagina tipo index.php tutto il php (interrogazioni a DB, cicli etc) necessario per arrivare ad avere una stringa html completa con quello che vuoi mostare . E a quel punto passare quella stringa come contenuto.
    OUTSHINE '84

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    107
    In pratica, per fare un esempio, il contenuto (anzi, la prima parte) della index.php è questo:
    Codice PHP:
    <div id="content">
    <?php 
    // verifico se è il primo accesso
    if(!isset($_POST['utente']) && !isset($_SESSION['utente'])) {    // è il primo accesso 
     
    $sessione->creaForm(); 

    elseif(isset(
    $_POST['utente']) && !isset($_SESSION['utente'])) { // è il secondo accesso 
    // validazione dei parametri tramite filtro per le stringhe 
    $user=strtolower(trim(filter_var($_POST['utente'], FILTER_SANITIZE_STRING)));
    // memorizzo username inserito nel form         
    $pwd=trim(filter_var($_POST['password'], FILTER_SANITIZE_STRING));
    // memorizzo password inserita nel form 
    require_once("\class\MysqlConnection.php"); 
    // Connessione e selezione del database 
    $data = new MysqlConnection();
    $data->connetti();
    $all_utenti mysql_query("SELECT nome_utente FROM utenti") or die("Query fallita: " mysql_error());
    [...]
    </
    div>
    Quindi, dovrei creare la variabile $TEMPLATE['contenuto'] come una stringa il cui contenuto è tutto il pezzo di codice sopra. Tipo:
    Codice PHP:
    $TEMPLATE['contenuto'] = "<?php // verifico se è il primo accesso [...] ?> ";
    Il problema è che dovrei mettere il simbolo \ davanti ad ogni carattere tipo " per convertirlo in html..e non mi sembrava un'operazione molto semplice, e soprattutto antiestetica e illeggibile, perchè se devo modificare qualcosa nel contenuto della index.php devo modificare la stringa.

    Spero di essermi spiegato un po' meglio!

  5. #5
    Ma non è più semplice eseguire il codice php in index.php e poi mettere solo l'html in contenuto:
    index.php :
    Codice PHP:
    <div id="content">
    <?php
    // verifico se è il primo accesso
    if(!isset($_POST['utente']) && !isset($_SESSION['utente'])) {    // è il primo accesso
    $sessione->creaForm();
    $TEMPLATE['contenuto'] = "###html del primo accesso###";
    }
    [...]
    Il tuo codice è molto confuso, dove setti $TEMPLATE['contenuto'] e dove includi template.php?
    Coltiva Linux, Windows si pianta da solo!

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    107
    Allora:

    file template.php :

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN"
    http://www.w3.org/TR/html4/strict.dtd>
    <html lang="it">
    <head>
    <title><?php print $TEMPLATE['nome_pag']; ?></title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
    <meta http-equiv="content-script-type" content="text/javascript">
    <meta http-equiv="content-style-type" content="text/css">
    <link rel="stylesheet" type="text/css" href="layout2.css">
    <link rel="stylesheet" type="text/css" href="page.css">
    <script language=JavaScript src="mostraMenu.js"></script>
    </head>
    <body>
    ...
    ...
    <div id="container">
    <div id="header"><h1>NOME SITO</h1></div>
    <div id="navigation">....</div>
    <div id="extra">....</div>
    <div id="content"> <?php print $TEMPLATE['contenuto']; ?> </div>
    <div id="footer">....</div>
    </div>

    E questo vale per tutte le pagine del mio sito (in modo da alleggerirle, e, in caso di modifica o aggiunta di codice, lo devo fare solo qua e non in tutte). La parte evidenziata in rosso sarà quella variabile.


    Le altre pagine, esempio index.php , saranno così:


    Codice PHP:
    <?php 
    $TEMPLATE
    ['nome_pag'] = 'Home';
    $contenuto "[COLOR=red]...[/COLOR] ";    // <--  al posto dei puntini devo inserire codice php
    $TEMPLATE['contenuto'] = $contenuto;
    include (
    'template.php');
    ?>

    Il problema, ripeto, è nella variabile $contenuto che devo definire in ciascuna pagina: se, nel contenuto della index.php ho questo codice (l'ho tagliato)...

    Codice PHP:
    <?php
    // verifico se è il primo accesso
    if(!isset($_POST['utente']) && !isset($_SESSION['utente'])) {
      
    // è il primo accesso
      
    $sessione->creaForm();
    }
    elseif(isset(
    $_POST['utente']) && !isset($_SESSION['utente'])) {
      
    // è il secondo accesso
      // validazione dei parametri tramite filtro per le stringhe
      
    $user=strtolower(trim(filter_var($_POST['utente'], FILTER_SANITIZE_STRING)));
      
    // memorizzo username inserito nel form
      
    $pwd=trim(filter_var($_POST['password'], FILTER_SANITIZE_STRING));
      
    // memorizzo password inserita nel form
      
    require_once("\class\MysqlConnection.php");
      
    // Connessione e selezione del database
      
    $data = new MysqlConnection();
      
    $data->connetti();
      [...
    ecc ecc....]
    ...come faccio a metterlo al posto dei puntini?? Dovrei mettere la barra \ davanti ad ogni virgoletta " sennò la stringa s'interrompe, ma è un'operazione lunga e soprattutto compromette la leggibilità.
    Vorrei sapere se c'è un altro modo..insomma, presumo che tutti quelli che creano siti si siano trovati di fronte a una situazione del genere, quindi non mi sembra sia un problema difficile da capire o da risolvere. Magari anche cambiando approccio..non so..

    Vi prego, aiutatemi che sto andando fuori di senno...è da giorni che ci sbatto la testa senza uscirne!

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    107
    chiedo scusa...ho pubblicato due volte lo stesso post...non so come!

  8. #8
    Originariamente inviato da pape86
    Le altre pagine, esempio index.php , saranno così:


    Codice PHP:
    <?php 
    $TEMPLATE
    ['nome_pag'] = 'Home';
    $contenuto "[COLOR=red]...[/COLOR] ";    // <--  al posto dei puntini devo inserire codice php
    $TEMPLATE['contenuto'] = $contenuto;
    include (
    'template.php');
    ?>
    Quello che intendo io è eseguire il codice che vuoi mettere al posto dei puntini direttamente in index.php e poi il risultato di questo codice (il corpo della pagina) lo metti al posto dei puntini e quindi questo:
    Codice PHP:
    <?php
    // verifico se è il primo accesso
    if(!isset($_POST['utente']) && !isset($_SESSION['utente'])) {
      
    // è il primo accesso
      
    $sessione->creaForm();
    }
    elseif(isset(
    $_POST['utente']) && !isset($_SESSION['utente'])) {
      
    // è il secondo accesso
      // validazione dei parametri tramite filtro per le stringhe
      
    $user=strtolower(trim(filter_var($_POST['utente'], FILTER_SANITIZE_STRING)));
      
    // memorizzo username inserito nel form
      
    $pwd=trim(filter_var($_POST['password'], FILTER_SANITIZE_STRING));
      
    // memorizzo password inserita nel form
      
    require_once("classMysqlConnection.php");
      
    // Connessione e selezione del database
      
    $data = new MysqlConnection();
      
    $data->connetti();
      [...
    ecc ecc....]
    lo esegui in index.php invece di scriverlo nella variabile $TEMPLATE['contenuto'].

    E' quest'ultimo codice che genera il contenuto della pagina giusto?

    Quindi basta che dove viene generato l'html in questo codice invece di fare cose tipo
    Codice PHP:
    print "testo html"
    usa questo:
    Codice PHP:
    $TEMPLATE['contenuto'] = "testo html"
    Coltiva Linux, Windows si pianta da solo!

  9. #9
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    107
    E' quest'ultimo codice che genera il contenuto della pagina giusto?
    Ah, ho capito cosa intendi fare tu..sì, sarebbe anche fattibile per alcune pagine, ma nella maggior parte delle pagine il codice html è generato dalle echo e in diversi punti del codice, in seguito a cicli o controlli. Quindi, non è semplicissimo separare il codice html generato dalle funzioni in php che lo creano. Capito?

    A questo punto pensavo di cambiare approccio e fare una cosa di questo genere:
    1) modifico la pagina template.php così (vedi modifica blu):

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN"
    http://www.w3.org/TR/html4/strict.dtd>
    <html lang="it">
    <head>
    <title><?php print $TEMPLATE['nome_pag']; ?> </title>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15">
    <meta http-equiv="content-script-type" content="text/javascript">
    <meta http-equiv="content-style-type" content="text/css">
    <link rel="stylesheet" type="text/css" href="layout2.css">
    <link rel="stylesheet" type="text/css" href="page.css">
    <script language=JavaScript src="mostraMenu.js"></script>
    </head>
    <body>
    ...
    ...
    <div id="container">
    <div id="header"><h1>NOME SITO</h1></div>
    <div id="navigation">....</div>
    <div id="extra">....</div>
    <div id="content"> <?php include ('$TEMPLATE['file_content']'); ?> </div>
    <div id="footer">....</div>
    </div>

    2) creo un file tipo content_index.php con il codice php della pagina index.php (stessa cosa farò per le altre: ad esempio, per chi_sono.php creo il file content_chi_sono.php, ecc.)

    3) creo la pagina index.php (o qualsiasi altra) in questo modo:

    Codice PHP:
    <?php $TEMPLATE['nome_pag'] = 'Home';
    $TEMPLATE['file_content'] = 'content_index.php';
    include (
    'template.php'); ?>
    Potrebbe andare?

  10. #10
    Ok così va bene io pensavo che il codice fosse dipendente dalla pagina che includeva template e invece vedo che può stare anche in un file content_index.php.
    Coltiva Linux, Windows si pianta da solo!

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.