Opencart:在订单发票中显示产品属性

时间:2014-06-05 12:35:14

标签: php opencart

我想要做的是在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标签之间,但对于像我这样的初学者来说,更容易看到我做什么以及我是否做了语法错误。

有人可以帮助我如何写这个以便完全有效吗?

1 个答案:

答案 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}}语句代替。