【问题标题】:Opencart: Display Product Attributes in Order InvoiceOpencart:在订单发票中显示产品属性
【发布时间】:2014-06-05 12:35:13
【问题描述】:

我想做的是在 OpenCart 的发票上显示产品属性。 我是 PHP 初学者,我能做的事情很少。我了解 MVC 和 OpenCart 的基础知识。

我需要按顺序提取每个产品的$product['attributes] 并将其加载到控制器文件中,以便我在order_invoice.tpl 视图文件中使用。

目前我想到的是:

 'attributes' => $this->model_catalog_product->getProductAttributes($result['product_id']);

将此添加到订单发票的控制器文件中,但我不确定在何处以及如何使用,此外,如果产品具有多个属性,我需要将其加载到数组中。

然后在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

现在我知道这不是“从美学上”呼应 PHP 的正确方法,它应该都在一组 PHP 标记之间,但是对于像我这样的初学者来说更容易看到我在做什么以及我是否这样做语法错误。

有人可以帮助我如何编写它以使其充分发挥作用吗?

【问题讨论】:

    标签: php opencart


    【解决方案1】:

    你做的和想的都很好。

    加载属性的行可以放在这里(在控制器中,方法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
                    );
    

    这应该是控制器的全部内容,现在只需使用您在您的问题中询问的模板代码。在每一行上使用&lt;?php?&gt; 并不是不美观,而是推荐的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 必须在同一个&lt;?php ... ?&gt; 块内,例如

    <div>
    <?php switch ($var) {
        case true: ?>
        <?php echo 'THIS IS GONNA HAPPEN.' ?>
        <?php break ?>
    <?php } ?>
    

    但我个人建议不惜一切代价避免在模板中使用switch 语句,因为您甚至可以从上面的示例中看到,它会创建相当多的HTML 和PHP 标记,可读性较差...使用if-elseif-else 语句而是。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 2015-12-30
      相关资源
      最近更新 更多