2017-05-18 6 views
0

Mon but est d'insérer un élément HMTL seulement une fois dans la boucle foreach à l'intérieur de Smarty, mais d'insérer des éléments Children autant de cycles que foreach. Avec PHP le code de travail ressemble à ceci:PHP appendChild analogique dans Smarty

$counter1 = 0; 
foreach ($secCont->getContent() as $row) { 
if ($row->getType() == "head") { 
    $counter1++; 
    if ($counter1 == 1) { 
     $theadNode = $html->createElement("thead"); 
     $tableNode->appendChild($theadNode); 
    } 
    $tr = $html->createElement("tr"); 
    $theadNode->appendChild($tr); 
    foreach ($row->getContent() as $cell) { 
     $thElement = $html->createElement("th"); 
     $thElement->setAttribute("colspan", $cell->getColspan()); 
     $thElement->setAttribute("rowspan", $cell->getRowspan()); 
     $tr->appendChild($thElement); 
     foreach ($cell->getContent() as $parInCell) { 
      self::paragraphWriting($html, $parInCell, $thElement); 
     } 
     } 
    } 
} 

Mais dans le cas de Smarty j'ai coincé avec ceci:

{assign var="counter1" value=0} 
{foreach from=$secCont->getContent() item=row} 
    {if $row->getType() == "head"} 

     {** capture group for adding inside thead*} 
     {capture name="insideTableHead"} 
      <tr> 
       {foreach from=$row->getContent() item=cell} 
        <th colspan="{$cell->getColspan()}" rowspan="{$cell->getRowspan}"> 
         {foreach from=$cell->getContent() item=parCont} 
          {include file="`$path_template`/paragraph.tpl"} 
         {/foreach} 
        </th> 
       {/foreach} 
      </tr> 
     {/capture} 

     {** we need thead only once if exists *} 
     {assign var="counter1" value=$counter1+1} 
     {if $counter1 == 1} 
      <thead> 
      {$smarty.capture.insideTableHead} 
      </thead> 
     {/if} 
{/foreach} 

Le problème est que dans le groupe de capture le code est également exécuté qu'une seule fois. Smarty version est également 2, pas 3.

+0

Je pense que vous mettez fin à votre condition si {if $ ligne-> getType() == "tête"}. Cela pourrait vous aider pour le groupe de capture. –

+0

C'est seulement une erreur mécanique en copiant le code ici. Le problème est que ce groupe de capture n'est exécuté qu'une seule fois. Et je veux l'ajouter sur chaque boucle foreach – Vitaliy

Répondre

0

Hmm. La réponse était si simple, comment je l'ai manqué? Problème résolu en plaçant la première boucle foreach à l'intérieur {capture}:

{capture name="insideTableHead"} 
    {foreach from=$secCont->getContent() item=row} 
     {if $row->getType() == "head"} 
      <tr> 
       {foreach from=$row->getContent() item=cell} 
        <th colspan="{$cell->getColspan()}" rowspan="{$cell->getRowspan}"> 
         {foreach from=$cell->getContent() item=parCont} 
          {include file="`$path_template`/paragraph.tpl"} 
         {/foreach} 
        </th> 
       {/foreach} 
      </tr> 
     {/if} 
    {/foreach} 
{/capture} 

{** we need thead only once if exists *} 

<thead> 
{$smarty.capture.insideTableHead} 
</thead>