Visualizzazione risultati 1 fino 7 di 7

Discussione: Foreach per gestione <title> dinamicamente e $_GET

  1. #1
    Guest

    Predefinito Foreach per gestione <title> dinamicamente e $_GET

    Allora, ho deciso di rifarmi il sito, ma senza usare un CMS, voglio farmelo da me dato che non sarà aggiornato abitualmente ma ogni tanto con qualche lavoro, ma niente di che.

    Allora, sto gestendo tutto con il php. Ho questi file:

    index.php
    Codice PHP:
    <?php

    if (!defined('PHP_EXT')) define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1));

    include(
    './includes/constants.' . PHP_EXT);
    include(
    './includes/functions.' . PHP_EXT);
    include(
    './includes/header.' . PHP_EXT);

    $page_list = array(
    'index' => 'Index',
    'about' => 'About',
    'contact' => 'Contact',
    'portfolio' => 'Portfolio' ,
    'artfolio' => 'artfolio'
    );

    foreach (
    $page_list as $page => $value) {
    $page_title = $value;
    switch (
    $_GET['page']) {

    case
    $page:
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . $page . ".tpl") . "\");");
    break;

    default:
    $page_title = 'Index';
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . "index.tpl") . "\");");
    break;
    }
    }

    include(
    './includes/footer.' . PHP_EXT);
    ?>
    header.php
    Codice PHP:
    <?php
    eval("execute_tpl(\"" . assign_tpl($tpl_path . "header.tpl") . "\");");
    ?>
    footer.php
    Codice PHP:
    <?php
    eval("execute_tpl(\"" . assign_tpl($tpl_path . "footer.tpl") . "\");");
    ?>
    constants.php
    Codice PHP:
    <?php
    $tpl_path
    = './style/tpl/';
    ?>
    functions.php
    Codice PHP:
    <?php

    /* Assign .tpl */
    function assign_tpl($tpl) {
    return
    str_replace("\"","\\\"",implode("",file($tpl)));
    }

    /* Stamp .tpl */
    function execute_tpl($tpl) {
    echo
    $tpl;
    }
    ?>
    Ora, devo gestire in modo automatico il titolo delle pagine, che risiede nel file header.tpl, incluso in tutte le pagina, il titolo viene richiamato con:
    Codice:
    <title>$page_title</title>
    però ho un problema, in poche parole devo gestire la variabile $_GET con l'array, in modo che, in base al valore passato, cambi il titolo (e usccessivamente le schede nel menù, attraverso una richiesta di indirizzo, dovrà essere :active quella ==).


    Mi da due errori:

    il primo non trova la variabile page_header in header.php poichè non è presente, ma deve cambiare nel file index, quindi non saprei come collegare i due file, dato che in header.php viene stampato il tpl con la variabile.

    il secondo invece mi stampa a video sempre index.tpl anche se cambio valore, e me lo stampa tante volte quanti i valori dell'array.

    Quindi dovrebbe stamparlo una volta in base al contenuto del GET.

    Spero in un vostro aiuto, anche se, forse, mi sono espresso male
    Ultima modifica di jcdesign : 15-01-2009 alle ore 19.51.41

  2. #2
    L'avatar di saitfainder
    saitfainder non è connesso Sëniör Stäff
    Data registrazione
    06-12-2002
    Residenza
    Torino
    Messaggi
    8,715

    Predefinito

    Comincerei a rivedere quel foreach nell'array: che senso ha? Basterebbe selezionare l'elemento dell'array in questo modo:

    Codice PHP:
    $page_list[$_GET['page']]
    Magari fai prima un controllo di esistenza e se non esiste prendi l'elemento 'index'.


    «È una mia peculiarità distorcere la verità e inventarne di nuove.»
    «I tuoi orientamenti hanno su di me un effetto prossimo allo zero.»


  3. #3
    Guest

    Predefinito

    Citazione Originalmente inviato da saitfainder Visualizza messaggio
    Comincerei a rivedere quel foreach nell'array: che senso ha? Basterebbe selezionare l'elemento dell'array in questo modo:

    Codice PHP:
    $page_list[$_GET['page']]
    Magari fai prima un controllo di esistenza e se non esiste prendi l'elemento 'index'.
    Non ho capito, dici di rimuovere il foreach e fare una cosa così?

    Codice PHP:
    <?php

    if (!defined('PHP_EXT')) define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1));

    include(
    './includes/constants.' . PHP_EXT);
    include(
    './includes/functions.' . PHP_EXT);
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . "header.tpl") . "\");");

    $page_list[$_GET['page']] = array(
    'index' => 'Index',
    'about' => 'About',
    'contact' => 'Contact',
    'portfolio' => 'Portfolio' ,
    'artfolio' => 'artfolio'
    );


    switch (
    $_GET['page']) {
    case
    $page_list[$_GET['page']]:
    $page_title = $page_list[$_GET['page']];
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . $page_list[$_GET['page']] . ".tpl") . "\");");
    break;

    default:
    $page_title = 'Index';
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . "index.tpl") . "\");");
    break;
    }

    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . "footer.tpl") . "\");");
    ?>
    Grazie in anticipo


    PS: ho eliminato i file /includes/header.php e footer.php perchè intanto tutte le pagina sono visualizzate ( o almeno, dovrebbero essere) in base al valore passato al GET quindi è inutile includerle e stampo direttamente il .tpl.

  4. #4
    Guest

    Predefinito

    Non ti serve nemmeno lo switch, perchè puoi accedere direttamente all'elemento dell'array $page_list attraverso la chiave rappresentata da $_GET['page'].

    Per farti capire, prova a stampare $page_list[$_GET['page']] subito prima dello switch.


    ciao!

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da debug Visualizza messaggio
    [...]Per farti capire, prova a stampare $page_list[$_GET['page']] subito prima dello switch. [...]
    non riesco a capire, se faccio così mi stampa Array.

    Ho modificato lo script, ma non funziona

    Codice PHP:
    <?php

    if (!defined('PHP_EXT')) define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1));

    include(
    './includes/constants.' . PHP_EXT);
    include(
    './includes/functions.' . PHP_EXT);

    $page_list[$_GET['page']] = array(
    'index' => 'Index',
    'about' => 'About',
    'contact' => 'Contact',
    'portfolio' => 'Portfolio' ,
    'artfolio' => 'artfolio'
    );

    if(
    $_GET['page'] == $page_list[$_GET['page']]) {
    $page_title = $_GET['page'];
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . "header.tpl") . "\");");
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . $page_list[$_GET['page']] . ".tpl") . "\");");
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . "header.tpl") . "\");");
    } else {
    $page_title = 'Index';
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . "header.tpl") . "\");");
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . "index.tpl") . "\");");
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . "footer.tpl") . "\");");
    }
    ?>
    Se visito la pagina / o /index.php restituisce:
    Notice: Undefined index: page in C:\Programmi\EasyPHP 2.0b1\www\jc\index.php on line 8

    Notice: Undefined index: page in C:\Programmi\EasyPHP 2.0b1\www\jc\index.php on line 16

    Notice: Undefined index: page in C:\Programmi\EasyPHP 2.0b1\www\jc\index.php on line 16
    mentre se visito con un qualsiasi valore GET mi stampa sempre gli stessi tpl, cioè quelli in else.

    Sto sempre cambiando ma voglio evitare di complicarmi la vita inutilmente anche se sembra che lo sto facendo, e le mie conoscenze no nsono un granchè

  6. #6
    Guest

    Predefinito

    Perchè hai cambiato il popolamento dell'array??
    Codice PHP:
    page_list = array(
    'index' => 'Index',
    'about' => 'About',
    'contact' => 'Contact',
    'portfolio' => 'Portfolio' ,
    'artfolio' => 'artfolio'
    );
    Ciao!

  7. #7
    Guest

    Predefinito

    Allora, grazie a tutti ragazzi, sono riuscito a risolvere modificando il codice, controllo i dati passati via GET, nell'array e se esiste stampa il file correlato altrimenti stampa sempre Index.

    Codice PHP:
    <?php
    if (!defined('PHP_EXT')) define('PHP_EXT', substr(strrchr(__FILE__, '.'), 1));

    include(
    './includes/constants.' . PHP_EXT);
    include(
    './includes/functions.' . PHP_EXT);

    $page_list = array(
    'index',
    'about',
    'contact',
    'portfolio',
    'artfolio'
    );

    if((
    $_GET['page'] == '') || (!in_array($_GET['page'], $page_list))) {
    $page_title = 'Index';
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . "header.tpl") . "\");");
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . "index.tpl") . "\");");
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . "footer.tpl") . "\");");
    } else {
    $page_title = ucfirst(strtolower($_GET['page']));
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . "header.tpl") . "\");");
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . $_GET['page'] . ".tpl") . "\");");
    eval(
    "execute_tpl(\"" . assign_tpl($tpl_path . "footer.tpl") . "\");");
    }
    ?>
    grazie ancora a tutti del vostro aiuto, è stato molto prezioso

Regole di scrittura

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