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です。
私はあなたの場合の条件について、{もします$ row->のgetType()== "頭を"}終わりだと思います。それはキャプチャグループのためにあなたを助けるかもしれません。 –
ここにコードをコピーする間、それは機械的な間違いだけです。問題は、このキャプチャグループが1回だけ実行されることです。そして私はforeachループごとにそれを追加したい – Vitaliy