8

I want to add custom field on opencart admin order pages.

  1. compare value like if oc_order.order_id = oc_custom_table.order_id then display oc_custom_table.comment on admin order list.
  2. display same thing on admin order info page.

I added a custom function in admin_model_order.php page where there all all queries.

public function getCustomTable($order_id) {
        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "custom_table WHERE order_id = '" . (int)$order_id . "'");

        return $query->rows;
    }

The controller page is pretty crowded and i have no idea where to add variables so it displays order specific info.

In the language, I just have to define language variables like $_text_custom_variable = 'test'; right? and template files, I just choose a place to display the value.

I am using Opencart 2.0 version.

[EDIT]: Okay so i was able to write a VQMOD by referencing one of the vqmod for it but still cannot pull up data. I get error Trying to get property of non-object

I tried first adding the data in order list.

<!--Template File -->
<file name="admin/view/template/sale/order_list.tpl">
        <operation>
            <search position="before"><![CDATA[
            <td class="text-left"><?php echo $order['date_added']; ?></td>
            ]]></search>
            <add><![CDATA[
            <td class="text-right"><?php echo 'CO'. $order['custom_orders'];?></td>
            ]]></add>
        </operation>
        <operation>
            <search position="before"><![CDATA[
            <td class="text-left"><?php if ($sort == 'o.date_added') { ?>
            ]]></search>
            <add><![CDATA[
            <td class="text-right">custom orders  <i class="fa fa-shopping-cart"></i></td>
            ]]></add>
        </operation>         
    </file>
<!--Model File -->
    <file name="admin/model/sale/order.php">
        <operation>
            <search position="before"><![CDATA[
            public function getTotalEmailsByProductsOrdered($products) {
            ]]></search>
            <add><![CDATA[
            public function getCustomOrderNumber($order_id) {
            $custom_orders ='';
            $query = $this->db->query("SELECT   o.order_id, s.external_order_number, s.custom_order_number
                                        FROM oc_order o 
                                        LEFT JOIN " . DB_PREFIX . "custom_orders s ON (s.external_order_number = o.order_id) 
                                        WHERE o.order_id = '" . (int)$order_id . "'");   
                 foreach ($query->rows as $row) {

                $custom_orders += $this->custom_orders->$row['custom_orders'];
                }
                return $custom_orders;
                } 


            ]]></add>
        </operation>        
    </file> 
<!--Controller File -->
    <file name="admin/controller/sale/order.php">   
        <operation>
            <search position="before"><![CDATA[
                'delete'        => $this->url->link('sale/order/delete', 'token=' . $this->session->data['token'] . '&order_id=' . $result['order_id'] . $url, 'SSL')
            ]]></search>
            <add><![CDATA[
                'custom_orders'     => $this->model_sale_order->getCustomOrderNumber($result['order_id']), 
            ]]></add>
        </operation>        
    </file>
Syed Mudabbir
  • 277
  • 4
  • 15
  • Have a look at `/admin/model/sale/order.php` because maybe you don't need the `public function getCustomTable($order_id)`. If you are not familiar with Opencart module development you should contact a developer and ask for **vQmod** (don't change Opencart's core files). – kanenas Oct 05 '16 at 10:16
  • I was actually gonna create vqmod as i am not comfortable in editing core files. I figured i need that function since i am running a different query. I was not able to find any such vqmods in opencart store so i thought i give it a try. – Syed Mudabbir Oct 05 '16 at 14:16
  • Hi I added complete file. still no data – Syed Mudabbir Oct 05 '16 at 20:46

1 Answers1

2

I was able to figure this out myself. And this is what I understood. I maybe wrong but the simple code worked.

I was doing changes in Admin order section and it is important to figure out which method the change is being done in. For Model section, use apropriate method and add query or edit present query. Same with Controller. If you are trying to display as a list - order_list(getList()) or order_info(getInfo) section. It may be simple to people who are good at it but for me, this was my first, so it took lot of time.

below is the working code in VQMOD format.

<modification>
  <id><![CDATA[custom order list]]></id>
    <version>1</version>
    <vqmver>2.X</vqmver>
    <author>customAuthor</author>
    <file name="admin/language/english/sale/order.php">
         <operation>
            <search position="after"><![CDATA[
            $_['text_order_id']                           = 'Order ID:';
            ]]></search>
            <add><![CDATA[
            $_['text_custom_order_number']                           = 'custom:';
            ]]></add>
        </operation>
        <operation>
            <search position="after"><![CDATA[
            $_['column_order_id']                         = 'Order ID';
            ]]></search>
            <add><![CDATA[
            $_['column_custom_order_number']                         = 'custom <i class="fa fa-shopping-cart"></i>';
            ]]></add>
        </operation>

    </file>
    <file name="admin/view/template/sale/order_list.tpl">

        <operation>
            <search position="after"><![CDATA[
            <a href="<?php echo $sort_order; ?>"><?php echo $column_order_id; ?></a>
            ]]></search>
            <add><![CDATA[
            <!-- custom -->
                    <td class="text-left">
                        <?php echo $column_custom_order_number; ?></a>
                    </td>

            <!-- custom -->
            ]]></add>
        </operation>
        <operation>
            <search position="after"><![CDATA[
            <td class="text-right"><?php echo $order['order_id']; ?></td>
            ]]></search>
            <add><![CDATA[
            <td class="text-left"><?php if(!empty($order['cu_orders'])){echo "CU".$order['cu_orders'];} else{echo "  ";} ?></td>
            ]]></add>
        </operation>

    </file>
    <file name="admin/view/template/sale/order_info.tpl">

        <operation>
            <search position="after" offset="1"><![CDATA[
            <td>#<?php echo $order_id; ?></td>
            ]]></search>
            <add><![CDATA[
            <!-- Shopgate -->
                    <tr>
                        <td><?php echo $text_custom_order_number; ?></td>
                        <td><?php if (!empty($custom_order_number)) { ?>
                          <?php echo 'CU'.$custom_order_number; ?>
                          <?php } else { ?>
                          <?php echo " "; ?> 
                          <?php } ?>
                        </td>

                    </tr>

            <!-- Shopgate -->
            ]]></add>
        </operation>         
    </file>
    <file name="admin/model/sale/order.php">
    <!-- getOrder() Modifications -->
        <operation>
            <search position="replace"><![CDATA[
            (SELECT CONCAT(c.firstname, ' ', c.lastname) FROM " . DB_PREFIX . "customer c WHERE c.customer_id = o.customer_id) AS customer
            ]]></search>
            <add><![CDATA[
            (SELECT CONCAT(c.firstname, ' ', c.lastname) FROM " . DB_PREFIX . "customer c WHERE c.customer_id = o.customer_id) AS customer, (SELECT s.custom_order_number FROM " . DB_PREFIX . "custom_orders s WHERE s.custom_order_number = o.order_id) AS custom_order_number 
            ]]></add>
        </operation>
        <operation>
            <search position="after"><![CDATA[
            'order_id'                => $order_query->row['order_id'],
            ]]></search>
            <add><![CDATA[
            'custom_order_number'                => $order_query->row['custom_order_number'],
            ]]></add>
        </operation>
        <!-- getOrderS() Modifications -->
        <operation>
            <search position="replace"><![CDATA[
            CONCAT(o.firstname, ' ', o.lastname) AS customer,
            ]]></search>
            <add><![CDATA[
            CONCAT(o.firstname, ' ', o.lastname) AS customer, (SELECT s.custom_order_number FROM " . DB_PREFIX . "custom_orders s WHERE s.custom_order_number = o.order_id) AS custom_order_number,
            ]]></add>
        </operation>

    </file> 
    <file name="admin/controller/sale/order.php">   
    <!-- getList() Modifications -->
        <operation>
            <search position="after"><![CDATA[
                'order_id'      => $result['order_id'],
            ]]></search>
            <add><![CDATA[
                'cu_orders'      => $result['custom_order_number'], 
            ]]></add>
        </operation>
    <!-- getForm() Modifications -->
        <operation>
            <search position="after"><![CDATA[
                $data['store_id'] = $order_info['store_id'];
            ]]></search>
            <add><![CDATA[
                $data['custom_order_number'] = $order_info['custom_order_number'];
            ]]></add>
        </operation>
        <!-- getInfo() Modifications -->
        <operation>
            <search position="after"><![CDATA[
                $data['text_order_id'] = $this->language->get('text_order_id');
            ]]></search>
            <add><![CDATA[
                $data['text_custom_order_number'] = $this->language->get('text_custom_order_number');
            ]]></add>
        </operation>
        <operation>
            <search position="after"><![CDATA[
                $data['store_name'] = $order_info['store_name'];
            ]]></search>
            <add><![CDATA[
                $data['custom_order_number'] = $order_info['custom_order_number'];
            ]]></add>
        </operation>

    </file>         
</modification>
Syed Mudabbir
  • 277
  • 4
  • 15