我想要做的是在OpenCart中的发票上显示产品属性。 我是PHP初学者,我可以做一些事情。我知道MVC和OpenCart的基础知识。
我需要为订单中的每个产品提取$product['attributes]
并将其加载到Controller文件中,以便我在order_invoice.tpl
查看文件中使用。
我到目前为止所想的是:
'attributes' => $this->model_catalog_product->getProductAttributes($result['product_id']);
将此添加到订单发票的Controller文件中,但我不确定产品在何处以及如何具有多个属性,我需要将其加载到数组中。< / p>
然后在order_invoice.tpl
我需要回应一下这个问题
<?php foreach ($order['product'] as $product) { ?>
<?php foreach ($product['attributes'] as $attribute) { ?>
<?php echo $product['attribute']; ?>
<?php } ?> // END FOREACH ATTRIBUTE
<?php } ?> // END FOREACH PRODUCT
现在我知道这不是美学上的#34;回应PHP的正确方法,它应该都在一组PHP标签之间,但对于像我这样的初学者来说,更容易看到我做什么以及我是否做了语法错误。
有人可以帮助我如何写这个以便完全有效吗?
答案 0 :(得分:0)
你正在思考和思考。
加载属性的行可以放在这里的某个地方(在控制器中,方法invoice()
):
foreach ($products as $product) {
$attributes = $this->model_catalog_product->getProductAttributes($product['product_id']);
这已经加载了与产品链接的所有属性的数组。现在将这些属性分配给以下几行产品:
$product_data[] = array(
'name' => $product['name'],
'model' => $product['model'],
'option' => $option_data,
'quantity' => $product['quantity'],
'price' => $this->currency->format($product['price'] + ($this->config->get('config_tax') ? $product['tax'] : 0), $order_info['currency_code'], $order_info['currency_value']),
'total' => $this->currency->format($product['total'] + ($this->config->get('config_tax') ? ($product['tax'] * $product['quantity']) : 0), $order_info['currency_code'], $order_info['currency_value'])
'attributes' => $attributes
);
这应该是控制器的全部,现在只需使用您在问题中询问的模板代码。在每一行上使用<?php
和?>
并不是 unaesthetic 而是推荐输出PHP的方法。处理模板时,请将代码视为HTML代码,并且HTML必须具有优先级。然后,对HTML代码的所有PHP修改都应该放在它的单独行上,以保持更好的准备状态。异常可能是变量的回应,例如
<div class="some-class"><?php echo $myVariable ?></div>
但
<ul>
<?php foreach ($products as $product) { ?>
<li><?php echo $product['name'] ?></li>
<?php } ?>
</ul>
使用switch
语句时必须完成唯一的例外,因为第一个case
必须位于同一个<?php ... ?>
块内,例如
<div>
<?php switch ($var) {
case true: ?>
<?php echo 'THIS IS GONNA HAPPEN.' ?>
<?php break ?>
<?php } ?>
但我个人建议不惜一切代价避免在模板中使用switch
语句,因为您甚至可以从上面的示例中看到它创建了大量混乱的HTML和PHP标记,可读性更差......使用{{ 1}}语句代替。