2015-07-14 13 views
5

Vorrei modificare l'ordine dei blocchi padre in un modello figlio mentre utilizzo il contenuto dei blocchi padre.Modelli Smarty: come modificare l'ordine dei blocchi nel modello figlio?

Esempio:

template padre:

{block outer} 
    {block a} ... some long content ...{/block} 
    {block b} ... some long content ...{/block} 
    {block c} ... some long content ...{/block} 
{/block} 

template figlio:

{extends file="parent:parent.tpl"} 
{block outer} 
    {block c} reuse content of parent block "c" {/block} 
    {block b} reuse content of parent block "b" {/block} 
    {block a} reuse content of parent block "a" {/block} 
{/block} 

Ho provato ad utilizzare {$smarty.block.parent} all'interno Blocco A, B e C:

{extends file="parent:parent.tpl"} 
{block outer} 
    {block c} {$smarty.block.parent} {/block} 
    {block b} {$smarty.block.parent} {/block} 
    {block a} {$smarty.block.parent} {/block} 
{/block} 

In questo caso {$smarty.block.parent} contiene il contenuto del blocco padre "esterno".

E 'possibile rendere il contenuto dei blocchi interni a, bec all'interno del modello figlio?

Scenario: il contenuto dei blocchi a, bec è molto complesso e voglio evitare di copiare e incollare l'intero contenuto dal genitore.

+0

Non potresti semplicemente impostare ogni blocco figlio come modello figlio, quindi basta fare un modello con l'ordine ABC e un altro con CBA – MiltoxBeyond

+0

Non sono sicuro di aver compreso il tuo suggerimento. :) Ad ogni modo, non posso modificare il modello principale in quanto fa parte di ShopWare. – Leif

risposta

0

Hai provato ad aggiungere il nome del blocco padre?

{extends file="parent:parent.tpl"} 
{block outer} 
    {block c} {$smarty.block.parent.c} {/block} 
    {block b} {$smarty.block.parent.b} {/block} 
    {block a} {$smarty.block.parent.a} {/block} 
{/block} 
+0

Questo mi dà errore di sintassi: $ smarty.block non è valido. Strano messaggio di errore in questo caso. – Leif

0

È possibile definire blocchi come file tpl separati e includerli in qualsiasi ordine. Oppure puoi passare blocchi come una matrice dallo script php e usarli in qualsiasi ordine.

Nel blocco dell'ereditarietà modello è sufficiente definire i luoghi che è possibile modificare.

+0

Grazie per il tuo suggerimento, ma come ho menzionato nel mio precedente commento, non posso modificare il modello principale, perché fa parte di ShopWare. Forse non è possibile con questa struttura del modello. – Leif

0

Abbastanza vecchio argomento ma ho esattamente lo stesso problema e non ho idea di come risolverlo ancora. Ho anche provato a usare smarty.block.parent con lo stesso risultato.

Hai già trovato uno schema che risolva questo problema?

+0

Purtroppo no. Ho finito per copiare quelle grandi parti del modello. – Leif

+0

stesso qui - wow che fa schifo ... – fbtb

1

Anche se questo è un vecchio post questo potrebbe essere importante per il futuro.
Il mio miglior tentativo di risolvere questo problema è la seguente:

{extends file="parent:parent.tpl"} 

{block a} 
    {capture a} 
     {$smarty.block.parent} 
    {/capture} 
{/block} 

{block c} 
    {capture c} 
     {$smarty.block.parent} 
    {/capture} 
{/block} 

{block b} 
    {$smarty.capture.c} 
    {$smarty.block.parent} 
    {$smarty.capture.a} 
{/block} 
0

ho stumpled uppon questa stessa vecchia domanda. Ho un problema simile, cambio l'ordine di {block} senza accedere al tema principale e senza copiare l'intero {block}.

Ho trovato un po 'di soluzione per questo.

Esempio: file di un genitore theme's: frontend/index/index.tpl con i blocchi

Estendere il file

{extends file="parent:frontend/index/index.tpl"} 

estendere il blocco

{block name="header"} 
    {* define a function with a similar name as the block *} 
    {function name="block__header"} 
     {* define a new block, so you can extend your own block *} 
     {block name="my_header"} 
      {*call parent block to inherit the content *} 
      {$smarty.block.parent} 
     {/block} 
    {/function} 
{/block} 

spostando il blocco

{block name="footer" prepend} 
    {call name="block__header"} 
{/block} 

Nota: se si estende il {block name="header"} in seguito, il contenuto esteso verrà visualizzato sulla posizione originale, in cui il blocco originale era. Per estenderlo utilizzare {block name="my_header"}.

In Shopware è possibile utilizzare protected $injectBeforePlugins = false; nel proprio Theme.php, che è possibile sovrascrivere il contenuto dei plug-in.

È anche possibile utilizzare capture anziché function ma ho pensato che {call name="block__header"} è più leggibile quindi {$ block__header}.

Ho definito la funzione come uno snippet nel mio editor, quindi non devo digitare di nuovo tutte queste cose.

Ancora: scusa per aver risposto a una domanda così vecchia, ma ho pensato che potesse essere utile per gli altri.

Problemi correlati