Pagina 1 di 21 1 2 3 11 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 202
  1. #1

    Template Engine - Usare codice php nei template o no?

    E' una domanda da un milione di dollari

    Ho implementato il supporto per il codice PHP nel mio template engine permettendo di scrivere i template come meglio si credono, template suddivisi in blocchi che vengono caricati, suddivisi e poi eseguiti a richiesta

    codice:
    <h1>Profili più gettonati</h1>
    <ul>
        [*]
            [img]{$TemplatePath}/Images/Avatars/{$Profile['Avatar']['File']}.jpg[/img]
            {$Profile['Nick']}
    {$Profile['Sex']}
    {$Profile['Age']}, {$Profile['City']}
    
            
            OFFLINE
            
            
            ONLINE
            
        
        [/list]
    questo è un pezzo di un template di una pagina

    In questo caso il sistema utilizzava sempre eval per effettuare il parsing, ma lo usava in modo che non fosse possibile eseguire codice php all'interno del template in alcun modo.

    Questo template, con il nuovo sistema, diventa quindi
    codice:
    <h1>Profili più gettonati</h1>
    <ul>
        [*]
            [img]<?php echo $TemplatePath; ?>/Images/Avatars/<?php echo $Profile['Avatar']['File']; ?>.jpg[/img]
            <?php echo $Profile['Nick']; ?>
    <?php echo $Profile['Sex']; ?>
    <?php echo $Profile['Age']; ?>, <?php echo $Profile['City']; ?>
    
            
            OFFLINE
            
            
            ONLINE
            
        
        [/list]
    Ora, da un punto di vista della velocità di apprendimento SICURAMENTE la curva è altissima perché si può usare tranquillamente codice php gestito da dreamweaver senza incappare in problematiche situazioni

    Per essere precisi, il codice di sopra, potendo sfruttare php, lo trasformerei in
    codice:
    <h1>Profili più gettonati</h1>
    <ul>
        <?php foreach($Profiles as $Profile) : ?>[*]
            [img]<?php echo $TemplatePath; ?>/Images/Avatars/<?php echo $Profile['Avatar']['File']; ?>.jpg[/img]
            <?php echo $Profile['Nick']; ?>
    <?php echo $Profile['Sex']; ?>
    <?php echo $Profile['Age']; ?>, <?php echo $Profile['City']; ?>
    
            <?php if ($Profile['IsOnline'] === false) : ?>
            OFFLINE
            <?php else : ?>
            ONLINE
            <?php endif; ?>
        
        <?php endforeach; ?>[/list]
    che, quanto orrido possa essere, essendo comunque usato ESCLUSIVAMENTE nei template, è sicuramente veloce e facile da scrivere

    voi lo sapete, o per lo meno chi mi conosce lo sa, queste cose per me sono l'orrore allo stato puro, però se si vuole ottenere un buon risultato bisogna trovare dei compromessi

    Questo stesso codice si può riscrivere anche usando gli short tags (invece di <?php echo .... si può fare <?=..... però decisamente è sconsigliatissimo!)

    Secondo voi conviene fare una cosa del genere?

    In questo modo quando parso i blocchi estraggo i valori dal database e li passo ai blocchi principali, o per meglio dire direttamente al template della pagina in questione, evitando e riducendo rogne e problemi perché a questo punto è direttamente il template che gestisce l'organizzazione a video e non più il codice del modulo php ottenendo una TOTALE separazione del tutto

    cosa mi consigliate?


    NOTA: non sto dicendo di mischiare php e html ma ESCLUSIVAMENTE di utilizzare php e html insieme nel codice del template quindi php è utilizzato esclusivamente per costruire la pagina non per gestire la logica del tutto che quella è per i fatti suoi ... in questo modo si ottengono tanti vantaggi senza precludere funzionalità

  2. #2
    bhè io sono il tester di quell'aggeggio

    a volte l'istruzione condizionale può essere utile ..
    oppure evita giri di codice abbastanza assurdi
    tipo fare un truncate di una frase senza passarsi una matrice con array map

    Soluzioni di Web marketing, CMS, Temi wordpress, grafica e molto altro

    -----
    Ogni topic aperto con un titolo errato fa perdere un capello al moderatore che lo dovrà sistemare.. se non vuoi contribuire alla calvizia dei moderatori apri 3D a norma di regolamento, e prima fai una ricerca! No pvt tecnici!

  3. #3
    io mi sono fermato alla parola Dreamweaver, meravigliato che uno come te lo utilizzi e senza capire cosa c'entri in tutto questo ...

    non mi è comunque chiaro il discorso if else ... io vedo dei blocchi tali quali il foreach, quindi la logica mi sembra troppo ambigua in quel passaggio.

    il <?= è deprecato ... non è sconsigliabile, è proprio ufficialmente una bad practice PHP da dimenticare

    sull'apri e chiudi tutto sappiamo che le performance sono deludenti, ma per come è impostat la logica, mi sembra non ci siano tante alternative ... ed è una logica comune a tanti FW MVC, quindi se loro se la cavano, magari si può sorvolare

    [edit] chissà se vedrò mai un template engine che ha presentazione indipendente dal linguaggio ... e non usa variabili PHP stile o altro ... {Profile.Nick} ... per farti un esempio ...

    codice:
    [foreach @Result as Profile][*]{Profile.Nick} has {Profile.Age}
    dove l'at sta per Address della variabile passata, Profile è quella sfruttata nel foreach, la quale conterrà chiavi Nick ed Age
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    Personalmente odio i template engine
    mi trovo molto bene con questo semplice
    semplice ma efficace massasi parti
    da un main e aggiungi e per sicurezza puoi
    mettere i templates sopra la www






    [EDIT]

    E' anche la logica che sta dietro al 'template engine'

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

  5. #5
    Originariamente inviato da andr3a
    chissà se vedrò mai un template engine che ha presentazione indipendente dal linguaggio ... e non usa variabili PHP stile o altro ... {Profile.Nick} ... per farti un esempio ...
    oh beh PHPTal usa file XML percui... e mi sembra di averne visti alcuni di template engine proprietari che usano proprio la sintassi che scrivi tu

  6. #6
    Originariamente inviato da andrea.paiola
    oh beh PHPTal usa file XML percui...
    su xml quanti ne vuoi, cocoon, PHPTal ... ogni linguaggio ha anche un tple basato su xml ... ma io pensavo a qualcosa di più agile e snello ... o kiss

    ma forse l'astrazione e la capacità espressiva di XML non ha eguali ... un JSONML ad esempio mi saprebbe di poco ordinato o pulito ... boh, farò una ricerca sull'argomento
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    Originariamente inviato da andr3a
    chissà se vedrò mai un template engine che ha presentazione indipendente dal linguaggio ... e non usa variabili PHP stile o altro ... {Profile.Nick} ... per farti un esempio ...

    codice:
    [foreach @Result as Profile][*]{Profile.Nick} has {Profile.Age}
    dove l'at sta per Address della variabile passata, Profile è quella sfruttata nel foreach, la quale conterrà chiavi Nick ed Age
    in Ruby on Rails sarebbe:
    codice:
    @Result.each do |Profile|[*]<%= Profile.Nick %> has <%= Profile.Age %>
    o una roba del genere... come vedi non è molto distante... certo non è PHP

  8. #8
    Originariamente inviato da andr3a
    io mi sono fermato alla parola Dreamweaver, meravigliato che uno come te lo utilizzi e senza capire cosa c'entri in tutto questo ...
    beh, a me di DW non frega ASSOLUTAMENTE nulla, ovviamente c'aggiungo, però siccome i template poi li fa il grafico perché cosi evito di smazzarmi inutilmente io sull'html se lo prevedo e mi facilito la vita io (e chi poi lo userà, se lo userà) è meglio, no?

    non mi è comunque chiaro il discorso if else ... io vedo dei blocchi tali quali il foreach, quindi la logica mi sembra troppo ambigua in quel passaggio.
    si infatti non ha senso usare i blocchi gestiti direttamente dal template engine e nel contempo anche i foreach/if-else e cosi via di php fa casino ... ma era per fare un esempio

    il <?= è deprecato ... non è sconsigliabile, è proprio ufficialmente una bad practice PHP da dimenticare
    si lo so ... ma era per dire che si poteva fare

    sull'apri e chiudi tutto sappiamo che le performance sono deludenti, ma per come è impostat la logica, mi sembra non ci siano tante alternative ... ed è una logica comune a tanti FW MVC, quindi se loro se la cavano, magari si può sorvolare
    beh, magari non sono proprio deludenti deludenti: considera che, tranne che fai un "replace" delle variabili e basta, per dare la massima flessibilità il codice alla fine deve divenire PHP vero e proprio altrimenti l'elevata complessità del template engine killa le performance!

    [edit] chissà se vedrò mai un template engine che ha presentazione indipendente dal linguaggio ... e non usa variabili PHP stile o altro ... {Profile.Nick} ... per farti un esempio ...

    codice:
    [foreach @Result as Profile][*]{Profile.Nick} has {Profile.Age}
    dove l'at sta per Address della variabile passata, Profile è quella sfruttata nel foreach, la quale conterrà chiavi Nick ed Age
    mmm, non è cattiva come idea ma non è fattibile in php ... troppo esoso

    In C# o Python magari si può anche fare

    tanto poi comunque crei un file di cache (assembly/pyc) e lo carichi a runtime

  9. #9
    Originariamente inviato da whisher
    Personalmente odio i template engine
    mi trovo molto bene con questo semplice
    semplice ma efficace massasi parti
    da un main e aggiungi e per sicurezza puoi
    mettere i templates sopra la www
    beh, se odi i template engine vuol dire che fondi logica e presentazione nello stesso file?

    i file del template li puoi posizionare dove vuoi, cosi come i moduli, la configurazione, le librerie e quant'altro ... l'importante è che rimangano accessibili le immagini, i css e il js

    Comunque, ormai, non ha più senso passare tutto fuori dalla document root, basta un semplice htaccess per negare l'accesso e il problema lo risolvi subito

  10. #10
    @nota:

    avevo provato a fare qualcosa stile smarty, che metteva in cache gli spezzoni dei template parsati, ergo i vari blocchi/sotto blocchi, però le performance erano INFINITAMENTE inferiori, anche usando APC o eAccelerator, sia su windows sia su linux!

    per arrivare alla 2.0 mi rimane soltanto, a parte un pò di testing generale, di implementare la cache con APC, XCache, eAccelerator e MemCache

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.