2017-05-18 15 views
0

私の目的は、HMTL要素をSmarty内のforeachループに1回だけ挿入することですが、foreachループの持つ数のサイクルでChildren要素を挿入します。 PHPでの作業のコードは次のようになります。PHP appendChild analogue in 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); 
     } 
     } 
    } 
} 

しかし、Smartyの場合には、私はこれで立ち往生している:

{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} 

問題はキャプチャグループ内のコードも1回だけ実行されていることです。 Smartyのバージョンも2ではなく3です。

+0

私はあなたの場合の条件について、{もします$ row->のgetType()== "頭を"}終わりだと思います。それはキャプチャグループのためにあなたを助けるかもしれません。 –

+0

ここにコードをコピーする間、それは機械的な間違いだけです。問題は、このキャプチャグループが1回だけ実行されることです。そして私はforeachループごとにそれを追加したい – Vitaliy

答えて

0

Hmm。答えはとてもシンプルで、私はそれを逃したのですか? {capture}内の最初のforeachループを配置することで解決 問題:

{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>