Ruslan Brest, rb.labtodo.com
Backend web-developer: CodeIgniter, PHP, MySQL, OpenCart, PrestaShop, MaxSite CMS

Opencart 1.5.1.3 и ниже (admin): колонка SKU (поиск, фильтр, автодополнение, сортировка)

10 октября 2011 г. Ruslan Brest Просмотров: 17779 RSS 21
Howto » OpenCart
, , ,
Opencart 1.5.1.3 (admin): products SKU column
Opencart 1.5.1.3 (admin): products SKU column

Для OpenCart 1.5.1.3 в админ-части в список товаров добавлена колонка SKU (по-русски -- артикул или складской номер). В отличие от логики авторов поиск возможен по любому вхождению искомых символов - они могут встречаться в любом месте строчки SKU, а не только с её начала. Не знаю, почему у них везде так, мне гораздо удобнее без этого ограничения.

На свежую установку Opencart 1.5.1.3 можно залить поверх изменённые файлы (которые вы найдёте в папке admin внутри архива): oc1513-admin-sku-column.zip 12. Но если вы уже вносили свои изменения в эти файлы, надо вручную внести изменения (см. diff), чтобы не затереть предыдущие исправления.

commit 144af0b3466be74fb55f913686f96290b2c231a5
Author: Ruslan Brest <rb@labtodo.com>
Date:   Mon Oct 10 13:49:45 2011 +0300
    [+] admin: products SKU column (search, filter, autocomplete, sort)
diff --git a/upload/admin/controller/catalog/product.php b/upload/admin/controller/catalog/product.php
index 655b09d..72382b6 100644
--- a/upload/admin/controller/catalog/product.php
+++ b/upload/admin/controller/catalog/product.php
@@ -234,10 +234,16 @@ class ControllerCatalogProduct extends Controller {
 		if (isset($this->request->get['filter_model'])) {
 			$filter_model = $this->request->get['filter_model'];
 		} else {
 			$filter_model = null;
 		}
+
+		if (isset($this->request->get['filter_sku'])) {
+			$filter_sku = $this->request->get['filter_sku'];
+		} else {
+			$filter_sku = null;
+		}
 		
 		if (isset($this->request->get['filter_price'])) {
 			$filter_price = $this->request->get['filter_price'];
 		} else {
 			$filter_price = null;
@@ -280,10 +286,13 @@ class ControllerCatalogProduct extends Controller {
 		}
 		
 		if (isset($this->request->get['filter_model'])) {
 			$url .= '&filter_model=' . $this->request->get['filter_model'];
 		}
+		if (isset($this->request->get['filter_sku'])) {
+			$url .= '&filter_sku=' . $this->request->get['filter_sku'];
+		}
 		
 		if (isset($this->request->get['filter_price'])) {
 			$url .= '&filter_price=' . $this->request->get['filter_price'];
 		}
 		
@@ -328,10 +337,11 @@ class ControllerCatalogProduct extends Controller {
 		$this->data['products'] = array();
 
 		$data = array(
 			'filter_name'	  => $filter_name, 
 			'filter_model'	  => $filter_model,
+			'filter_sku'	  => $filter_sku,
 			'filter_price'	  => $filter_price,
 			'filter_quantity' => $filter_quantity,
 			'filter_status'   => $filter_status,
 			'sort'            => $sort,
 			'order'           => $order,
@@ -373,10 +383,11 @@ class ControllerCatalogProduct extends Controller {
 	
       		$this->data['products'][] = array(
 				'product_id' => $result['product_id'],
 				'name'       => $result['name'],
 				'model'      => $result['model'],
+				'sku'        => $result['sku'],
 				'price'      => $result['price'],
 				'special'    => $special,
 				'image'      => $image,
 				'quantity'   => $result['quantity'],
 				'status'     => ($result['status'] ? $this->language->get('text_enabled') : $this->language->get('text_disabled')),
@@ -391,12 +402,13 @@ class ControllerCatalogProduct extends Controller {
 		$this->data['text_disabled'] = $this->language->get('text_disabled');		
 		$this->data['text_no_results'] = $this->language->get('text_no_results');		
 		$this->data['text_image_manager'] = $this->language->get('text_image_manager');		
 			
 		$this->data['column_image'] = $this->language->get('column_image');		
-		$this->data['column_name'] = $this->language->get('column_name');		
+		$this->data['column_name']  = $this->language->get('column_name');		
 		$this->data['column_model'] = $this->language->get('column_model');		
+		$this->data['column_sku']   = $this->language->get('entry_sku');		
 		$this->data['column_price'] = $this->language->get('column_price');		
 		$this->data['column_quantity'] = $this->language->get('column_quantity');		
 		$this->data['column_status'] = $this->language->get('column_status');		
 		$this->data['column_action'] = $this->language->get('column_action');		
 				
@@ -428,10 +440,13 @@ class ControllerCatalogProduct extends Controller {
 		}
 		
 		if (isset($this->request->get['filter_model'])) {
 			$url .= '&filter_model=' . $this->request->get['filter_model'];
 		}
+		if (isset($this->request->get['filter_sku'])) {
+			$url .= '&filter_sku=' . $this->request->get['filter_sku'];
+		}
 		
 		if (isset($this->request->get['filter_price'])) {
 			$url .= '&filter_price=' . $this->request->get['filter_price'];
 		}
 		
@@ -453,10 +468,11 @@ class ControllerCatalogProduct extends Controller {
 			$url .= '&page=' . $this->request->get['page'];
 		}
 					
 		$this->data['sort_name'] = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . '&sort=pd.name' . $url, 'SSL');
 		$this->data['sort_model'] = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . '&sort=p.model' . $url, 'SSL');
+		$this->data['sort_sku']   = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . '&sort=p.sku' . $url, 'SSL');
 		$this->data['sort_price'] = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . '&sort=p.price' . $url, 'SSL');
 		$this->data['sort_quantity'] = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . '&sort=p.quantity' . $url, 'SSL');
 		$this->data['sort_status'] = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . '&sort=p.status' . $url, 'SSL');
 		$this->data['sort_order'] = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . '&sort=p.sort_order' . $url, 'SSL');
 		
