我已经构建了OpenCart模块,并在一些商店对其进行了测试,并且效果很好。一位客户刚刚向我报告了一个问题,在检查了html之后,我看到了:
.tpl模板文件中的代码:
<table class="table table-bordered table-hover" >
<tbody>
<?php foreach($row['strings'] as $row_string){
$key = $row_string['key'];
$id = $row['simpleFilePathEscaped'].$key; ?>
<tr>
<td class="text-center">
<label><?php echo $key; ?> </label>
</td>
<td class="text-center">
<div>
<input id="text_value_<?php echo $id; ?>" type="text" value="<?php echo $row_string['value']; ?>" placeholder="<?php echo $key; ?>" class="form-control" />
</div>
</td>
<td class="text-center" >
<button id="save_icon_<?php echo $id; ?>" onclick="addLiteralToFile('<?php echo $row['secondary_file_path_escaped'] ?>', '<?php echo $key; ?>', '<?php echo $id;?>');" class="btn btn-primary"><i id="save_inner_icon_<?php echo $id; ?>" class="fa fa-save"></i></button>
<div id="loading_icon_<?php echo $id; ?>" <div class="loader"></div> </div>
</td>
</tr>
<?php } ?>
</tbody>
</table>
此客户商店中的示例行的结果是:
<tr>
<td class="text-center" >
<label>direction</label>
</td>
<td class="text-center">
<div>
<input id="text_value_" type="text" value="ltr" placeholder="direction" class="form-control">
</div>
</td>
<td class="text-center">
<button id="save_icon_" onclick="addLiteralToFile('----home----admin----domains----itrend.si----public_html----test----admin----language----english----en-gb.php', 'direction', '');" class="btn btn-primary"><i id="save_inner_icon_" class="fa fa-save"></i></button>
<div id="loading_icon_" <div="" class="loader"></div>
</td>
</tr>
如果您注意到,您将看到<?php echo $id; ?>
的所有实例都给出一个空字符串。因此id="save_icon_<?php echo $id; ?>"
变成id="save_icon_"
这非常奇怪,因为$id
是$row['simpleFilePathEscaped']
和$key
的结合。即使$row['simpleFilePathEscaped']
为空,我也可以肯定地知道$key
具有一个值...因为它已被回显,并且在此示例中,它是“方向”(在标签标签中)
需要一些帮助来找出发生这种情况的原因...
$row = { "strings" => array of { "key"=> string, "value"=> string },
"simpleFilePathEscaped" => string,
"secondary_file_path_escaped" => string,
"primary_file_path"=> string
}
答案 0 :(得分:0)
对不起,如果我误解了$ row的构建方式。
如果您举这样的例子
$row['strings'] = ['key' => 10];
$row['strings'] = ['key' => 110];
foreach($row['strings'] as $row_string)
$key = $row_string['key'];
print_r($key); //will give you an empty value
但是print_r($row);
//将给出Array([strings] => Array(['key'] => 110))`
您需要更改foreach。
foreach($row['strings'] as $row_key => $row_string)
$key = $row_key;
然后它将在回显中给出“键”。
或者您可以
foreach($row['strings'] as $row_string)
$key = key($row_string);
答案 1 :(得分:0)
您的代码中有一个错误:
鉴于您的数组如下所示(如您的问题所述):
$row = [ "strings" => array of { "key"=> string, "value"=> string },
"simpleFilePathEscaped" => string,
"secondary_file_path_escaped" => string,
"primary_file_path"=> string
]
此代码是不可能的:
<?php foreach($row['strings'] as $row_string){
$key = $row_string['key']; // <--- THIS is not possible with the array structure you presented
$id = $row['simpleFilePathEscaped'].$key; ?>
<tr>
<td class="text-center">
<label><?php echo $key; ?> </label>
</td>
按照问题中的建议打印:
<tr>
<td class="text-center" >
<label>direction</label>
</td>
由于在foreach循环中,$row_string
变量将保存一个字符串值,但是您正尝试使用关联键将其作为数组访问。