php Smarty 部分循环两个空 <td> 被不必要地创建
php Smarty section loop two empty <td> are getting created unnecessarily
我试图在我的站点中列出来自 PHP 的嵌套 while 循环数据。我正在使用 smarty 模板引擎。我能够传输数据并成功列出它们。一切都按需要进行,但出现了一个奇怪的问题。我以前从来没有得到过这个。在我的 smarty 模板中,在每个第一个 <tr>
块中循环一个结束空白 <td>
并且在第二个 <tr>
块中自动创建一个起始空白 <td>
。
PHP代码
// Fetch Product Specification Groups
$pro_attr = $pdo->prepare("SELECT * FROM product_attributes WHERE pat_product = :id GROUP BY pat_group");
$pro_attr-> bindValue(':id', $_GET['id']);
$pro_attr-> execute();
$data = array();
while($pro_attr_res = $pro_attr->fetch()){
$nameattrGroup = $pdo->prepare("SELECT * FROM attribute_groups WHERE atg_id = :id");
$nameattrGroup-> bindValue(':id', $pro_attr_res['pat_group']);
$nameattrGroup-> execute();
$nameattrGroup_res = $nameattrGroup->fetch();
$atrGrpName = $nameattrGroup_res['atg_name'];
$selectAttr = $pdo->prepare("SELECT * FROM attributes WHERE atr_group = :group");
$selectAttr-> bindValue(':group', $pro_attr_res['pat_group']);
$selectAttr-> execute();
while($selectAttr_res = $selectAttr->fetch()){
$patValue = $pdo->prepare("SELECT * FROM product_attributes WHERE pat_id = :id");
$patValue-> bindValue(':id', $selectAttr_res['atr_id']);
$patValue-> execute();
$patValue_res = $patValue->fetch();
$v1 = $selectAttr_res['atr_name'];
$v2 = $patValue_res['pat_value'];
$data[$atrGrpName][] = $selectAttr_res;
$data[$atrGrpName][] = $patValue_res;
// echo "<pre>";
// print_r($data);
}
}
$smarty->assign('attrs', $data);
聪明代码
{foreach from=$attrs key=atrGroup item=atrs}
<h3>{$atrGroup}</h3>
<table class="table table-striped table-hover">
{section loop=$atrs name=d}
<tr>
<td class="col-md-4">{$atrs[d].atr_name|default}</td>
<td>{$atrs[d].pat_value|default}</td>
</tr>
{/section}
</table>
{/foreach}
{section loop=$atrs name=d}
内的预期输出
Attribute 1 Value 1
Attribute 2 Value 2
Attribute 3 Value 3
Attribute 4 Value 4
当前输出
Attribute 1
Value 1
Attribute 2
Value 2
这些空白 <td>
块显示错误 Notice: Undefined index: pat_value in E:\xampp\htdocs\flexicart\tmp3f4c940c0e368df27c7e92a672b94ff4534717_0.file.product.tpl.cache.php on line 163
和 Notice: Undefined index: atr_name in E:\xampp\htdocs\flexicart\tmp3f4c940c0e368df27c7e92a672b94ff4534717_0.file.product.tpl.cache.php on line 161
。但是因为我使用了 |default
错误被隐藏了,但仍然存在创建那些额外的 <td>
块。请帮助。
问题出在这里:
$data[$atrGrpName][] = $selectAttr_res;
$data[$atrGrpName][] = $patValue_res;
这会将您的 atr_name 和 pat_value 放在数组的连续行中,这就是您要屏蔽的错误的原因。
我不太确定您在其他地方可能需要来自 $selectAttr_res
和 $patValue_res
的哪些其他数据,但仅解决手头的问题,您可以执行以下操作...
$data[$atrGrpName][] = array('atr_name' => $selectAttr_res['atr_name'], 'pat_value' => $patValue_res['pat_value']);
我试图在我的站点中列出来自 PHP 的嵌套 while 循环数据。我正在使用 smarty 模板引擎。我能够传输数据并成功列出它们。一切都按需要进行,但出现了一个奇怪的问题。我以前从来没有得到过这个。在我的 smarty 模板中,在每个第一个 <tr>
块中循环一个结束空白 <td>
并且在第二个 <tr>
块中自动创建一个起始空白 <td>
。
PHP代码
// Fetch Product Specification Groups
$pro_attr = $pdo->prepare("SELECT * FROM product_attributes WHERE pat_product = :id GROUP BY pat_group");
$pro_attr-> bindValue(':id', $_GET['id']);
$pro_attr-> execute();
$data = array();
while($pro_attr_res = $pro_attr->fetch()){
$nameattrGroup = $pdo->prepare("SELECT * FROM attribute_groups WHERE atg_id = :id");
$nameattrGroup-> bindValue(':id', $pro_attr_res['pat_group']);
$nameattrGroup-> execute();
$nameattrGroup_res = $nameattrGroup->fetch();
$atrGrpName = $nameattrGroup_res['atg_name'];
$selectAttr = $pdo->prepare("SELECT * FROM attributes WHERE atr_group = :group");
$selectAttr-> bindValue(':group', $pro_attr_res['pat_group']);
$selectAttr-> execute();
while($selectAttr_res = $selectAttr->fetch()){
$patValue = $pdo->prepare("SELECT * FROM product_attributes WHERE pat_id = :id");
$patValue-> bindValue(':id', $selectAttr_res['atr_id']);
$patValue-> execute();
$patValue_res = $patValue->fetch();
$v1 = $selectAttr_res['atr_name'];
$v2 = $patValue_res['pat_value'];
$data[$atrGrpName][] = $selectAttr_res;
$data[$atrGrpName][] = $patValue_res;
// echo "<pre>";
// print_r($data);
}
}
$smarty->assign('attrs', $data);
聪明代码
{foreach from=$attrs key=atrGroup item=atrs}
<h3>{$atrGroup}</h3>
<table class="table table-striped table-hover">
{section loop=$atrs name=d}
<tr>
<td class="col-md-4">{$atrs[d].atr_name|default}</td>
<td>{$atrs[d].pat_value|default}</td>
</tr>
{/section}
</table>
{/foreach}
{section loop=$atrs name=d}
Attribute 1 Value 1
Attribute 2 Value 2
Attribute 3 Value 3
Attribute 4 Value 4
当前输出
Attribute 1
Value 1
Attribute 2
Value 2
这些空白 <td>
块显示错误 Notice: Undefined index: pat_value in E:\xampp\htdocs\flexicart\tmp3f4c940c0e368df27c7e92a672b94ff4534717_0.file.product.tpl.cache.php on line 163
和 Notice: Undefined index: atr_name in E:\xampp\htdocs\flexicart\tmp3f4c940c0e368df27c7e92a672b94ff4534717_0.file.product.tpl.cache.php on line 161
。但是因为我使用了 |default
错误被隐藏了,但仍然存在创建那些额外的 <td>
块。请帮助。
问题出在这里:
$data[$atrGrpName][] = $selectAttr_res;
$data[$atrGrpName][] = $patValue_res;
这会将您的 atr_name 和 pat_value 放在数组的连续行中,这就是您要屏蔽的错误的原因。
我不太确定您在其他地方可能需要来自 $selectAttr_res
和 $patValue_res
的哪些其他数据,但仅解决手头的问题,您可以执行以下操作...
$data[$atrGrpName][] = array('atr_name' => $selectAttr_res['atr_name'], 'pat_value' => $patValue_res['pat_value']);