@@ -467,10 +483,13 @@ class ControllerCatalogProduct extends Controller {
 		}
 		
 		if (isset($this->request->get['filter_model'])) {
 			$url .= '&filter_model=' . $this->request->get['filter_model'];
 		}
+		if (isset($this->request->get['filter_sku'])) {
+			$url .= '&filter_sku=' . $this->request->get['filter_sku'];
+		}
 		
 		if (isset($this->request->get['filter_price'])) {
 			$url .= '&filter_price=' . $this->request->get['filter_price'];
 		}
 		
@@ -499,10 +518,11 @@ class ControllerCatalogProduct extends Controller {
 			
 		$this->data['pagination'] = $pagination->render();
 	
 		$this->data['filter_name'] = $filter_name;
 		$this->data['filter_model'] = $filter_model;
+		$this->data['filter_sku']   = $filter_sku;
 		$this->data['filter_price'] = $filter_price;
 		$this->data['filter_quantity'] = $filter_quantity;
 		$this->data['filter_status'] = $filter_status;
 		
 		$this->data['sort'] = $sort;
@@ -649,10 +669,13 @@ class ControllerCatalogProduct extends Controller {
 		}
 		
 		if (isset($this->request->get['filter_model'])) {
 			$url .= '&filter_model=' . $this->request->get['filter_model'];
 		}
+		if (isset($this->request->get['filter_sku'])) {
+			$url .= '&filter_sku=' . $this->request->get['filter_sku'];
+		}
 		
 		if (isset($this->request->get['filter_price'])) {
 			$url .= '&filter_price=' . $this->request->get['filter_price'];
 		}
 		
@@ -1204,11 +1227,11 @@ class ControllerCatalogProduct extends Controller {
 	}
 		
 	public function autocomplete() {
 		$json = array();
 		
-		if (isset($this->request->get['filter_name']) || isset($this->request->get['filter_model']) || isset($this->request->get['filter_category_id'])) {
+		if (isset($this->request->get['filter_name']) || isset($this->request->get['filter_model']) || isset($this->request->get['filter_sku']) || isset($this->request->get['filter_category_id'])) {
 			$this->load->model('catalog/product');
 			
 			if (isset($this->request->get['filter_name'])) {
 				$filter_name = $this->request->get['filter_name'];
 			} else {
@@ -1218,11 +1241,17 @@ class ControllerCatalogProduct extends Controller {
 			if (isset($this->request->get['filter_model'])) {
 				$filter_model = $this->request->get['filter_model'];
 			} else {
 				$filter_model = '';
 			}
-						
+
+			if (isset($this->request->get['filter_sku'])) {
+				$filter_sku = $this->request->get['filter_sku'];
+			} else {
+				$filter_sku = '';
+			}
+
 			if (isset($this->request->get['filter_category_id'])) {
 				$filter_category_id = $this->request->get['filter_category_id'];
 			} else {
 				$filter_category_id = '';
 			}
@@ -1240,10 +1269,11 @@ class ControllerCatalogProduct extends Controller {
 			}			
 						
 			$data = array(
 				'filter_name'         => $filter_name,
 				'filter_model'        => $filter_model,
+				'filter_sku'          => $filter_sku,
 				'filter_category_id'  => $filter_category_id,
 				'filter_sub_category' => $filter_sub_category,
 				'start'               => 0,
 				'limit'               => $limit
 			);
@@ -1291,10 +1321,11 @@ class ControllerCatalogProduct extends Controller {
 				
 				$json[] = array(
 					'product_id' => $result['product_id'],
 					'name'       => html_entity_decode($result['name'], ENT_QUOTES, 'UTF-8'),	
 					'model'      => $result['model'],
+					'sku'        => $result['sku'],
 					'option'     => $option_data,
 					'price'      => $result['price']
 				);	
 			}
 		}
diff --git a/upload/admin/model/catalog/product.php b/upload/admin/model/catalog/product.php
index b75d072..fab30d9 100644
--- a/upload/admin/model/catalog/product.php
+++ b/upload/admin/model/catalog/product.php
@@ -350,10 +350,13 @@ class ModelCatalogProduct extends Model {
 			}
 
 			if (!empty($data['filter_model'])) {
 				$sql .= " AND LCASE(p.model) LIKE '" . $this->db->escape(utf8_strtolower($data['filter_model'])) . "%'";
 			}
+			if (!empty($data['filter_sku'])) {
+				$sql .= " AND LCASE(p.sku) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_sku'])) . "%'";
+			}
 			
 			if (!empty($data['filter_price'])) {
 				$sql .= " AND p.price LIKE '" . $this->db->escape($data['filter_price']) . "%'";
 			}
 			
@@ -388,10 +391,11 @@ class ModelCatalogProduct extends Model {
 			$sql .= " GROUP BY p.product_id";
 						
 			$sort_data = array(
 				'pd.name',
 				'p.model',
+				'p.sku',
 				'p.price',
 				'p.quantity',
 				'p.status',
 				'p.sort_order'
 			);	
@@ -659,10 +663,14 @@ class ModelCatalogProduct extends Model {
 
 		if (!empty($data['filter_model'])) {
 			$sql .= " AND LCASE(p.model) LIKE '" . $this->db->escape(utf8_strtolower($data['filter_model'])) . "%'";
 		}
 		
+		if (!empty($data['filter_sku'])) {
+			$sql .= " AND LCASE(p.sku) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_sku'])) . "%'";
+		}
+		
 		if (!empty($data['filter_price'])) {
 			$sql .= " AND p.price LIKE '" . $this->db->escape($data['filter_price']) . "%'";
 		}
 		
 		if (isset($data['filter_quantity']) && !is_null($data['filter_quantity'])) {
diff --git a/upload/admin/view/template/catalog/product_list.tpl b/upload/admin/view/template/catalog/product_list.tpl
index 25b90b3..c183b7d 100644
--- a/upload/admin/view/template/catalog/product_list.tpl
+++ b/upload/admin/view/template/catalog/product_list.tpl
@@ -31,10 +31,15 @@
               <td class="left"><?php if ($sort == 'p.model') { ?>
                 <a href="<?php echo $sort_model; ?>" class="<?php echo strtolower($order); ?>"><?php echo $column_model; ?></a>
                 <?php } else { ?>
                 <a href="<?php echo $sort_model; ?>"><?php echo $column_model; ?></a>
                 <?php } ?></td>
+              <td class="left"><?php if ($sort == 'p.sku') { ?>
+                <a href="<?php echo $sort_sku; ?>" class="<?php echo strtolower($order); ?>"><?php echo $column_sku; ?></a>
+                <?php } else { ?>
+                <a href="<?php echo $sort_sku; ?>"><?php echo $column_sku; ?></a>
+                <?php } ?></td>
               <td class="left"><?php if ($sort == 'p.price') { ?>
                 <a href="<?php echo $sort_price; ?>" class="<?php echo strtolower($order); ?>"><?php echo $column_price; ?></a>
                 <?php } else { ?>
                 <a href="<?php echo $sort_price; ?>"><?php echo $column_price; ?></a>
                 <?php } ?></td>
@@ -55,10 +60,11 @@
             <tr class="filter">
               <td></td>
               <td></td>
               <td><input type="text" name="filter_name" value="<?php echo $filter_name; ?>" /></td>
               <td><input type="text" name="filter_model" value="<?php echo $filter_model; ?>" /></td>
+              <td><input type="text" name="filter_sku" value="<?php echo $filter_sku; ?>" /></td>
               <td align="left"><input type="text" name="filter_price" value="<?php echo $filter_price; ?>" size="8"/></td>
               <td align="right"><input type="text" name="filter_quantity" value="<?php echo $filter_quantity; ?>" style="text-align: right;" /></td>
               <td><select name="filter_status">
                   <option value="*"></option>
                   <?php if ($filter_status) { ?>
@@ -83,10 +89,11 @@
                 <input type="checkbox" name="selected[]" value="<?php echo $product['product_id']; ?>" />
                 <?php } ?></td>
               <td class="center"><img src="<?php echo $product['image']; ?>" alt="<?php echo $product['name']; ?>" style="padding: 1px; border: 1px solid #DDDDDD;" /></td>
               <td class="left"><?php echo $product['name']; ?></td>
               <td class="left"><?php echo $product['model']; ?></td>
+              <td class="left"><?php echo $product['sku']; ?></td>
               <td class="left"><?php if ($product['special']) { ?>
                 <span style="text-decoration: line-through;"><?php echo $product['price']; ?></span>
                 <span style="color: #b00;"><?php echo $product['special']; ?></span>
                 <?php } else { ?>
                 <?php echo $product['price']; ?>
@@ -130,10 +137,16 @@ function filter() {
 	
 	if (filter_model) {
 		url += '&filter_model=' + encodeURIComponent(filter_model);
 	}
 	
+	var filter_sku = $('input[name=\'filter_sku\']').attr('value');
+	
+	if (filter_sku) {
+		url += '&filter_sku=' + encodeURIComponent(filter_sku);
+	}
+	
 	var filter_price = $('input[name=\'filter_price\']').attr('value');
 	
 	if (filter_price) {
 		url += '&filter_price=' + encodeURIComponent(filter_price);
 	}
@@ -204,7 +217,30 @@ $('input[name=\'filter_model\']').autocomplete({
 		$('input[name=\'filter_model\']').val(ui.item.label);
 						
 		return false;
 	}
 });
+
+$('input[name=\'filter_sku\']').autocomplete({
+	delay: 0,
+	source: function(request, response) {
+		$.ajax({
+			url: 'index.php?route=catalog/product/autocomplete&token=<?php echo $token; ?>&filter_sku=' +  encodeURIComponent(request.term),
+			dataType: 'json',
+			success: function(json) {		
+				response($.map(json, function(item) {
+					return {
+						label: item.sku,
+						value: item.product_id
+					}
+				}));
+			}
+		});
+	}, 
+	select: function(event, ui) {
+		$('input[name=\'filter_sku\']').val(ui.item.label);
+						
+		return false;
+	}
+});
 //--></script> 
 <?php echo $footer; ?>
\ No newline at end of file

И ещё найдите в .tpl файле строку

<td class="center" colspan="8"><?php echo $text_no_results; ?></td>

и увеличьте цифру на единичку (вместо 8 напишите 9). Забыл это, в diff-е этого нет. В архиве обновил.

Изменения для версий 1.5.1.2-1.5.0.5 (и наверное ниже в ветке 1.5.x)

В этих файлах у меня были и другие правки, поэтому готовые файлы не выкладываю.

commit e55686bfea6bf91b65c235d68c24ac7840139a89
Author: Ruslan Brest <rb@labtodo.com>
Date:   Mon Oct 10 21:47:01 2011 +0300
    [+] v1.5.1.2: admin: SKU column in product list
diff --git a/public_html/admin/controller/catalog/product.php b/public_html/admin/controller/catalog/product.php
index e407995..283e41b 100644
--- a/public_html/admin/controller/catalog/product.php
+++ b/public_html/admin/controller/catalog/product.php
@@ -253,10 +253,16 @@ class ControllerCatalogProduct extends Controller {
 			$filter_model = $this->request->get['filter_model'];
 		} else {
 			$filter_model = null;
 		}
 
+		if (isset($this->request->get['filter_sku'])) {
+			$filter_sku = $this->request->get['filter_sku'];
+		} else {
+			$filter_sku = null;
+		}
+
 		if (isset($this->request->get['filter_price'])) {
 			$filter_price = $this->request->get['filter_price'];
 		} else {
 			$filter_price = null;
 		}
@@ -307,10 +313,14 @@ class ControllerCatalogProduct extends Controller {
 
 		if (isset($this->request->get['filter_model'])) {
 			$url .= '&filter_model=' . $this->request->get['filter_model'];
 		}
 
+		if (isset($this->request->get['filter_sku'])) {
+			$url .= '&filter_sku=' . $this->request->get['filter_sku'];
+		}
+
 		if (isset($this->request->get['filter_price'])) {
 			$url .= '&filter_price=' . $this->request->get['filter_price'];
 		}
 
 		//filter category start//
@@ -360,10 +370,11 @@ class ControllerCatalogProduct extends Controller {
 		$this->data['products'] = array();
 
 		$data = array(
 			'filter_name'	  => $filter_name,
 			'filter_model'	  => $filter_model,
+			'filter_sku'	  => $filter_sku,
 			'filter_price'	  => $filter_price,
 			//filter category start//
 			'filter_category' => $filter_category,
 			// End
 			'filter_quantity' => $filter_quantity,
@@ -417,10 +428,11 @@ class ControllerCatalogProduct extends Controller {
 
       		$this->data['products'][] = array(
 				'product_id' => $result['product_id'],
 				'name'       => $result['name'],
 				'model'      => $result['model'],
+				'sku'        => $result['sku'],
 				'price'      => $this->currency->format($result['price']),
 				//filter category start//
 				'category'   => $category,
 		                //filter category end//
 				'special'    => $special['price'],
@@ -445,10 +457,11 @@ class ControllerCatalogProduct extends Controller {
 		$this->data['column_name'] = $this->language->get('column_name');
 		// Add
 		$this->data['column_category'] = $this->language->get('column_category');
 		// End add
 		$this->data['column_model'] = $this->language->get('column_model');
+		$this->data['column_sku']   = $this->language->get('entry_sku');
 		$this->data['column_price'] = $this->language->get('column_price');
 		$this->data['column_quantity'] = $this->language->get('column_quantity');
 		$this->data['column_status'] = $this->language->get('column_status');
 		$this->data['column_action'] = $this->language->get('column_action');
 
@@ -481,10 +494,14 @@ class ControllerCatalogProduct extends Controller {
 
 		if (isset($this->request->get['filter_model'])) {
 			$url .= '&filter_model=' . $this->request->get['filter_model'];
 		}
 
+		if (isset($this->request->get['filter_sku'])) {
+			$url .= '&filter_sku=' . $this->request->get['filter_sku'];
+		}
+
 		if (isset($this->request->get['filter_price'])) {
 			$url .= '&filter_price=' . $this->request->get['filter_price'];
 		}
 
 		if (isset($this->request->get['filter_quantity'])) {
@@ -505,10 +522,11 @@ class ControllerCatalogProduct extends Controller {
 			$url .= '&page=' . $this->request->get['page'];
 		}
 
 		$this->data['sort_name'] = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . '&sort=pd.name' . $url, 'SSL');
 		$this->data['sort_model'] = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . '&sort=p.model' . $url, 'SSL');
+		$this->data['sort_sku']   = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . '&sort=p.sku' . $url, 'SSL');
 		//filter category start//
         $this->data['sort_category'] = HTTPS_SERVER . 'index.php?route=catalog/product&token=' . $this->session->data['token'] . '&sort=p2c.category' . $url;
         //filter category end//
 		$this->data['sort_price'] = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . '&sort=p.price' . $url, 'SSL');
 		$this->data['sort_quantity'] = $this->url->link('catalog/product', 'token=' . $this->session->data['token'] . '&sort=p.quantity' . $url, 'SSL');
@@ -523,10 +541,14 @@ class ControllerCatalogProduct extends Controller {
 
 		if (isset($this->request->get['filter_model'])) {
 			$url .= '&filter_model=' . $this->request->get['filter_model'];
 		}
 
+		if (isset($this->request->get['filter_sku'])) {
+			$url .= '&filter_sku=' . $this->request->get['filter_sku'];
+		}
+
 		if (isset($this->request->get['filter_price'])) {
 			$url .= '&filter_price=' . $this->request->get['filter_price'];
 		}
 
 		// Add
@@ -560,10 +582,11 @@ class ControllerCatalogProduct extends Controller {
 
 		$this->data['pagination'] = $pagination->render();
 
 		$this->data['filter_name'] = $filter_name;
 		$this->data['filter_model'] = $filter_model;
+		$this->data['filter_sku']   = $filter_sku;
 		$this->data['filter_price'] = $filter_price;
 		// Add
         $this->data['filter_category'] = $filter_category;
         // End add
 		$this->data['filter_quantity'] = $filter_quantity;
diff --git a/public_html/admin/model/catalog/product.php b/public_html/admin/model/catalog/product.php
index d0c3772..2fcb162 100644
--- a/public_html/admin/model/catalog/product.php
+++ b/public_html/admin/model/catalog/product.php
@@ -361,10 +361,14 @@ class ModelCatalogProduct extends Model {
 
 			if (isset($data['filter_model']) && !is_null($data['filter_model'])) {
 				$sql .= " AND LCASE(p.model) LIKE '%" . $this->db->escape(mb_strtolower($data['filter_model'], 'UTF-8')) . "%'";
 			}
 
+			if (isset($data['filter_sku']) && !is_null($data['filter_sku'])) {
+				$sql .= " AND LCASE(p.sku) LIKE '%" . $this->db->escape(mb_strtolower($data['filter_sku'], 'UTF-8')) . "%'";
+			}
+
 			if (isset($data['filter_price']) && !is_null($data['filter_price'])) {
 				$sql .= " AND p.price LIKE '" . $this->db->escape($data['filter_price']) . "%'";
 			}
 
 			// Add Category Filter
@@ -385,10 +389,11 @@ class ModelCatalogProduct extends Model {
 			}
 
 			$sort_data = array(
 				'pd.name',
 				'p.model',
+				'p.sku',
 				'p.price',
 				// add
                 'p2c.category_id',
 				// end
 				'p.quantity',
@@ -671,10 +676,14 @@ class ModelCatalogProduct extends Model {
 
 		if (isset($data['filter_model']) && !is_null($data['filter_model'])) {
 			$sql .= " AND LCASE(p.model) LIKE '%" . $this->db->escape(mb_strtolower($data['filter_model'], 'UTF-8')) . "%'";
 		}
 
+		if (isset($data['filter_sku']) && !is_null($data['filter_sku'])) {
+			$sql .= " AND LCASE(p.sku) LIKE '%" . $this->db->escape(mb_strtolower($data['filter_sku'], 'UTF-8')) . "%'";
+		}
+
 		if (isset($data['filter_price']) && !is_null($data['filter_price'])) {
 			$sql .= " AND p.price LIKE '" . $this->db->escape($data['filter_price']) . "%'";
 		}
 
 		// Add
diff --git a/public_html/admin/view/template/catalog/product_list.tpl b/public_html/admin/view/template/catalog/product_list.tpl
index a57163f..19a25fa 100644
--- a/public_html/admin/view/template/catalog/product_list.tpl
+++ b/public_html/admin/view/template/catalog/product_list.tpl
@@ -31,10 +31,15 @@
               <td class="left"><?php if ($sort == 'p.model') { ?>
                 <a href="<?php echo $sort_model; ?>" class="<?php echo strtolower($order); ?>"><?php echo $column_model; ?></a>
                 <?php } else { ?>
                 <a href="<?php echo $sort_model; ?>"><?php echo $column_model; ?></a>
                 <?php } ?></td>
+              <td class="left"><?php if ($sort == 'p.sku') { ?>
+                <a href="<?php echo $sort_sku; ?>" class="<?php echo strtolower($order); ?>"><?php echo $column_sku; ?></a>
+                <?php } else { ?>
+                <a href="<?php echo $sort_sku; ?>"><?php echo $column_sku; ?></a>
+                <?php } ?></td>
               <td class="left"><?php if ($sort == 'p.price') { ?>
                 <a href="<?php echo $sort_price; ?>" class="<?php echo strtolower($order); ?>"><?php echo $column_price; ?></a>
                 <?php } else { ?>
                 <a href="<?php echo $sort_price; ?>"><?php echo $column_price; ?></a>
                 <?php } ?></td>
@@ -60,10 +65,11 @@
             <tr class="filter">
               <td></td>
               <td></td>
               <td><input type="text" name="filter_name" value="<?php echo $filter_name; ?>" /></td>
               <td><input type="text" name="filter_model" value="<?php echo $filter_model; ?>" size="10" /></td>
+              <td><input type="text" name="filter_sku"   value="<?php echo $filter_sku; ?>" size="10" /></td>
               <td align="left"><input type="text" name="filter_price" value="<?php echo $filter_price; ?>" size="8"/></td>
               <td ><select name="filter_category" style="width: 100%;" >
               <option value="*"></option>
               <?php foreach ($categories as $category) { ?>
                 <?php if ($category['category_id']==$filter_category) { ?>
@@ -98,10 +104,11 @@
                 <input type="checkbox" name="selected[]" value="<?php echo $product['product_id']; ?>" />
                 <?php } ?></td>
               <td class="center"><img src="<?php echo $product['image']; ?>" width="<?php echo $product['image_width']; ?>" height="<?php echo $product['image_height']; ?>" alt="<?php echo $product['name']; ?>" style="padding: 1px; border: 1px solid #DDDDDD;" /></td>
               <td class="left"><?php echo $product['name']; ?></td>
               <td class="left"><?php echo $product['model']; ?></td>
+              <td class="left"><?php echo $product['sku']; ?></td>
               <td class="right">
 			    <?php if ($product['special']) { ?>
                 <span style="text-decoration:line-through"><?php echo $product['price']; ?></span>
<span style="color:#b00;"><?php echo $product['special']; ?></span>
                 <?php } else { ?>
 			    <?php echo $product['price']; ?>
@@ -126,11 +133,11 @@
                 <?php } ?></td>
             </tr>
             <?php } ?>
             <?php } else { ?>
             <tr>
-              <td class="center" colspan="8"><?php echo $text_no_results; ?></td>
+              <td class="center" colspan="10"><?php echo $text_no_results; ?></td>
             </tr>
             <?php } ?>
           </tbody>
         </table>
       </form>
@@ -152,10 +159,16 @@ function filter() {
 
 	if (filter_model) {
 		url += '&filter_model=' + encodeURIComponent(filter_model);
 	}
 
+	var filter_sku = $('input[name=\'filter_sku\']').attr('value');
+
+	if (filter_sku) {
+		url += '&filter_sku=' + encodeURIComponent(filter_sku);
+	}
+
 	var filter_price = $('input[name=\'filter_price\']').attr('value');
 
 	if (filter_price) {
 		url += '&filter_price=' + encodeURIComponent(filter_price);
 	}
twitter.com facebook.com vkontakte.ru odnoklassniki.ru mail.ru ya.ru digg.com friendfeed.com liveinternet.ru livejournal.ru yandex.ru del.icio.us
Более 1000 готовых шаблонов Opencart для интернет-магазинов
Комментариев: 21
  1. Добрый день.

    Стоит 1.5.1.3.1

    Сделал все изменения указанные выше, всё работает, колонка с кодом есть в админке но два вопроса:

    Первый: собственно

    Notice: Undefined variable: filter_sku in ...admin/controller/catalog/product.php on line 343

    Notice: Undefined variable: filter_sku in ...admin/controller/catalog/product.php on line 526

    В чём причина? Ну кроме корявости моих рук)))

    И второй. Как сделать чтобы SKU отображался в письме админу, и в админке (там где детали заказа).

    Т.к. у меня бонусные баллы заменены SKU (незнаю, правильно это или нет, ну да ладно) но так отображается на страничке товара. И получается что суммируется сумма кодов...

    Спасибо заранее.

  2. 2012-03-01 в 00:42:39 | Ruslan Brest

    По поводу ошибок - перепроверяйте все изменения ещё и ещё. Угадывать, где именно ошибка, я не умею.

    Показ колонки SKU в админке при просмотре заказов - опубликовал:

    http://rb.labtodo.com/page/opencart-1513-backend-orders-sku-v-spiske-tovarov

    Про письмо не могу подсказать сейчас - нет времени разбираться.

  3. Спасибо огромное!

    Всё получилось!

  4. thanks for this perfect tutorial.

  5. 2012-06-25 в 08:31:14 | Александр

    Привет! Есть ли данное решение под версию 1.5.3.1? Спасибо! :)

  6. Действительно, будет ли решение дляверсии 1.5.3.1 ?

  7. Так все же работает на 1.5.4.1, должно и на 1.5.3.1

  8. 2013-08-27 в 06:55:59 | Дмитрий

    у меня на 1.5.4.1 работает, но появляется ошибка при нажатии изменить на товаре. Кто поможет?

  9. 2013-08-29 в 08:41:45 | Дмитрий

    Народ подскажите что за ошибка! Добавляю эти файлы, в товарах появляется графа SKU, работает все, ищет..Но появилась проблема при нажатии на "изменить" на любом товаре выдает ошибку

    Notice: Error: Table 'h44287_cartdude.h44287_product_tag' doesn't exist

    Error No: 1146

    SELECT * FROM h44287_product_tag WHERE product_id = '1353' in /home/h44287/data/www/copicomp.ru/system/database/mysql.php on line 49

    В какую сторону копать? подскажите плиз...

  10. аналогичная проблема и у меня

    Notice: Error: Table 'h44287_cartdude.h44287_product_tag' doesn't exist
    Error No: 1146
    SELECT * FROM h44287_product_tag WHERE product_id = '1353' in /home/h44287/data/www/copicomp.ru/system/database/mysql.php on line 49

    Как лечится?

  11. 2013-10-15 в 11:35:56 | Ruslan Brest

    Думаю, нетрудно нажать Ctrl-F и поискать на этой странице `product_tag`. Чтобы убедиться, что в этой статье и моём коде эта таблица вообще никак, никогда и нигде не используется. Поэтому непонятно, почему вы ждёте ответов от меня и именно в этой теме.

    Наберите в гугле (яндексе, бинге или чем вы пользуетесь для поиска) "opencart product_tag doesn't exist" -- и изучайте выдачу. Скорей всего вы обновляли существующий магазин до новых версий и ошибка связана с процессом обновления. А не описанными в этой статье модификациями.

  12. 2013-10-29 в 19:15:54 | Александр

    Здравствуйте! Все сделал как описано, все заработало, появилась колонка. Но работает не совсем правильно. Когда начинаю искать через фильтр, этот столбец пропадает и все сдвигается влево на один столбец. Причем пропадает вновь созданный столбец даже если пользоваться фильтрами других столбцов. Подскажите как исправить эту проблему, может где-то я что-то упустил? Так вроде все перепроверил 100 раз. Помогите пожалуйста.

  13. 2013-10-30 в 23:27:58 | Ruslan Brest

    На какой версии и какой сборке это делаете? Не установлены ли какие-либо модули (для облегчения редактирования товаров и цен, например)?

    На указанной версии всё прекрасно работает. На других версиях - не знаю, там код вполне может отличаться и решение надо писать для совсем другого исходного кода.

  14. 2013-10-30 в 23:50:06 | Александр

    Да, я переделываю на ocStore 1.5.5.1. Только добавляю столбец расположение (location), модулей еще не ставил никаких, vqmod тоже не ставил. Ничего мешать не должно вроде. Все отображается все вроде нормально, Но вот когда фильтрую, причем любым из фильтров то пропадает мой столбец "Расположение" и все сдвигается на один столбец влево (при этом в шапке - там где названия столбцов, он остается) пропадает только столбец с содержанием переменной location. Могу прислать скрины и скинуть файлы, может посмотрите свежим взглядом? Уже второй вечер убиваю, а найти причину не могу ((((

  15. 2013-10-31 в 01:39:08 | Ruslan Brest

    Поставил ocStore 15511. Там список товаров переделан и используется AJAX, в отличие от оригинального Opencart (oc1551, oc156). Так что изменения, разумеется, в других местах надо делать, в т.ч. и в куске шаблона "productTemplate", расположенном среди яваскрипт-кода.

  16. 2013-10-31 в 01:48:07 | Александр

    Спс! Добавил в скрипте в productTemplate эту строчку ${location} и вроде все заработало правильно ) Как протестирую полностью, отпишусь что и как.

  17. 2014-07-13 в 01:16:26 | Виктор

    Нужен совет, может сталкивались с сортировкой каталога в админке. В общей таблице товаров чтобы можно было выставлять позицию сортировки.

  18. 2014-07-13 в 22:01:47 | Ruslan Brest

    Пару раз возникала такая мысль. Но не делал.

    А вообще есть модули, которые позволяют выбирать колонки на лету и редактировать многие параметры прямо из списка товаров, не покидая его. Наверняка там среди прочего есть и порядок сортировки. Поищите в модулях что-то такое, посмотрите их демки.

  19. на 1.5.5.1.2 встало, но при фильтрации значения столбца SKU пропадают.

  20. Подскажите, пожалуйста, как это сделать на 1,5,5,1,2. Очень насущная проблема?

  21. Поставил на ocStore 2.1.0.2.1. Все отлично работает! Большое спасибо ;)

Оставьте комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

Имя и сайт используются только при регистрации

Если вы уже зарегистрированы как комментатор или хотите зарегистрироваться, укажите пароль и свой действующий email. При регистрации на указанный адрес придет письмо с кодом активации и ссылкой на ваш персональный аккаунт, где вы сможете изменить свои данные, включая адрес сайта, ник, описание, контакты и т.д., а также подписку на новые комментарии.

Авторизация  Facebook. MaxSiteAuth. Loginza

(обязательно)