在 Opencart 管理 'Order Info' 页面上添加自定义字段
Add a Custom Field on Opencart admin 'Order Info' page
我想在 opencart 管理订单页面上添加自定义字段。
- 比较值,如果
oc_order.order_id
= oc_custom_table.order_id
然后在管理员订单列表中显示 oc_custom_table.comment
。
- 在管理员订单信息页面上显示相同的内容。
我在 admin_model_order.php 页面中添加了一个自定义函数,那里有所有查询。
public function getCustomTable($order_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "custom_table WHERE order_id = '" . (int)$order_id . "'");
return $query->rows;
}
控制器页面非常拥挤,我不知道在哪里添加变量以便它显示特定于订单的信息。
在语言中,我只需要定义语言变量,如 $_text_custom_variable = 'test';正确的?和模板文件,我只是选择一个地方来显示值。
我使用的是Opencart 2.0版本。
[编辑]:好的,所以我能够通过引用其中一个 vqmod 来编写 VQMOD,但仍然无法提取数据。我收到错误 Trying to get property of non-object
我尝试先在订单列表中添加数据。
<!--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>
我自己解决了这个问题。这就是我的理解。我可能错了,但简单的代码有效。
我在 Admin order 部分进行更改,重要的是要弄清楚更改是在哪种方法中完成的。对于 Model 部分,使用适当的方法并添加查询或编辑当前查询。与控制器相同。如果您尝试显示为列表 - order_list(getList()) 或 order_info(getInfo) 部分。这对擅长的人来说可能很简单,但对我来说,这是我的第一次,所以花了很多时间。
下面是 VQMOD 格式的工作代码。
<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>
我想在 opencart 管理订单页面上添加自定义字段。
- 比较值,如果
oc_order.order_id
=oc_custom_table.order_id
然后在管理员订单列表中显示oc_custom_table.comment
。 - 在管理员订单信息页面上显示相同的内容。
我在 admin_model_order.php 页面中添加了一个自定义函数,那里有所有查询。
public function getCustomTable($order_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "custom_table WHERE order_id = '" . (int)$order_id . "'"); return $query->rows; }
控制器页面非常拥挤,我不知道在哪里添加变量以便它显示特定于订单的信息。
在语言中,我只需要定义语言变量,如 $_text_custom_variable = 'test';正确的?和模板文件,我只是选择一个地方来显示值。
我使用的是Opencart 2.0版本。
[编辑]:好的,所以我能够通过引用其中一个 vqmod 来编写 VQMOD,但仍然无法提取数据。我收到错误 Trying to get property of non-object
我尝试先在订单列表中添加数据。
<!--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>
我自己解决了这个问题。这就是我的理解。我可能错了,但简单的代码有效。
我在 Admin order 部分进行更改,重要的是要弄清楚更改是在哪种方法中完成的。对于 Model 部分,使用适当的方法并添加查询或编辑当前查询。与控制器相同。如果您尝试显示为列表 - order_list(getList()) 或 order_info(getInfo) 部分。这对擅长的人来说可能很简单,但对我来说,这是我的第一次,所以花了很多时间。
下面是 VQMOD 格式的工作代码。
<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>