2016-02-22 11 views
5

Il mio codice è il seguente:

content.tpl:

{* Smarty *} 
{extends file='PageContentLayout.tpl'} 

PageContentLayout.tpl

{* Smarty *} 
{block name="file_name"} 
    <p>{$smarty.current_dir}</p> 
    <p>{$smarty.template}</p> 
{/block} 


{block name="other_content"} 
    ... 
    {* blah... *} 
    ... 
{/block} 

Nelle versioni precedenti di Smarty, questo codice stamperebbe il nome del modello e il percorso del file: content.tpl.

Tuttavia, ho appena aggiornato a 3.1.29, e ora sembra che sia il nome del file di base PageContentLayout.tpl che viene stampato.

Presumo che si tratti di un cambiamento intenzionale di progettazione in diverse versioni di Smarty, ma non riesco a trovare alcuna documentazione su queste modifiche.

Quello che mi piacerebbe davvero sapere, però, è quale è il modo migliore per ottenere la precedente funzionalità?

== == EDIT

Ho notato che anche quando si chiama {$smarty.current_dir} dalla estendere ing di file, ancora otteniamo percorso e il nome della base-file. Questo è un cambiamento piuttosto significativo rispetto alle versioni precedenti, e piuttosto serio nel mio caso, perché non riesco più a scrivere codice dinamico per trovare il percorso del file di livello superiore.

+0

Penso che ora è necessario spostare il blocco 'file_name' sul modello secondario' content.tpl' per ottenere il nome file. –

+0

@ PawełMikołajczuk No. Io dico esplicitamente nel mio == EDIT == block, che mettendo lo stesso codice nel template secondario, rende il percorso e il nome del file del genitore !! Pazzo pazzo, no? Cambiamenti importanti da introdurre in un livello di rilascio minore. – cartbeforehorse

+0

Ouć;/usiamo smarty in Newscoop ma ci siamo fermati al 3.1.21. Gli ultimi cambiamenti sono enormi e dovrebbero essere marchiati almeno come 3.2.x o addirittura 4.x.Ho paura che ora il tuo caso d'uso non sia possibile (puoi trovare informazioni sui cambiamenti nella mia risposta) e il migliore sarà il downgrade al 3.1.27 –

risposta

4

Questo è probabilmente il risultato di ultima variazione di Smarty

Starting with version 3.1.28 template inheritance is no longer a compile time process. 
All {block} tag parent/child relations are resolved at run time. 

Questo non risolve tutte le restrizioni attualmente noti (vedi sotto).

Da sviluppatori Smarty:

Versioni < 3.1.28 fatto cache di tutti gli oggetti di modello per le prestazioni di riutilizzarli nel caso in cui un sub-modello è stato chiamato più volte. Tuttavia era uno spreco di memoria. 3.1.28 è ottimizzato per dimensioni e velocità e la gestione degli oggetti del modello interno è completamente diversa. Il $smarty->template_objects è stato rimosso.

Quando il debug è abilitato, alcune informazioni come il percorso del file di modello sono disponibili all'interno dell'array $smarty->_debug->template_data.

note di rilascio di successione: https://github.com/smarty-php/smarty/blob/master/INHERITANCE_RELEASE_NOTES.txt

nuove caratteristiche: https://github.com/smarty-php/smarty/blob/master/NEW_FEATURES.txt

È possibile verificare se $smarty.template_object non hanno dati che cosa avete bisogno.

+0

Ho bisogno di fare ulteriori indagini su quello che hai detto, ma ho trovato un work-around per il momento, e il tempo di taglia sta arrivando alla fine. La tua risposta è completa, quindi grazie. – cartbeforehorse

+0

puoi scrivere in commento il tuo lavoro? –