【问题标题】:customer custom fields in multiple invoices opencart 2多张发票opencart 2中的客户自定义字段
【发布时间】:2018-04-05 13:39:41
【问题描述】:

我有一个 vqmod,它可以将客户 custom_field 添加到 invoice.tpl,只要我点击一张发票的打印按钮,它就可以正常工作。但如果我选择多个订单并点击打印发票按钮,则仅显示一个订单(最旧的)的自定义字段值。

vqmod 下面:

<file name="admin/controller/sale/order.php">
    <operation>
        <search position="before"><![CDATA[$total_data = array();]]></search>
        <add><![CDATA[
        $data['account_custom_field'] = $order_info['custom_field'];

        // Custom Fields 
        $this->load->model('customer/custom_field');
        $data['account_custom_fields'] = array();

        $filter_data = array(
            'sort'  => 'cf.sort_order',
            'order' => 'ASC',
        );

        $custom_fields = $this->model_customer_custom_field->getCustomFields($filter_data);

        foreach ($custom_fields as $custom_field) {
            if ($custom_field['location'] == 'account' && isset($order_info['custom_field'][$custom_field['custom_field_id']])) {
                if ($custom_field['type'] == 'text') {
                    $data['account_custom_fields'][] = array(
                        'name'  => $custom_field['name'],
                        'value' => $order_info['custom_field'][$custom_field['custom_field_id']]
                    );
                }
            }
        }

        ]]></add>
    </operation>
</file>
<file name="admin/view/template/sale/order_invoice.tpl">
   <operation info="add custom field in invoice">
        <search position="after"><![CDATA[<?php echo $order['payment_address']; ?>]]></search>
        <add><![CDATA[
        <?php if ($account_custom_fields) { ?>
          <br /><br />
          <?php foreach ($account_custom_fields as $custom_field) { ?>
          <b><?php echo $custom_field['name']; ?>:</b> <?php echo $custom_field['value']; ?>
          <?php } ?>
        <?php } ?>
        ]]></add>
    </operation>
</file>

我忘记了什么?

【问题讨论】:

    标签: opencart invoice


    【解决方案1】:

    1) $data['account_custom_fields'] 不应该是 $data 数组的一部分。例如,只需将其转换为名为 $account_custom_fields 的常规变量即可。

    2) 构建数组后,您需要将其添加到 $data['orders'] 数组中,就像其他所有内容一样...

    $data['orders'][] = array(
        'order_id'              => $order_id,
        'invoice_no'            => $invoice_no,
        'account_custom_fields' => $account_custom_fields,
    

    然后像模板中的其他所有内容一样访问它:$order['account_custom_fields']

    您的其他变量$data['account_custom_field'] 也是如此。这里要理解的重要一点是,您正在将代码插入到控制器中间的 foreach 循环中,该循环正在迭代订单并构建一个数组 - 然后在模板内再次迭代。因此,您希望按订单添加的任何内容和访问权限都需要添加到 $data['orders'] 数组中针对该特定订单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      相关资源
      最近更新 更多