Pagina 2 di 4 primaprima 1 2 3 4 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 33
  1. #11
    Originariamente inviato da xnavigator
    si in eval non ci sarebbe bisogno di usare ob..
    in realtà c'è bisogno pure

    se lanci un eval, tranne se piazzi tutto dentro una variabile e la ritorni con un return il tutto viene inviato al browser

    file: template.php
    codice:
    <html><body>
    <h1><?php=template_var('titolo')?></h1>
    <h2><?php=template_var('descrizione')?></h2>
    </body></html>
    ma serve usare template_var? Quando "esegui" il template imposti, prima dell'eval, le variabili che disponibili, variabili che poi cancelli (in realtà essendo riferimenti non ha molta importanza)

    e poi c'è il codice vero e proprio che si collega al db ecc (per essere molto grezzi...)
    ora per elaborare il template dovrei fare include('template.php');
    beh, no, quello deve stare nel codice del modulo che si preoccupa di reimpacchettare tutto in delle liste da passare al template del tema che le visualizza per come dice lui

    dovrei adattare il template facendo una cosa del genere:
    Codice PHP:
    <?php
     
    return '<html><body><h1>' template_var('titolo') . '</h1></body></html>';
    ?>
    ma non mi sembra la soluzione più elegante...

    Thanks!
    potresti anche fare

    $variabile = template_var('titolo');
    return <<< HTML_EOF
    <html><body><h1>{$variabile}</h1></body></html>
    HTML_EOF;

    ma è scomodo pure perché non puoi richiamare funzioni dal codice
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  2. #12
    Originariamente inviato da daniele_dll
    in realtà c'è bisogno pure

    se lanci un eval, tranne se piazzi tutto dentro una variabile e la ritorni con un return il tutto viene inviato al browser
    infatti senza ob utilizzando eval devi prevedere il codice con il return e stai apposto (se lo vuoi in una variabile)


    ma serve usare template_var? Quando "esegui" il template imposti, prima dell'eval, le variabili che disponibili, variabili che poi cancelli (in realtà essendo riferimenti non ha molta importanza)
    questo è un mio "difetto", non mi piace avere variabili settate in giro per lo script, preferisco salvare tutte in una funzione (utlizzando ovviamente static)

    piccolo esempio visto che nel topic più che discorsi tecnici voglio parlare di codice:
    Codice PHP:
    <?php
    function template_var() {
     static 
    $template_assign;
     if (
    func_num_args()==1) {
      return 
    $template_assign[func_get_arg(0)];
     } else {
      
    $tempalate_assign[func_get_arg(0)] = func_get_arg(1);
      }
    }
    ?>

    potresti anche fare

    $variabile = template_var('titolo');
    return <<< HTML_EOF
    <html><body><h1>{$variabile}</h1></body></html>
    HTML_EOF;

    ma è scomodo pure perché non puoi richiamare funzioni dal codice
    questo ovviametne non lo posso fare perchè appunto come ho richiesto all'inizio voglio poter usare php nel template..

    sembra che debba per forza utilizzare ob, (se non voglio utilizzare eval per l'appunto)

  3. #13
    Tempo fà lo feci anche io un template engine ad-hoc.

    E confermo tutto quello che ha detto daniele_dll, eval sarebbe la soluzione migliore, anche se però ha un grosso difetto che mi fà imbestialire: It is not possible to catch a parse error in eval() using set_error_handler(). , il che significa che non puoi manco gestire eventuali errori, bello eh!, però ti confermo che se usato correttamente si rivela uno strumento molto potente.

    Però non è tutto oro quel che luccica, visto che purtroppo pagherai molto a livello di perfomance visto che PHP deve effettuare il parsing della stringa a runtime, anche se credo potresti risolvere effettuando un controllo della stringa usando il tokenizer/lexer interno di PHP (non so se ci sia qualche funzione messa a disposizione, vedrò sulla documentazione).

    Cmq io usai questa tecnica, preg_replace_callback (passandogli come callback una funzione lambda) e eval, credo sia la soluzione più elegante.

    Ovviamente queste sono solo le mie esperienze, e anzi questa discussione mi interessa molto, visto che sono curioso di sapere quale tecnica intraprenderai senza eval() .

  4. #14
    Originariamente inviato da xnavigator
    infatti senza ob utilizzando eval devi prevedere il codice con il return e stai apposto (se lo vuoi in una variabile)
    beh si, ma lo devi restituire :\

    non è molto comodo

    questo è un mio "difetto", non mi piace avere variabili settate in giro per lo script, preferisco salvare tutte in una funzione (utlizzando ovviamente static)

    piccolo esempio visto che nel topic più che discorsi tecnici voglio parlare di codice:
    Codice PHP:
    <?php
    function template_var() {
     static 
    $template_assign;
     if (
    func_num_args()==1) {
      return 
    $template_assign[func_get_arg(0)];
     } else {
      
    $tempalate_assign[func_get_arg(0)] = func_get_arg(1);
      }
    }
    ?>
    questo ovviametne non lo posso fare perchè appunto come ho richiesto all'inizio voglio poter usare php nel template..

    sembra che debba per forza utilizzare ob, (se non voglio utilizzare eval per l'appunto)
    ehm, guarda che usare uno static in questo modo è infinitamente peggio

    a parte che non hai variabili in giro per lo script ma le hai localizzate in un punto ben preciso dal quale vengono subito dopo scaricate, ma l'utilizzo di una funzione peggiora consistentemente le prestazioni e ti impedisce di acquisire valori restituiti da un metodo
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #15
    Originariamente inviato da daniele_dll


    ehm, guarda che usare uno static in questo modo è infinitamente peggio
    non ho fatto test specifici... ma penso che il peggioramento delle prestazioni sia di un 0.001sec totale e non penso che questo giustifichi un cambio di utilizzo..

    per quanto riguardo la soluzione al problema iniziale credo proprio che non ci sia altra strada che usare ob...


  6. #16
    non mi riferivo tanto alle prestazioni ma più strutturazione del codice

    Il codice che si appiggia a classi/metodi/variabili statiche è sconsigliato perché considerato una bad-pratice

    Guarda
    function template_var() {
    if (func_num_args()==1) {
    return $GLOBALS['____template_assign'][func_get_arg(0)];
    } else {
    $GLOBALS['____template_assign'][func_get_arg(0)] = func_get_arg(1);
    }
    }

    cosi ottieni lo stesso risultato senza usare static

    comunque ti consiglio di usare una classe, cosi non hai nemmeno il problema
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #17
    Originariamente inviato da daniele_dll
    Il codice che si appiggia a classi/metodi/variabili statiche è sconsigliato perché considerato una bad-pratice
    davvero? non lo sapevo, mi documenterò.. alla fine io usavo static proprio per non usare $GLOBALS..
    -

    per quanto riguarda l'utilizzo della classe, lo farei anche ma praticametne ho tutto il mio codice del framework che uso che è procedurale.. a questo punto continuo ad utilizzare le funzioni...

    (anche perchè i metodi che cosi non potrei avere sono facilmente "riproducibili" con un codice del genere, come ben puoi immaginare: )

    Codice PHP:

    function template_var $type $name false $value false)  {
     if (
    $type==1) {
       
    // code
     
    } else if ($type==2) {
      
    // code#2
     
    }
     
    //..

    (cosi dovrebbe essere anche un pò più performante rispetto ad un uso oop.. anche se ovviametne il codice è un pò meno ordinato)



  8. #18
    Originariamente inviato da xnavigator
    davvero? non lo sapevo, mi documenterò.. alla fine io usavo static proprio per non usare $GLOBALS..

    beh meglio usare l'incapsulazione degli oggetti, a sto punto

  9. #19
    Originariamente inviato da xnavigator
    davvero? non lo sapevo, mi documenterò.. alla fine io usavo static proprio per non usare $GLOBALS..
    whats-so-bad-about-the-singleton/

    per quanto riguarda il template system per adesso
    in attesa di trovare/implementare un sistema xml/xslt
    utilizzo massassi che alla fine del discorso
    mi sembra + veloce e + semplice da utilizzare e abbastanza
    versatile da separare logica e presentazione.



    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  10. #20
    nuova domanda... come integrate i risultati di una query con il template?

    leggendo un pò massassi, ho visto che lui utilizzerebbe una funzione che non ha implementato (almeno io non l'ho vista) nel codice:

    $body->set('user_list', $user->get_list());

    che si dovrebbe riferire a questa porzione di template (penso):

    codice:
    <?php foreach($users as $user): ?>
        <tr>
            <td bgcolor="#FFFFFF" align="center"><?=$user['id'];?></td>
            <td bgcolor="#FFFFFF"><?=$user['name'];?></td>
            <td bgcolor="#FFFFFF"><?=$user['email'];?></td>
            <td bgcolor="#FFFFFF" align="center"><?=($user['banned'] ? 'X' : '');?></td>
        </tr>
    <?php endforeach; ?>


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 © 2026 vBulletin Solutions, Inc. All rights reserved.